diff --git a/locales/ar/LC_MESSAGES/messages.po b/locales/ar/LC_MESSAGES/messages.po index 13b936424..f4b5475ec 100644 --- a/locales/ar/LC_MESSAGES/messages.po +++ b/locales/ar/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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2025-01-19 01:44+0000\n" "Last-Translator: Mohamed Brahimi \n" "Language-Team: Arabic `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4553,7 +4553,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4561,11 +4561,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4582,67 +4582,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4990,7 +4990,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7417,7 +7417,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9683,8 +9683,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9712,8 +9712,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9744,7 +9744,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9774,8 +9774,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9827,7 +9827,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9839,7 +9839,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9851,8 +9851,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9951,7 +9951,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9959,8 +9959,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -9998,8 +9998,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10050,8 +10050,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10063,7 +10063,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10090,8 +10090,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10709,7 +10709,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12617,10 +12617,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12631,41 +12631,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12673,30 +12677,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12709,13 +12713,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12725,24 +12729,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12753,11 +12757,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13536,7 +13540,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13547,9 +13551,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14272,7 +14276,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14340,7 +14344,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14362,23 +14366,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14462,39 +14466,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14502,19 +14521,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14522,7 +14541,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14530,7 +14549,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14538,31 +14557,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14676,76 +14695,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14753,7 +14772,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14763,32 +14782,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14796,50 +14824,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14847,64 +14875,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14912,13 +14940,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14926,25 +14954,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14952,18 +14980,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14972,13 +15000,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14986,20 +15014,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15007,7 +15035,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15017,11 +15045,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15029,7 +15152,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15039,18 +15162,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15059,7 +15182,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15070,42 +15193,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15114,24 +15237,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15139,28 +15262,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15171,33 +15294,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15206,89 +15329,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15298,21 +15445,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15333,7 +15480,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15420,12 +15567,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15438,17 +15585,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15458,7 +15605,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15467,12 +15614,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15487,7 +15634,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16029,17 +16176,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18043,7 +18198,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20604,7 +20759,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20616,82 +20771,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20705,7 +20870,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20714,7 +20879,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20726,44 +20891,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20773,24 +20946,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20799,40 +20974,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20841,11 +21016,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20853,20 +21028,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20875,56 +21050,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20932,38 +21107,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20971,14 +21146,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20986,7 +21161,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20994,24 +21169,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21019,7 +21194,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21030,17 +21205,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21048,19 +21314,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21069,20 +21335,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21090,18 +21356,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21109,7 +21375,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21117,25 +21383,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22813,70 +23091,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22884,7 +23099,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22893,18 +23108,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22912,13 +23127,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22927,23 +23142,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22952,79 +23167,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/ars/LC_MESSAGES/messages.po b/locales/ars/LC_MESSAGES/messages.po index 50edbf264..4844fff84 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -3931,7 +3931,7 @@ msgid "Column" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "" @@ -4296,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "" @@ -4514,14 +4514,14 @@ msgid "" "the file :file:`greet.py`, named after the main module:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -4533,13 +4533,13 @@ msgid "" "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4547,7 +4547,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4555,11 +4555,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4576,67 +4576,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4984,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7411,7 +7411,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9677,8 +9677,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9706,8 +9706,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9738,7 +9738,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9768,8 +9768,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9821,7 +9821,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9833,7 +9833,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9845,8 +9845,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9945,7 +9945,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9953,8 +9953,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -9992,8 +9992,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10044,8 +10044,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10057,7 +10057,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10084,8 +10084,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10703,7 +10703,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12611,10 +12611,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12625,41 +12625,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12667,30 +12671,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12703,13 +12707,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12719,24 +12723,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12747,11 +12751,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13530,7 +13534,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13541,9 +13545,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14266,7 +14270,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14334,7 +14338,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14356,23 +14360,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14456,39 +14460,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14496,19 +14515,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14516,7 +14535,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14524,7 +14543,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14532,31 +14551,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14670,76 +14689,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14747,7 +14766,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14757,32 +14776,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14790,50 +14818,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14841,64 +14869,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14906,13 +14934,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14920,25 +14948,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14946,18 +14974,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14966,13 +14994,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14980,20 +15008,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15001,7 +15029,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15011,11 +15039,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15023,7 +15146,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15033,18 +15156,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15053,7 +15176,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15064,42 +15187,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15108,24 +15231,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15133,28 +15256,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15165,33 +15288,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15200,89 +15323,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15292,21 +15439,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15327,7 +15474,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15414,12 +15561,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15432,17 +15579,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15452,7 +15599,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15461,12 +15608,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15481,7 +15628,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16023,17 +16170,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18037,7 +18192,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20598,7 +20753,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20610,82 +20765,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20699,7 +20864,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20708,7 +20873,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20720,44 +20885,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20767,24 +20940,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20793,40 +20968,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20835,11 +21010,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20847,20 +21022,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20869,56 +21044,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20926,38 +21101,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20965,14 +21140,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20980,7 +21155,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20988,24 +21163,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21013,7 +21188,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21024,17 +21199,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21042,19 +21308,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21063,20 +21329,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21084,18 +21350,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21103,7 +21369,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21111,25 +21377,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22807,70 +23085,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22878,7 +23093,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22887,18 +23102,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22906,13 +23121,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22921,23 +23136,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22946,79 +23161,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/cs/LC_MESSAGES/messages.po b/locales/cs/LC_MESSAGES/messages.po index cba257b89..f59019959 100644 --- a/locales/cs/LC_MESSAGES/messages.po +++ b/locales/cs/LC_MESSAGES/messages.po @@ -2,21 +2,22 @@ # Copyright (C) 2013–2020, PyPA # This file is distributed under the same license as the Python Packaging User Guide package. # Luky12568 , 2025. +# Karolína Wallenfelsová , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-11 12:33+0000\n" -"PO-Revision-Date: 2025-03-13 10:55+0000\n" -"Last-Translator: Luky12568 \n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" +"PO-Revision-Date: 2025-10-16 23:52+0000\n" +"Last-Translator: Karolína Wallenfelsová \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 5.10.3\n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" +"X-Generator: Weblate 5.14-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -507,7 +508,7 @@ msgstr "" #: ../source/guides/installing-using-linux-tools.rst:7 #: ../source/guides/packaging-binary-extensions.rst:7 msgid "Incomplete" -msgstr "" +msgstr "Nedokončené" #: ../source/discussions/deploying-python-applications.rst:0 #: ../source/discussions/downstream-packaging.rst:0 @@ -3941,7 +3942,7 @@ msgid "Column" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "" @@ -4306,7 +4307,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "" @@ -4524,14 +4525,14 @@ msgid "" "the file :file:`greet.py`, named after the main module:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -4543,13 +4544,13 @@ msgid "" "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4557,7 +4558,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4565,11 +4566,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4586,67 +4587,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4994,7 +4995,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7421,7 +7422,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9687,8 +9688,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9716,8 +9717,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9748,7 +9749,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9778,8 +9779,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9831,7 +9832,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9843,7 +9844,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9855,8 +9856,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9955,7 +9956,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9963,8 +9964,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -10002,8 +10003,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10054,8 +10055,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10067,7 +10068,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10094,8 +10095,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10713,7 +10714,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12621,10 +12622,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12635,41 +12636,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12677,30 +12682,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12713,13 +12718,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12729,24 +12734,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12757,11 +12762,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13540,7 +13545,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13551,9 +13556,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14276,7 +14281,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14344,7 +14349,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14366,23 +14371,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14466,39 +14471,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14506,19 +14526,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14526,7 +14546,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14534,7 +14554,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14542,31 +14562,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14680,76 +14700,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14757,7 +14777,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14767,32 +14787,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14800,50 +14829,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14851,64 +14880,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14916,13 +14945,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14930,25 +14959,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14956,18 +14985,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14976,13 +15005,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14990,20 +15019,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15011,7 +15040,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15021,11 +15050,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15033,7 +15157,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15043,18 +15167,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15063,7 +15187,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15074,42 +15198,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15118,24 +15242,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15143,28 +15267,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15175,33 +15299,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15210,89 +15334,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15302,21 +15450,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15337,7 +15485,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15424,12 +15572,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15442,17 +15590,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15462,7 +15610,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15471,12 +15619,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15491,7 +15639,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16033,17 +16181,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18047,7 +18203,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20608,7 +20764,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20620,82 +20776,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20709,7 +20875,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20718,7 +20884,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20730,44 +20896,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20777,24 +20951,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20803,40 +20979,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20845,11 +21021,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20857,20 +21033,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20879,56 +21055,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20936,38 +21112,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20975,14 +21151,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20990,7 +21166,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20998,24 +21174,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21023,7 +21199,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21034,17 +21210,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21052,19 +21319,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21073,20 +21340,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21094,18 +21361,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21113,7 +21380,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21121,25 +21388,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22817,70 +23096,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22888,7 +23104,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22897,18 +23113,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22916,13 +23132,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22931,23 +23147,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22956,79 +23172,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/da/LC_MESSAGES/messages.po b/locales/da/LC_MESSAGES/messages.po new file mode 100644 index 000000000..2c86bbdde --- /dev/null +++ b/locales/da/LC_MESSAGES/messages.po @@ -0,0 +1,26794 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2013–2020, PyPA +# This file is distributed under the same license as the Python Packaging User Guide package. +# Philip Mallegol-Hansen , 2025. +msgid "" +msgstr "" +"Project-Id-Version: Python Packaging User Guide\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" +"PO-Revision-Date: 2025-10-09 04:07+0000\n" +"Last-Translator: Philip Mallegol-Hansen \n" +"Language-Team: Danish \n" +"Language: da\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.14-dev\n" + +#: ../source/contribute.rst:5 +msgid "Contribute to this guide" +msgstr "Bidrag til denne guide" + +#: ../source/contribute.rst:7 +msgid "" +"The |PyPUG| welcomes contributors! There are lots of ways to help out, " +"including:" +msgstr "" +"Bidrag til denne |PyPUG| er velkomne! Der er mange måder at hjælpe til, " +"blandt andet:" + +#: ../source/contribute.rst:10 +msgid "Reading the guide and giving feedback" +msgstr "Læs guiden og giv feedback" + +#: ../source/contribute.rst:11 +msgid "Reviewing new contributions" +msgstr "Review af nye bidrag" + +#: ../source/contribute.rst:12 +msgid "Revising existing content" +msgstr "Revidering af eksisterende indhold" + +#: ../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 "" + +#: ../source/contribute.rst:25 +msgid "" +"By contributing to the |PyPUG|, you're expected to follow the PSF's `Code of " +"Conduct`__." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/contribute.rst:80 +msgid "" +"If you are experiencing issues while you are working on translations, please " +"open an issue on `GitHub`_." +msgstr "" + +#: ../source/contribute.rst:85 +msgid "" +"Any translations of this project should follow `reStructuredText syntax`_." +msgstr "" + +#: ../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 "" + +#: ../source/contribute.rst:100 +msgid "Following reStructuredText syntax" +msgstr "" + +#: ../source/contribute.rst:102 +msgid "" +"If you are not familiar with reStructuredText (RST) syntax, please read " +"`this guide`_ before translating on Weblate." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/contribute.rst:129 +msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" +msgstr "" + +#: ../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 "" + +#: ../source/contribute.rst:140 +msgid "" +"To build the guide, run the following shell command in the project's root " +"folder:" +msgstr "" + +#: ../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 "" + +#: ../source/contribute.rst:151 +msgid "" +"You can build the guide and serve it via an HTTP server using the following " +"command:" +msgstr "" + +#: ../source/contribute.rst:158 +msgid "The guide will be browsable via http://localhost:8000." +msgstr "" + +#: ../source/contribute.rst:162 +msgid "Where the guide is deployed" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/contribute.rst:0 +msgid "Right: pip uses…" +msgstr "" + +#: ../source/contribute.rst:0 +msgid "Wrong: …hosted on github." +msgstr "" + +#: ../source/contribute.rst:0 +msgid "Right: …hosted on GitHub." +msgstr "" + +#: ../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 "" + +#: ../source/contribute.rst:283 +msgid "" +"In section headings, use sentence case. In other words, write headings as " +"you would write a typical sentence." +msgstr "" + +#: ../source/contribute.rst:0 +msgid "Wrong: Things You Should Know About Python" +msgstr "" + +#: ../source/contribute.rst:0 +msgid "Right: Things you should know about Python" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/deploying-python-applications.rst:4 +msgid "Deploying Python applications" +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/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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/deploying-python-applications.rst:77 +msgid "Application bundles" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 +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 "" + +#: ../source/discussions/deploying-python-applications.rst:115 +msgid "Unix (including Linux and macOS)" +msgstr "" + +#: ../source/discussions/deploying-python-applications.rst:118 +#: ../source/key_projects.rst:576 +msgid "pex" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/distribution-package-vs-import-package.rst:13 +msgid "What's a distribution package?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/distribution-package-vs-import-package.rst:31 +msgid "What's an import package?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/distribution-package-vs-import-package.rst:47 +msgid "What are the links between distribution packages and import packages?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/distribution-package-vs-import-package.rst:81 +msgid "How do distribution package names and import package names compare?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:5 +msgid "Supporting downstream packaging" +msgstr "" + +#: ../source/discussions/downstream-packaging.rst:7 +msgid "Draft" +msgstr "" + +#: ../source/discussions/downstream-packaging.rst:8 +msgid "2025-?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:51 +msgid "Provide complete source distributions" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:62 +msgid "Being able to audit the source code of all packages." +msgstr "" + +#: ../source/discussions/downstream-packaging.rst:64 +msgid "Being able to run the test suite and build documentation." +msgstr "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:69 +msgid "" +"Being able to build on a specific platform that is not covered by upstream " +"builds." +msgstr "" + +#: ../source/discussions/downstream-packaging.rst:72 +msgid "Being able to build against specific versions of system libraries." +msgstr "" + +#: ../source/discussions/downstream-packaging.rst:74 +msgid "Having a consistent build process across all Python packages." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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/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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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/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/discussions/downstream-packaging.rst:147 +msgid "Do not use the Internet during the build process" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:168 +msgid "The remote resources may change, making the build not reproducible." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:210 +msgid "Support building against system dependencies" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:253 +msgid "" +"Static linking and vendoring obscures the use of external dependencies, " +"making source auditing harder." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:310 +msgid "Verifying that the downstream packaging did not introduce any bugs." +msgstr "" + +#: ../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 "" + +#: ../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 "" +"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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:409 +msgid "Aim for stable releases" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/downstream-packaging.rst:433 +msgid "adding patches to the version currently published," +msgstr "" + +#: ../source/discussions/downstream-packaging.rst:435 +msgid "or even downgrading the stable channel to an earlier release." +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 "" +"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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" +"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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/install-requires-vs-requirements.rst:5 +msgid "install_requires vs requirements files" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/install-requires-vs-requirements.rst:62 +#: ../source/tutorials/installing-packages.rst:464 +msgid "Requirements files" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:5 +msgid "Package Formats" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:21 +msgid "What is a source distribution?" +msgstr "" + +#: ../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/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 "" + +#: ../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 "" + +#: ../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/discussions/package-formats.rst:50 +msgid "" +"If you want technical details on the sdist format, read the :ref:`sdist " +"specification `." +msgstr "" + +#: ../source/discussions/package-formats.rst:55 +msgid "What is a wheel?" +msgstr "" + +#: ../source/discussions/package-formats.rst:57 +msgid "" +"Conceptually, a wheel contains exactly the files that need to be copied when " +"installing the package." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:124 +msgid "(``none``) It does not depend on the Python version;" +msgstr "" + +#: ../source/discussions/package-formats.rst:125 +msgid "(``any``) It does not depend on the platform." +msgstr "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:130 +msgid "" +"All technical details on the wheel format can be found in the :ref:`wheel " +"specification `." +msgstr "" + +#: ../source/discussions/package-formats.rst:138 +msgid "What about eggs?" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:144 +msgid "Here's a breakdown of the important differences between wheel and egg." +msgstr "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:149 +msgid "" +"Wheel has an :doc:`official standard specification `. Egg did not." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/package-formats.rst:161 +msgid "" +"Wheel uses standard :ref:`.dist-info directories `. Egg used ``.egg-info``." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/pip-vs-easy-install.rst:6 +msgid "pip vs easy_install" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/pip-vs-easy-install.rst:32 +msgid "Dependency Overrides" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:32 +msgid "Yes (:ref:`Requirements Files `)" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/pip-vs-easy-install.rst:38 +msgid ":pep:`438` Support" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/pip-vs-easy-install.rst:41 +msgid "Encapsulated Egg format" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:44 +msgid "sys.path modification" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:48 +msgid "Installs from :term:`Eggs `" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:51 +msgid "`pylauncher support`_" +msgstr "" + +#: ../source/discussions/pip-vs-easy-install.rst:51 +msgid "Yes [1]_" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/pip-vs-easy-install.rst:60 +msgid "Yes, via setup.cfg" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:8 +msgid "No, :term:`setup.py` and :ref:`setuptools` are not deprecated." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:37 +#: ../source/guides/modernize-setup-py-project.rst:34 +msgid "``python -m pip install --editable .``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:39 +msgid "``python -m build`` [#needs-build]_" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:80 +msgid "" +"The command ``python setup.py install`` was deprecated in setuptools version " +"*58.3.0*." +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:91 +msgid "``python setup.py test``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:93 +msgid "The recommendation is to use a test runner such as pytest_." +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:99 +msgid "" +"``python setup.py check``, ``python setup.py register``, and ``python setup." +"py upload``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:101 +msgid "A trusted replacement is :ref:`twine`:" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:103 +msgid "``python -m twine check --strict dist/*``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:104 +msgid "``python -m twine register dist/*.whl`` [#not-pypi]_" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:105 +msgid "``python -m twine upload dist/*``" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:112 +msgid "``python setup.py --version``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:114 +msgid "" +"A possible replacement solution (among others) is to rely on setuptools-scm_:" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:116 +msgid "``python -m setuptools_scm``" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:130 +msgid "``bdist``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:131 +msgid "``bdist_dumb``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:132 +msgid "``bdist_egg``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:133 +msgid "``bdist_rpm``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:134 +msgid "``build``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:135 +msgid "``build_clib``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:136 +msgid "``build_ext``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:137 +msgid "``build_py``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:138 +msgid "``build_scripts``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:139 +msgid "``clean``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:140 +msgid "``dist_info``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:141 +msgid "``easy_install``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:142 +msgid "``editable_wheel``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:143 +msgid "``egg_info``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:144 +msgid "``install_data``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:145 +msgid "``install_egg_info``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:146 +msgid "``install_headers``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:147 +msgid "``install_lib``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:148 +msgid "``install_scripts``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:149 +msgid "``rotate``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:150 +msgid "``saveopts``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:151 +msgid "``setopt``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:152 +msgid "``upload_docs``" +msgstr "" + +#: ../source/discussions/setup-py-deprecated.rst:156 +msgid "What about custom commands?" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:166 +msgid "What about custom build steps?" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:175 +#: ../source/guides/modernize-setup-py-project.rst:21 +msgid "Should ``setup.py`` be deleted?" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:183 +msgid "Is ``pyproject.toml`` mandatory?" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:196 +msgid "" +"The guide :ref:`modernize-setup-py-project` has more details about this." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/setup-py-deprecated.rst:215 +msgid ":doc:`setuptools:deprecated/commands`" +msgstr "" + +#: ../source/discussions/single-source-version.rst:5 +msgid "Single-sourcing the Project Version" +msgstr "" + +#: ../source/discussions/single-source-version.rst:7 +msgid "Complete" +msgstr "" + +#: ../source/discussions/single-source-version.rst:8 +msgid "2024-10-07" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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/discussions/single-source-version.rst:38 +msgid "Consult your build system's documentation for their recommended method." +msgstr "" + +#: ../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 "" + +#: ../source/discussions/single-source-version.rst:52 +msgid "" +"The following are links to some build system's documentation for handling " +"version strings." +msgstr "" + +#: ../source/discussions/single-source-version.rst:54 +msgid "`Flit `_" +msgstr "" + +#: ../source/discussions/single-source-version.rst:56 +msgid "`Hatchling `_" +msgstr "" + +#: ../source/discussions/single-source-version.rst:58 +msgid "" +"`PDM `_" +msgstr "" + +#: ../source/discussions/single-source-version.rst:60 +msgid "" +"`Setuptools `_" +msgstr "" + +#: ../source/discussions/single-source-version.rst:62 +msgid "`setuptools_scm `_" +msgstr "" + +#: ../source/discussions/src-layout-vs-flat-layout.rst:5 +msgid "src layout vs flat layout" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/src-layout-vs-flat-layout.rst:86 +msgid "Running a command-line interface from source with src-layout" +msgstr "" + +#: ../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 "" + +#: ../source/discussions/versioning.rst:6 +#: ../source/specifications/simple-repository-api.rst:349 +msgid "Versioning" +msgstr "" + +#: ../source/discussions/versioning.rst:8 +msgid "This discussion covers all aspects of versioning Python packages." +msgstr "" + +#: ../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 "" + +#: ../source/discussions/versioning.rst:21 +msgid "A simple version (final release): ``1.2.0``" +msgstr "" + +#: ../source/discussions/versioning.rst:22 +msgid "A development release: ``1.2.0.dev1``" +msgstr "" + +#: ../source/discussions/versioning.rst:23 +msgid "An alpha release: ``1.2.0a1``" +msgstr "" + +#: ../source/discussions/versioning.rst:24 +msgid "A beta release: ``1.2.0b1``" +msgstr "" + +#: ../source/discussions/versioning.rst:25 +msgid "A release candidate: ``1.2.0rc1``" +msgstr "" + +#: ../source/discussions/versioning.rst:26 +msgid "A post-release: ``1.2.0.post1``" +msgstr "" + +#: ../source/discussions/versioning.rst:27 +msgid "" +"A post-release of an alpha release (possible, but discouraged): ``1.2.0a1." +"post1``" +msgstr "" + +#: ../source/discussions/versioning.rst:28 +msgid "A simple version with only two components: ``23.12``" +msgstr "" + +#: ../source/discussions/versioning.rst:29 +msgid "A simple version with just one component: ``42``" +msgstr "" + +#: ../source/discussions/versioning.rst:30 +msgid "A version with an epoch: ``1!1.0``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/discussions/versioning.rst:49 +msgid "" +"Finally, epochs, a rarely used feature, serve to fix the sorting order when " +"changing the versioning scheme. For example, if a project is using calendar " +"versioning, with versions like 23.12, and switches to semantic versioning, " +"with versions like 1.0, the comparison between 1.0 and 23.12 will go the " +"wrong way. To correct this, the new version numbers should have an explicit " +"epoch, as in \"1!1.0\", in order to be treated as more recent than the old " +"version numbers." +msgstr "" + +#: ../source/discussions/versioning.rst:59 +msgid "Semantic versioning vs. calendar versioning" +msgstr "" + +#: ../source/discussions/versioning.rst:61 +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 "" + +#: ../source/discussions/versioning.rst:68 +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:74 +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 "" + +#: ../source/discussions/versioning.rst:84 +#: ../source/specifications/version-specifiers.rst:726 +msgid "Semantic versioning" +msgstr "" + +#: ../source/discussions/versioning.rst:86 +msgid "" +"The idea of *semantic versioning* (or SemVer) is to use 3-part version " +"numbers, *major.minor.patch*, where the project author increments:" +msgstr "" + +#: ../source/discussions/versioning.rst:89 +msgid "*major* when they make incompatible API changes," +msgstr "" + +#: ../source/discussions/versioning.rst:90 +msgid "" +"*minor* when they add functionality in a backwards-compatible manner, and" +msgstr "" + +#: ../source/discussions/versioning.rst:91 +msgid "*patch*, when they make backwards-compatible bug fixes." +msgstr "" + +#: ../source/discussions/versioning.rst:93 +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 "" + +#: ../source/discussions/versioning.rst:103 +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 "" + +#: ../source/discussions/versioning.rst:112 +msgid "" +"Python projects adopting semantic versioning should abide by clauses 1-8 of " +"the `Semantic Versioning 2.0.0 specification `_." +msgstr "" + +#: ../source/discussions/versioning.rst:115 +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 "" + +#: ../source/discussions/versioning.rst:124 +msgid "Calendar versioning" +msgstr "" + +#: ../source/discussions/versioning.rst:126 +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 "" + +#: ../source/discussions/versioning.rst:130 +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 "" + +#: ../source/discussions/versioning.rst:134 +msgid "" +"Calendar version numbers typically take the form *year.month* (for example, " +"23.12 for December 2023)." +msgstr "" + +#: ../source/discussions/versioning.rst:137 +msgid "" +":doc:`Pip `, the standard Python package installer, uses calendar " +"versioning." +msgstr "" + +#: ../source/discussions/versioning.rst:142 +msgid "Other schemes" +msgstr "" + +#: ../source/discussions/versioning.rst:144 +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 "" + +#: ../source/discussions/versioning.rst:150 +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:157 +#: ../source/specifications/version-specifiers.rst:114 +msgid "Local version identifiers" +msgstr "" + +#: ../source/discussions/versioning.rst:159 +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 "" + +#: ../source/discussions/versioning.rst:165 +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 "" + +#: ../source/discussions/versioning.rst:177 +msgid "Accessing version information at runtime" +msgstr "" + +#: ../source/discussions/versioning.rst:179 +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 "" + +#: ../source/discussions/versioning.rst:186 +msgid "" +"Many projects also choose to version their top level :term:`import packages " +"` by providing a package level ``__version__`` attribute::" +msgstr "" + +#: ../source/discussions/versioning.rst:194 +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 "" + +#: ../source/discussions/versioning.rst:198 +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 "" + +#: ../source/discussions/versioning.rst:202 +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 "" + +#: ../source/discussions/versioning.rst:210 +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 "" + +#: ../source/discussions/versioning.rst:225 +msgid "" +"Some more examples of unusual version numbers are given in a `blog post " +"`_ by Seth Larson." +msgstr "" + +#: ../source/discussions/versioning.rst:228 +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 "" + +#: ../source/discussions/versioning.rst:234 +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 "" + +#: ../source/flow.rst:3 +msgid "The Packaging Flow" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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/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 "" + +#: ../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 "" + +#: ../source/flow.rst:35 +msgid "Upload the build artifacts to the package distribution service." +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 "" + +#: ../source/flow.rst:40 +msgid "" +"Download one of the package's build artifacts from the package distribution " +"service." +msgstr "" + +#: ../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 "" + +#: ../source/flow.rst:47 +msgid "" +"These last 2 steps are typically performed by :ref:`pip` when an end user " +"runs ``pip install``." +msgstr "" + +#: ../source/flow.rst:50 +msgid "The steps above are described in more detail below." +msgstr "" + +#: ../source/flow.rst:53 +msgid "The source tree" +msgstr "" + +#: ../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/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 "" + +#: ../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 "" + +#: ../source/flow.rst:77 +msgid "For example, here is a table for using :ref:`hatch`:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/flow.rst:97 +msgid "" +"a ``[project]`` table containing project :doc:`Core Metadata ` (name, version, author and so forth)," +msgstr "" + +#: ../source/flow.rst:101 +msgid "a ``[tool]`` table containing tool-specific configuration options." +msgstr "" + +#: ../source/flow.rst:103 +msgid "" +"Refer to the :ref:`pyproject.toml guide ` for a " +"complete guide to ``pyproject.toml`` configuration." +msgstr "" + +#: ../source/flow.rst:108 +msgid "Build artifacts" +msgstr "" + +#: ../source/flow.rst:111 +msgid "The source distribution (sdist)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/flow.rst:126 +msgid "" +"Or, your build tool may provide its own interface for creating an sdist." +msgstr "" + +#: ../source/flow.rst:130 +msgid "The built distributions (wheels)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/flow.rst:150 +msgid "Or, your build tool may provide its own interface for creating a wheel." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/flow.rst:168 +msgid "Or, your build tool may provide its own interface for uploading." +msgstr "" + +#: ../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 "" + +#: ../source/flow.rst:181 +msgid "" +"End users may also use other tools like :ref:`pipenv`, :ref:`poetry`, or :" +"ref:`pdm`." +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:14 +msgid "Build Backend" +msgstr "" + +#: ../source/glossary.rst:17 +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." +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:32 +msgid "Build Frontend" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:42 +msgid "Examples of build frontends are :ref:`pip` and :ref:`build`." +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:56 +msgid "Built Metadata" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:66 +msgid "Core Metadata" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:74 +msgid "Core Metadata Field" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:83 +msgid "Distribution Archive" +msgstr "" + +#: ../source/glossary.rst:86 +msgid "" +"The physical distribution artifact (i.e. a file on disk) for a :term:" +"`Distribution Package`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/glossary.rst:105 +msgid "Egg" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/glossary.rst:133 +msgid "Installed Project" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:140 +msgid "Known Good Set (KGS)" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:149 +msgid "License Classifier" +msgstr "" + +#: ../source/glossary.rst:152 +msgid "" +"A PyPI Trove classifier (as :ref:`described ` in " +"the :term:`Core Metadata` specification) which begins with ``License ::``." +msgstr "" + +#: ../source/glossary.rst:157 ../source/specifications/license-expression.rst:3 +msgid "License Expression" +msgstr "" + +#: ../source/glossary.rst:158 +msgid "SPDX Expression" +msgstr "" + +#: ../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:`Project`'s " +"license(s) and how they inter-relate. Examples: ``GPL-3.0-or-later``, ``MIT " +"AND (Apache-2.0 OR BSD-2-Clause)``" +msgstr "" + +#: ../source/glossary.rst:169 +msgid "License Identifier" +msgstr "" + +#: ../source/glossary.rst:170 +msgid "SPDX Identifier" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/glossary.rst:195 +msgid "Per Project Index" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/glossary.rst:226 +msgid "Project Root Directory" +msgstr "" + +#: ../source/glossary.rst:229 +msgid "" +"The filesystem directory in which a :term:`Project`'s :term:`source tree " +"` is located." +msgstr "" + +#: ../source/glossary.rst:232 +msgid "Project Source Tree" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:241 +msgid "Project Source Metadata" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/glossary.rst:260 +msgid "Pyproject Metadata" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:271 +msgid "Pyproject Metadata Key" +msgstr "" + +#: ../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 "" + +#: ../source/glossary.rst:278 +msgid "Pyproject Metadata Subkey" +msgstr "" + +#: ../source/glossary.rst:281 +msgid "" +"A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." +msgstr "" + +#: ../source/glossary.rst:284 +msgid "Python Packaging Authority (PyPA)" +msgstr "" + +#: ../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 `Bitbucket `_, and discuss issues on the `distutils-sig mailing list " +"`_ and " +"`the Python Discourse forum `__." +msgstr "" + +#: ../source/glossary.rst:296 +msgid "Python Package Index (PyPI)" +msgstr "" + +#: ../source/glossary.rst:299 +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 "" + +#: ../source/glossary.rst:302 +msgid "pypi.org" +msgstr "" + +#: ../source/glossary.rst:305 +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 "" + +#: ../source/glossary.rst:309 +msgid "pyproject.toml" +msgstr "" + +#: ../source/glossary.rst:312 +msgid "" +"The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." +msgstr "" + +#: ../source/glossary.rst:314 +msgid "Release" +msgstr "" + +#: ../source/glossary.rst:317 +msgid "" +"A snapshot of a :term:`Project` at a particular point in time, denoted by a " +"version identifier." +msgstr "" + +#: ../source/glossary.rst:320 +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 "" + +#: ../source/glossary.rst:325 +msgid "Requirement" +msgstr "" + +#: ../source/glossary.rst:328 +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 "" + +#: ../source/glossary.rst:334 +msgid "Requirement Specifier" +msgstr "" + +#: ../source/glossary.rst:337 +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 "" + +#: ../source/glossary.rst:342 +msgid "Requirements File" +msgstr "" + +#: ../source/glossary.rst:345 +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 "" + +#: ../source/glossary.rst:349 +msgid "Root License Directory" +msgstr "" + +#: ../source/glossary.rst:350 +msgid "License Directory" +msgstr "" + +#: ../source/glossary.rst:353 +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 "" + +#: ../source/glossary.rst:366 +#: ../source/guides/distributing-packages-using-setuptools.rst:59 +msgid "setup.py" +msgstr "" + +#: ../source/glossary.rst:367 +#: ../source/guides/distributing-packages-using-setuptools.rst:80 +msgid "setup.cfg" +msgstr "" + +#: ../source/glossary.rst:370 +msgid "" +"The project specification files for :ref:`distutils` and :ref:`setuptools`. " +"See also :term:`pyproject.toml`." +msgstr "" + +#: ../source/glossary.rst:373 +msgid "Source Archive" +msgstr "" + +#: ../source/glossary.rst:376 +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 "" + +#: ../source/glossary.rst:380 +msgid "Source Distribution (or \"sdist\")" +msgstr "" + +#: ../source/glossary.rst:383 +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 "" + +#: ../source/glossary.rst:389 +msgid "System Package" +msgstr "" + +#: ../source/glossary.rst:392 +msgid "" +"A package provided in a format native to the operating system, e.g. an rpm " +"or dpkg file." +msgstr "" + +#: ../source/glossary.rst:395 +msgid "Version Specifier" +msgstr "" + +#: ../source/glossary.rst:398 +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 "" + +#: ../source/glossary.rst:403 +msgid "Virtual Environment" +msgstr "" + +#: ../source/glossary.rst:406 +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 "" + +#: ../source/glossary.rst:411 +msgid "Wheel Format" +msgstr "" + +#: ../source/glossary.rst:412 +msgid "Wheel" +msgstr "" + +#: ../source/glossary.rst:415 +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 "" + +#: ../source/glossary.rst:422 +msgid "Wheel Project" +msgstr "" + +#: ../source/glossary.rst:425 +msgid "" +"The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" +"`wheel`." +msgstr "" + +#: ../source/glossary.rst:427 +msgid "Working Set" +msgstr "" + +#: ../source/glossary.rst:430 +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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:5 +msgid "Analyzing PyPI package downloads" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:27 +msgid "" +"Internal or unofficial mirrors (can both raise or lower download counts)" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:28 +msgid "Packages not hosted on PyPI (for comparisons sake)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:57 +msgid "Navigate to the `BigQuery web UI`_." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:68 +msgid "Data schema" +msgstr "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:77 +msgid "Column" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:77 +#: ../source/specifications/core-metadata.rst:206 +#: ../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:29 +#: ../source/specifications/direct-url-data-structure.rst:242 +#: ../source/specifications/version-specifiers.rst:1072 +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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:87 +msgid "details.python" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:87 +msgid "Python version" +msgstr "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:94 +msgid "" +"Run queries in the `BigQuery web UI`_ by clicking the \"Compose query\" " +"button." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:167 +msgid "month" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:169 +msgid "1956741" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:169 +msgid "2018-01-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:171 +msgid "2344692" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:171 +msgid "2017-12-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:173 +msgid "1730398" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:173 +msgid "2017-11-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:175 +msgid "2047310" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:175 +msgid "2017-10-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:177 +msgid "1744443" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:177 +msgid "2017-09-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:179 +msgid "1916952" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:179 +msgid "2017-08-01" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:183 +msgid "Python versions over time" +msgstr "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:204 +msgid "python" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:206 +msgid "3.7" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:206 +msgid "18051328726" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:208 +msgid "3.6" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:208 +msgid "9635067203" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:210 +msgid "3.8" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:210 +msgid "7781904681" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:212 +msgid "2.7" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:212 +msgid "6381252241" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:214 +msgid "null" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:214 +msgid "2026630299" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:216 +msgid "3.5" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:216 +msgid "1894153540" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:221 +msgid "Getting absolute links to artifacts" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:242 +msgid "url" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:244 +msgid "" +"https://files.pythonhosted.org/packages/" +"eb/45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/" +"sampleproject-1.2.0.tar.gz" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:252 +msgid "" +"https://files.pythonhosted.org/" +"packages/6f/5b/2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/" +"sampleproject-1.3.1.tar.gz" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:273 +msgid "``google-cloud-bigquery``" +msgstr "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:303 +msgid "``pypinfo``" +msgstr "" + +#: ../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 "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:309 +msgid "Install `pypinfo`_ using pip." +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:315 +msgid "Usage:" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:331 +msgid "``pandas-gbq``" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:333 +msgid "" +"The `pandas-gbq`_ project allows for accessing query results via `Pandas`_." +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:337 +#: ../source/specifications/dependency-specifiers.rst:535 +msgid "References" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:339 +msgid "" +"`PyPI Download Counts deprecation email `__" +msgstr "" + +#: ../source/guides/analyzing-pypi-package-downloads.rst:340 +msgid "" +"`PyPI BigQuery dataset announcement email `__" +msgstr "" + +#: ../source/guides/creating-and-discovering-plugins.rst:3 +msgid "Creating and discovering plugins" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/creating-and-discovering-plugins.rst:13 +msgid "`Using namespace packages`_." +msgstr "" + +#: ../source/guides/creating-and-discovering-plugins.rst:14 +msgid "`Using package metadata`_." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/creating-and-discovering-plugins.rst:58 +msgid "Using namespace packages" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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." +msgstr "" + +#: ../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 "" + +#: ../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/guides/creating-command-line-tools.rst:17 +#: ../source/guides/tool-recommendations.rst:45 +msgid "Todo" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/creating-command-line-tools.rst:106 +msgid "``pyproject.toml``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/creating-command-line-tools.rst:123 +msgid "Installing the package with ``pipx``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 on in existence)." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:32 +msgid "Install \"twine\" [1]_:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:66 +msgid ":file:`setup.py` serves two primary functions:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:89 +msgid "README.rst / README.md" +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:98 +msgid "" +"For an example, see `README.md `_ from the `PyPA sample project `_." +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:111 +msgid "MANIFEST.in" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:123 +msgid "" +":file:`MANIFEST.in` does not affect binary distributions such as wheels." +msgstr "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:126 +msgid "LICENSE.txt" +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:134 +msgid "" +"For an example, see the `LICENSE.txt `_ from the `PyPA sample project `_." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:153 +msgid "setup() args" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:177 +msgid "``packages``" +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:192 +msgid "``py_modules``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:214 +msgid "" +"For more on using \"install_requires\" see :ref:`install_requires vs " +"Requirements files`." +msgstr "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:221 +msgid "``package_data``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:247 +msgid "``data_files``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:269 +msgid "" +"For more information see the distutils section on :ref:`Installing " +"Additional Files `." +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:281 +#: ../source/specifications/pyproject-toml.rst:149 +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:349 +msgid "" +"For more information, see the :doc:`Development Mode ` section of the :ref:`setuptools` docs." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:380 +msgid "Source distributions" +msgstr "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:382 +msgid "" +"Minimally, you should create a :term:`Source Distribution `:" +msgstr "" + +#: ../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/guides/distributing-packages-using-setuptools.rst:406 +msgid "Wheels" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:435 +msgid "Pure Python Wheels" +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:440 +#: ../source/guides/distributing-packages-using-setuptools.rst:469 +msgid "To build the wheel:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:464 +msgid "Platform Wheels" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:498 +msgid "Uploading your Project to PyPI" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:558 +msgid "**Be aware that this stores your token in plaintext.**" +msgstr "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:566 +msgid "Upload your distributions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/distributing-packages-using-setuptools.rst:589 +#: ../source/tutorials/installing-packages.rst:670 +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 "" + +#: ../source/guides/dropping-older-python-versions.rst:5 +msgid "Dropping support for older Python versions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/dropping-older-python-versions.rst:20 +msgid "Dealing with the universal wheels" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/dropping-older-python-versions.rst:45 +msgid "Defining the Python version required" +msgstr "" + +#: ../source/guides/dropping-older-python-versions.rst:48 +msgid "1. Install twine" +msgstr "" + +#: ../source/guides/dropping-older-python-versions.rst:50 +msgid "Ensure that you have twine available at its latest version. Steps:" +msgstr "" + +#: ../source/guides/dropping-older-python-versions.rst:66 +msgid "2. Specify the version ranges for supported Python distributions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/dropping-older-python-versions.rst:96 +msgid "3. Validating the Metadata before publishing" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/dropping-older-python-versions.rst:112 +msgid "" +"The ``Requires-Python`` field is set and matches your specification in the " +"configuration file." +msgstr "" + +#: ../source/guides/dropping-older-python-versions.rst:115 +msgid "4. Publishing the package" +msgstr "" + +#: ../source/guides/dropping-older-python-versions.rst:117 +msgid "Proceed as suggested in :ref:`Uploading your Project to PyPI`." +msgstr "" + +#: ../source/guides/dropping-older-python-versions.rst:120 +msgid "Dropping a Python version" +msgstr "" + +#: ../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 "" + +#: ../source/guides/dropping-older-python-versions.rst:128 +msgid "Each version compatibility change should have its own release." +msgstr "" + +#: ../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 "" + +#: ../source/guides/dropping-older-python-versions.rst:138 +msgid "Support for the Metadata 1.2 specification has been added in Pip 9.0." +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:5 +msgid "Hosting your own simple repository" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/hosting-your-own-index.rst:65 +#: ../source/guides/index-mirrors-and-caches.rst:56 +#: ../source/guides/supporting-windows-using-appveyor.rst:146 +msgid "Additional notes" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:67 +#: ../source/guides/index-mirrors-and-caches.rst:58 +msgid ":ref:`devpi`" +msgstr "" + +#: ../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 "" + +#: ../source/guides/hosting-your-own-index.rst:73 +#: ../source/guides/index-mirrors-and-caches.rst:71 +msgid ":ref:`simpleindex`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:78 +msgid ":ref:`pypiserver`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:83 +msgid ":ref:`pypiprivate`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:88 +#: ../source/guides/index-mirrors-and-caches.rst:77 +msgid ":ref:`pypicloud`" +msgstr "" + +#: ../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 "" + +#: ../source/guides/hosting-your-own-index.rst:96 +msgid "unmaintained; serve files in GitHub" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:98 +#: ../source/guides/index-mirrors-and-caches.rst:83 +msgid ":ref:`pulppython`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:101 +msgid "also mirroring, proxying; plugin for Pulp" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:103 +msgid ":ref:`pip2pi`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:106 +msgid "also mirroring; manual synchronisation" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:108 +msgid ":ref:`dumb-pypi`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:111 +msgid "not a server, but a static file site generator" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:113 +msgid ":ref:`httpserver`" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:116 +msgid "standard-library" +msgstr "" + +#: ../source/guides/hosting-your-own-index.rst:118 +#: ../source/guides/index-mirrors-and-caches.rst:107 +msgid "`Apache `_" +msgstr "" + +#: ../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 "" + +#: ../source/guides/hosting-your-own-index.rst:131 +msgid "" +"For complete documentation of the simple repository protocol, see :ref:" +"`simple repository API `." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/index-mirrors-and-caches.rst:5 +msgid "Package index mirrors and caches" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:8 +msgid "2023-11-08" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/index-mirrors-and-caches.rst:29 +msgid "Caching with pip" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/index-mirrors-and-caches.rst:53 +msgid "Cache" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:54 +msgid "Mirror" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:55 +msgid "Proxy" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:62 +msgid "" +"multiple indexes with inheritance; syncing, replication, fail-over; package " +"upload" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:65 +msgid ":ref:`bandersnatch`" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:75 +msgid "custom plugin enables caching; re-routing to other package indexes" +msgstr "" + +#: ../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 "" + +#: ../source/guides/index-mirrors-and-caches.rst:89 +msgid ":ref:`proxpi`" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:93 +#: ../source/guides/index-mirrors-and-caches.rst:99 +msgid "multiple proxied indexes" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:95 +msgid ":ref:`nginx_pypi_cache`" +msgstr "" + +#: ../source/guides/index-mirrors-and-caches.rst:101 +msgid ":ref:`flaskpypiproxy`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:32 +msgid "Building from source" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:42 +msgid "Linux distribution packages" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:54 +msgid "Windows installers" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:77 +msgid "macOS installers and package managers" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:89 +msgid "SciPy distributions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:100 +#: ../source/key_projects.rst:812 +msgid "Spack" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-scientific-packages.rst:119 +msgid "The conda cross-platform package manager" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:4 +msgid "Installing stand alone command line tools" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:23 +msgid "pipx only works with Python 3.6+." +msgstr "" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:25 +msgid "pipx is installed with pip:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:54 +#: ../source/specifications/entry-points.rst:114 +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:130 +msgid "To see the full list of commands pipx offers, run:" +msgstr "" + +#: ../source/guides/installing-stand-alone-command-line-tools.rst:136 +msgid "You can learn more about pipx at https://pipx.pypa.io/." +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:5 +msgid "Installing pip/setuptools/wheel with Linux Package Managers" +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:8 +msgid "2021-07-26" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:31 +msgid "Fedora" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:45 +msgid "CentOS/RHEL" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:50 +msgid "To install pip and wheel for the system Python, there are two options:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:74 +msgid "To additionally upgrade setuptools, run:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:88 +msgid "" +"For Redhat, see here: https://developers.redhat.com/products/" +"softwarecollections/overview" +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:90 +msgid "For CentOS, see here: https://github.com/sclorg" +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:92 +msgid "Be aware that collections may not contain the most recent versions." +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:100 +msgid "For example, for Python 3.4 on CentOS7/RHEL7:" +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:108 +msgid "openSUSE" +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:118 +msgid "Debian/Ubuntu and derivatives" +msgstr "" + +#: ../source/guides/installing-using-linux-tools.rst:120 +msgid "Firstly, update and refresh repository lists by running this command:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-linux-tools.rst:135 +msgid "Arch Linux" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:2 +msgid "Install packages in a virtual environment using pip and venv" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:8 +msgid "Create and activate a virtual environment" +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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:10 +msgid "Install packages into a virtual environment using the ``pip`` command" +msgstr "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:11 +msgid "Use and create a requirements file" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:32 +msgid "Create and Use Virtual Environments" +msgstr "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:35 +msgid "Create a new virtual environment" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:67 +msgid "" +"``venv`` will create a virtual Python installation in the ``.venv`` folder." +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:74 +msgid "Activate a virtual environment" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:130 +msgid "Deactivate a virtual environment" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:145 +msgid "Reactivate a virtual environment" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:187 +msgid "Afterwards, you should have the latest version of pip:" +msgstr "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:195 +msgid "Install packages using pip" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:218 +msgid "" +"pip should download requests and all of its dependencies and install them:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:257 +msgid "To install the latest ``2.x`` release of requests:" +msgstr "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:271 +msgid "To install pre-release versions of packages, use the ``--pre`` flag:" +msgstr "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:287 +msgid "Install extras" +msgstr "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:309 +msgid "Install a package from source" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:347 +msgid "Install from version control systems" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:434 +#: ../source/tutorials/installing-packages.rst:393 +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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:452 +msgid "Using a requirements file" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:478 +msgid "Freezing dependencies" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/installing-using-virtualenv.rst:2 +msgid "Installing packages using virtualenv" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 project'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 "" + +#: ../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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:32 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:42 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:49 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:56 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:73 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:75 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:86 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:95 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:103 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:111 +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/guides/licensing-examples-and-user-scenarios.rst:122 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:133 +msgid "" +"Or alternatively, the license files can be specified explicitly (paths will " +"be interpreted as glob patterns):" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:147 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:159 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:170 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:181 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:191 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:203 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:205 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:220 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +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:230 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:232 +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:236 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:244 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:246 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:253 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:261 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:263 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:272 +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:277 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:279 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:283 +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 in your project." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:292 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:296 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:306 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:308 +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 "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:314 +msgid "" +"In short, ``License-1 AND License-2`` mean that *both* licenses apply to " +"your project, or parts of it (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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:2 +msgid "Making a PyPI-friendly README" +msgstr "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:9 +msgid "Creating a README file" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:16 +msgid "plain text" +msgstr "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:17 +msgid "" +"`reStructuredText `_ (without " +"Sphinx extensions)" +msgstr "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:18 +msgid "" +"Markdown (`GitHub Flavored Markdown `_ by " +"default, or `CommonMark `_)" +msgstr "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:25 +msgid "Including your README in your package's metadata" +msgstr "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:33 +msgid ":ref:`description-optional`" +msgstr "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:34 +msgid ":ref:`description-content-type-optional`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:94 +msgid "Validating reStructuredText markup" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:104 +msgid "" +"You can check your README for markup errors before uploading as follows:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/making-a-pypi-friendly-readme.rst:124 +msgid "Run ``twine check`` on the sdist and wheel:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/migrating-to-pypi-org.rst:6 +msgid "Migrating to PyPI.org" +msgstr "" + +#: ../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 "" + +#: ../source/guides/migrating-to-pypi-org.rst:16 +msgid "Publishing releases" +msgstr "" + +#: ../source/guides/migrating-to-pypi-org.rst:18 +msgid "``pypi.org`` is the default upload platform as of September 2016." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/migrating-to-pypi-org.rst:26 +msgid "" +"The default upload settings switched to ``pypi.org`` in the following " +"versions:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/migrating-to-pypi-org.rst:31 +msgid "Python 3.4.6 (``distutils`` update)" +msgstr "" + +#: ../source/guides/migrating-to-pypi-org.rst:32 +msgid "Python 3.5.3 (``distutils`` update)" +msgstr "" + +#: ../source/guides/migrating-to-pypi-org.rst:33 +msgid "Python 3.6.0 (``distutils`` update)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/migrating-to-pypi-org.rst:77 +msgid "Registering package names & metadata" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:6 +msgid "How to modernize a ``setup.py`` based project?" +msgstr "" + +#: ../source/guides/modernize-setup-py-project.rst:10 +msgid "Should ``pyproject.toml`` be added?" +msgstr "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:16 +msgid "" +"Note that it has influence on the build isolation feature of pip, see below." +msgstr "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:36 +msgid "``python -m build``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:68 +msgid ":ref:`distributing-packages`" +msgstr "" + +#: ../source/guides/modernize-setup-py-project.rst:69 +#: ../source/guides/modernize-setup-py-project.rst:113 +msgid ":ref:`pyproject-build-system-table`" +msgstr "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:74 +msgid "How to handle additional build-time dependencies?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:99 +msgid "" +"requires a :file:`pyproject.toml` file like this (:file:`setup.py` stays " +"unchanged):" +msgstr "" + +#: ../source/guides/modernize-setup-py-project.rst:117 +msgid "What is the build isolation feature?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:127 +msgid "``python -m pip install --no-build-isolation``" +msgstr "" + +#: ../source/guides/modernize-setup-py-project.rst:135 +msgid "How to handle packaging metadata?" +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 "" + +#: ../source/guides/modernize-setup-py-project.rst:151 +msgid "can be entirely replaced by a :file:`pyproject.toml` file like this:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:169 +msgid "How to handle dynamic metadata?" +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 "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:227 +msgid "What if something that can not be changed expects a ``setup.py`` file?" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/modernize-setup-py-project.rst:246 +msgid ":ref:`pyproject-toml-spec`" +msgstr "" + +#: ../source/guides/modernize-setup-py-project.rst:248 +msgid ":doc:`setuptools:build_meta`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/multi-version-installs.rst:41 +msgid "" +"Refer to the `pkg_resources documentation `__ for more details." +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:5 +msgid "Packaging binary extensions" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:8 +msgid "2013-12-08" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:86 +msgid "" +"often will not work correctly with alternative interpreters such as PyPy, " +"IronPython or Jython" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:148 +msgid "Alternatives to handcoded wrapper modules" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:242 +msgid "Implications of shared static state and subinterpreters" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:248 +msgid "Implications of the GIL" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:254 +msgid "Memory allocation APIs" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:262 +msgid "ABI Compatibility" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:283 +msgid "Building binary extensions" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:285 +msgid "FIXME: Cover the build-backends available for building extensions." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:309 +msgid "Binary extensions for Windows" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:337 +msgid "Binary extensions for Linux" +msgstr "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:345 +msgid "Binary extensions for macOS" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:398 +msgid "Introduction to C/C++ extension modules" +msgstr "" + +#: ../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 "" + +#: ../source/guides/packaging-binary-extensions.rst:403 +msgid "" +"`What are (c)python extension modules? `_" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:404 +msgid "`Releasing the gil `_" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:405 +msgid "" +"`Writing cpython extension modules using C++ `_" +msgstr "" + +#: ../source/guides/packaging-binary-extensions.rst:408 +msgid "Additional considerations for binary wheels" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-namespace-packages.rst:5 +msgid "Packaging namespace packages" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-namespace-packages.rst:62 +msgid "Creating a namespace package" +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-namespace-packages.rst:75 +msgid "Native namespace packages" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-namespace-packages.rst:117 +msgid "The same can be accomplished with a :file:`setup.cfg`:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:129 +msgid "Or :file:`setup.py`:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:142 +msgid "" +":ref:`setuptools` will search the directory structure for implicit namespace " +"packages by default." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/packaging-namespace-packages.rst:158 +msgid "Legacy namespace packages" +msgstr "" + +#: ../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 this method. Also, :doc:" +"`pkg_resources ` has been deprecated." +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:165 +msgid "" +"To migrate an existing package, all packages sharing the namespace must be " +"migrated simultaneously." +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:167 +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 "" + +#: ../source/guides/packaging-namespace-packages.rst:174 +msgid "pkgutil-style namespace packages" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:176 +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 is the recommended approach for the highest level of " +"compatibility." +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:181 +msgid "" +"To create a pkgutil-style namespace package, you need to provide an :file:" +"`__init__.py` file for the namespace package:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:195 +#: ../source/guides/packaging-namespace-packages.rst:242 +msgid "" +"The :file:`__init__.py` file for the namespace package needs to contain the " +"following:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:202 +#: ../source/guides/packaging-namespace-packages.rst:249 +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 "" + +#: ../source/guides/packaging-namespace-packages.rst:207 +msgid "" +"A complete working example of two pkgutil-style namespace packages can be " +"found in the `pkgutil namespace example project`_." +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:217 +msgid "pkg_resources-style namespace packages" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:219 +msgid "" +":doc:`Setuptools ` provides the `pkg_resources." +"declare_namespace`_ function and the ``namespace_packages`` argument to :" +"func:`~setuptools.setup`. Together these can be used to declare namespace " +"packages. While this approach is no longer recommended, it is widely present " +"in most existing namespace packages. 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 "" + +#: ../source/guides/packaging-namespace-packages.rst:228 +msgid "" +"To create a pkg_resources-style namespace package, you need to provide an :" +"file:`__init__.py` file for the namespace package:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:254 +msgid "" +"Some older recommendations advise the following in the namespace package :" +"file:`__init__.py`:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:264 +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 "" + +#: ../source/guides/packaging-namespace-packages.rst:271 +msgid "" +"Finally, every distribution must provide the ``namespace_packages`` argument " +"to :func:`~setuptools.setup` in :file:`setup.py`. For example:" +msgstr "" + +#: ../source/guides/packaging-namespace-packages.rst:285 +msgid "" +"A complete working example of two pkg_resources-style namespace packages can " +"be found in the `pkg_resources namespace example project`_." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:25 +msgid "Configuring Trusted Publishing" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" +"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 "" + +#: ../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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 +msgid "Creating a workflow definition" +msgstr "" + +#: ../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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:90 +msgid "Let's create a ``.github/workflows/publish-to-test-pypi.yml`` file." +msgstr "" + +#: ../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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:101 +msgid "Checking out the project and building distributions" +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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +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:115 +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:118 +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:128 +msgid "Defining a workflow job environment" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:130 +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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:144 +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:148 +msgid "Publishing the distribution to PyPI" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:150 +msgid "Finally, add the following steps at the end:" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 +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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:164 +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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:172 +msgid "Separate workflow for publishing to TestPyPI" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:174 +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:184 +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:188 +msgid "The whole CI/CD workflow" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:190 +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:198 +msgid "That's all, folks!" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:200 +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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:208 +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 "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:216 +msgid "" +"It is recommended to keep the integrated GitHub Actions at their latest " +"versions, updating them frequently." +msgstr "" + +#: ../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:729 +msgid "Installation" +msgstr "" + +#: ../source/guides/single-sourcing-package-version.rst:-1 +msgid "0; url=../../discussions/single-source-version/" +msgstr "" + +#: ../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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:7 +msgid "Supporting multiple Python versions" +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:10 +msgid "2014-12-24" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:65 +msgid "" +"`Travis CI `_ provides both a Linux and a macOS " +"environment. The Linux environment is Ubuntu 12.04 LTS Server Edition 64 bit " +"while the macOS is 10.9.2 at the time of writing." +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:68 +msgid "" +"`Appveyor `_ provides a Windows environment " +"(Windows Server 2012)." +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:79 +msgid "" +"Both `Travis CI`_ 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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:84 +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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:88 +msgid "Tools for single-source Python packages" +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:90 +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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:99 +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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:106 +msgid "a Python 2 (by syntax) module in a Python 3 project." +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:107 +msgid "a Python 3 (by syntax) module in a *Python 2* project." +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:109 +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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:116 +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 "" + +#: ../source/guides/supporting-multiple-python-versions.rst:123 +msgid "What's in which Python?" +msgstr "" + +#: ../source/guides/supporting-multiple-python-versions.rst:125 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:5 +msgid "Supporting Windows using Appveyor" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:8 +msgid "2015-12-03" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:23 +msgid "" +"The Appveyor service is a continuous integration service, much like the " +"better-known `Travis`_ service that is commonly used for testing by projects " +"hosted on `GitHub`_. However, unlike Travis, the build workers on Appveyor " +"are Windows hosts and have the necessary compilers installed to build Python " +"extensions." +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:29 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:37 +msgid "Setting up" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:39 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:44 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:48 +msgid "" +"Once you have set up your Appveyor account and added your project, Appveyor " +"will automatically build your project each time a commit occurs. This " +"behaviour will be familiar to users of Travis." +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:53 +msgid "Adding Appveyor support to your project" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:55 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:60 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:68 +msgid "appveyor.yml" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:74 +msgid "" +"This file can be downloaded from `here `__." +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:76 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:79 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:87 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:93 +msgid "" +"The ``build`` section simply switches off builds - there is no build step " +"needed for Python, unlike languages like ``C#``." +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:96 +msgid "" +"The main sections that will need to be tailored to your project are " +"``test_script`` and ``after_test``." +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:99 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:108 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:113 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:118 +msgid "Support script" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:120 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:125 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:132 +msgid "" +"You can simply download the batch file and include it in your project " +"unchanged." +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:136 +msgid "Access to the built wheels" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:138 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:149 +msgid "Testing with tox" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:151 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:155 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:159 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:164 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:169 +msgid "``DISTUTILS_USE_SDK``" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:170 +msgid "``MSSdk``" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:171 +msgid "``INCLUDE``" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:172 +msgid "``LIB``" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:174 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:180 +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 Travis or 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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:187 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:191 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:196 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:202 +msgid "Automatically uploading wheels" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:204 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:209 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:215 +msgid "External dependencies" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:217 +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:220 +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 "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:229 +msgid "Support scripts" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:231 +msgid "For reference, the SDK setup support script is listed here:" +msgstr "" + +#: ../source/guides/supporting-windows-using-appveyor.rst:233 +msgid "``appveyor-sample/build.cmd``" +msgstr "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:20 +msgid "Virtual environments" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:43 +msgid "" +"For scientific software specifically, consider :ref:`Conda` or :ref:`Spack`." +msgstr "" + +#: ../source/guides/tool-recommendations.rst:45 +msgid "Write a \"pip vs. Conda\" comparison, here or in a new discussion." +msgstr "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:55 +msgid "Lock files" +msgstr "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:63 +msgid "Build backends" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:77 +msgid "" +"Hatchling_ -- developed with but separate from :ref:`Hatch`. Supports " +"plugins." +msgstr "" + +#: ../source/guides/tool-recommendations.rst:79 +msgid "" +"PDM-backend_ -- developed with but separate from :ref:`PDM`. Supports " +"plugins." +msgstr "" + +#: ../source/guides/tool-recommendations.rst:81 +msgid "" +"Poetry-core_ -- developed with but separate from :ref:`Poetry`. Supports " +"plugins." +msgstr "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:88 +msgid "" +":ref:`setuptools`, which used to be the only build backend. Supports plugins." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/tool-recommendations.rst:112 +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:116 +msgid "" +":ref:`setuptools` -- natively supports C and C++ (with third-party plugins " +"for Go and Rust)," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:117 +msgid "" +":ref:`meson-python` -- C, C++, Fortran, Rust, and other languages supported " +"by Meson," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:118 +msgid "" +":ref:`scikit-build-core` -- C, C++, Fortran, and other languages supported " +"by CMake," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:119 +msgid ":ref:`maturin` -- Rust, via Cargo." +msgstr "" + +#: ../source/guides/tool-recommendations.rst:123 +msgid "Building distributions" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:125 +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 "" + +#: ../source/guides/tool-recommendations.rst:130 +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 "" + +#: ../source/guides/tool-recommendations.rst:134 +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 "" + +#: ../source/guides/tool-recommendations.rst:140 +msgid "Uploading to PyPI" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:142 +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 "" + +#: ../source/guides/tool-recommendations.rst:147 +msgid "" +"As of November 2024, PyPI supports the following platforms as Trusted " +"Publishing providers:" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:150 +msgid "GitHub Actions (on ``https://github.com``)" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:151 +msgid "GitLab CI/CD (on ``https://gitlab.com``)" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:152 +msgid "ActiveState" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:153 +msgid "Google Cloud" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:155 +msgid "" +"The other available method is to upload the package manually using :ref:" +"`twine`." +msgstr "" + +#: ../source/guides/tool-recommendations.rst:159 +msgid "" +"**Never** use ``python setup.py upload`` for this task. In addition to " +"being :ref:`deprecated `, it is insecure." +msgstr "" + +#: ../source/guides/tool-recommendations.rst:164 +msgid "Workflow tools" +msgstr "" + +#: ../source/guides/tool-recommendations.rst:166 +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:174 +msgid ":ref:`Flit`," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:175 +msgid ":ref:`Hatch`," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:176 +msgid ":doc:`nox `," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:177 +msgid ":ref:`PDM`," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:178 +msgid ":ref:`Pipenv`," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:179 +msgid ":ref:`Poetry`," +msgstr "" + +#: ../source/guides/tool-recommendations.rst:180 +msgid ":doc:`tox `." +msgstr "" + +#: ../source/guides/using-manifest-in.rst:5 +msgid "Including files in source distributions with ``MANIFEST.in``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/using-testpypi.rst:24 +msgid "Using TestPyPI with Twine" +msgstr "" + +#: ../source/guides/using-testpypi.rst:26 +msgid "" +"You can upload your distributions to TestPyPI using :ref:`twine` by " +"specifying the ``--repository`` flag:" +msgstr "" + +#: ../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 "" + +#: ../source/guides/using-testpypi.rst:39 +msgid "Using TestPyPI with pip" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/using-testpypi.rst:73 +msgid "Setting up TestPyPI in :file:`.pypirc`" +msgstr "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:5 +msgid "Writing your ``pyproject.toml``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:47 +msgid "Declaring the build backend" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:63 +msgid "Static vs. dynamic metadata" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:65 +msgid "The rest of this guide is devoted to the ``[project]`` table." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:93 +#: ../source/specifications/pyproject-toml.rst:120 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 +msgid "``name``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:115 +#: ../source/specifications/pyproject-toml.rst:125 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:128 +msgid "This field is required, although it is often marked as dynamic using" +msgstr "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:141 +msgid "Dependencies and requirements" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:144 +#: ../source/specifications/pyproject-toml.rst:451 +msgid "``dependencies``/``optional-dependencies``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/guides/writing-pyproject-toml.rst:183 +#: ../source/specifications/pylock-toml.rst:95 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 +msgid "``requires-python``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:185 +msgid "" +"This lets you declare the minimum version of Python that you support " +"[#requires-python-upper-bounds]_." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:197 +msgid "Creating executable scripts" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:199 +msgid "" +"To install a command as part of your package, declare it in the ``[project." +"scripts]`` table." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:207 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:211 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:221 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:224 +msgid "" +"The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " +"is only relevant on Windows." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:230 +msgid "About your project" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:328 +msgid "``authors``/``maintainers``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:235 +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:255 +#: ../source/specifications/pyproject-toml.rst:135 +#: ../source/specifications/pyproject-toml.rst:187 +msgid "``description``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:257 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:268 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 +msgid "``readme``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:270 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:279 +msgid "The README's format is auto-detected from the extension:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:281 +msgid "``README.md`` → `GitHub-flavored Markdown `_," +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:282 +msgid "" +"``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:284 +msgid "You can also specify the format explicitly, like this:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:297 +msgid "``license`` and ``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:299 +msgid "As per :pep:`639` licenses should be declared with two fields:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:301 +msgid "" +"``license`` is an :term:`SPDX license expression ` " +"consisting of one or more :term:`license identifiers `." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:303 +msgid "``license-files`` is a list of license file glob patterns." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:305 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:309 +msgid "build backend versions that introduced :pep:`639` support" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:312 +msgid "hatchling" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:313 +msgid "setuptools" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:314 +msgid "flit-core [#flit-core-pep639]_" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:315 +msgid "pdm-backend" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:316 +msgid "poetry-core" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:317 +msgid "uv-build" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:318 +msgid "1.27.0" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:319 +msgid "77.0.3" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:320 +msgid "3.12" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:321 +msgid "2.4.0" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:322 +msgid "2.2.0" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:323 +msgid "0.7.19" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 +msgid "``license``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:331 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:344 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:349 +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:353 +msgid "" +"If your project 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 "" + +#: ../source/guides/writing-pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +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:377 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:379 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:381 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:382 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:383 +msgid "" +"Patterns are relative to the directory containing :file:`pyproject.toml`, " +"and thus may not start with a slash character." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:385 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:386 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:388 +msgid "" +"Literal paths are valid globs. Any characters or character sequences not " +"covered by this specification are invalid." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 +msgid "``keywords``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +"This will help PyPI's search box to suggest your project when people search " +"for these keywords." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:408 +#: ../source/specifications/pyproject-toml.rst:133 +#: ../source/specifications/pyproject-toml.rst:384 +msgid "``classifiers``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:410 +msgid "" +"A list of PyPI classifiers that apply to your project. Check the `full list " +"of possibilities `_." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:434 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:439 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 +msgid "``urls``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:448 +msgid "" +"A list of URLs associated with your project, displayed on the left sidebar " +"of your PyPI project page." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:453 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:467 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:471 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:475 +msgid "" +"For example in the following metadata, neither ``MyHomepage`` nor " +"``\"Download Link\"`` is a well-known label, so they will be rendered " +"verbatim:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:485 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:497 +msgid "Advanced plugins" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:499 +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 "" + +#: ../source/guides/writing-pyproject-toml.rst:508 +msgid "See the :ref:`Plugin guide ` for more information." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:513 +msgid "A full example" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:576 +msgid "" +"Think twice before applying an upper bound like ``requires-python = \"<= " +"3.10\"`` here. `This blog post `_ contains some " +"information regarding possible problems." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:580 +msgid "" +"flit-core `does not yet `_ support WITH in SPDX license " +"expressions." +msgstr "" + +#: ../source/index.rst:-1 +msgid "" +"The Python Packaging User Guide (PyPUG) is a collection of tutorials and " +"guides for packaging Python software." +msgstr "" + +#: ../source/index.rst:-1 +msgid "python, packaging, guide, tutorial" +msgstr "" + +#: ../source/index.rst:3 ../source/key_projects.rst:247 +msgid "Python Packaging User Guide" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/index.rst:51 +msgid "" +"To get an overview of the workflow used to publish your code, see :doc:" +"`packaging flow `." +msgstr "" + +#: ../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 "" + +#: ../source/index.rst:62 +msgid "" +"A :doc:`tutorial on installing packages `" +msgstr "" + +#: ../source/index.rst:63 +msgid "" +"A :doc:`tutorial on managing application dependencies ` in a version controlled project" +msgstr "" + +#: ../source/index.rst:65 +msgid "" +"A :doc:`tutorial on packaging and distributing ` your project" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/index.rst:85 +msgid ":doc:`discussions/deploying-python-applications`" +msgstr "" + +#: ../source/index.rst:86 +msgid ":doc:`discussions/pip-vs-easy-install`" +msgstr "" + +#: ../source/index.rst:89 +msgid "Reference" +msgstr "" + +#: ../source/index.rst:91 +msgid "" +"The :doc:`specifications/index` section for packaging interoperability " +"specifications." +msgstr "" + +#: ../source/index.rst:92 +msgid "" +"The list of :doc:`other projects ` maintained by members of " +"the Python Packaging Authority." +msgstr "" + +#: ../source/index.rst:93 +msgid "The :doc:`glossary` for definitions of terms used in Python packaging." +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:14 +msgid "PyPA Projects" +msgstr "" + +#: ../source/key_projects.rst:19 +msgid "bandersnatch" +msgstr "" + +#: ../source/key_projects.rst:21 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:37 +msgid "build" +msgstr "" + +#: ../source/key_projects.rst:39 +msgid "" +":any:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:51 +msgid "cibuildwheel" +msgstr "" + +#: ../source/key_projects.rst:53 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__ | " +"`Discussions `__ | " +"`Discord #cibuildwheel `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:66 +msgid "distlib" +msgstr "" + +#: ../source/key_projects.rst:68 +msgid "" +":doc:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:93 +msgid "distutils" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:116 +msgid "flit" +msgstr "" + +#: ../source/key_projects.rst:118 +msgid "" +"`Docs `__ | `Issues `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:142 +msgid "hatch" +msgstr "" + +#: ../source/key_projects.rst:144 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:157 +msgid "packaging" +msgstr "" + +#: ../source/key_projects.rst:159 +msgid "" +":doc:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:164 +msgid "" +"Core utilities for Python packaging used by :ref:`pip` and :ref:`setuptools`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:186 +#: ../source/specifications/platform-compatibility-tags.rst:142 +msgid "pip" +msgstr "" + +#: ../source/key_projects.rst:188 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:193 +msgid "" +"The most popular tool for installing Python packages, and the one included " +"with modern versions of Python." +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:204 +msgid "Pipenv" +msgstr "" + +#: ../source/key_projects.rst:206 +msgid "" +":doc:`Docs ` | `Source `__ | " +"`Issues `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:225 +msgid "Pipfile" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:236 +msgid "pipx" +msgstr "" + +#: ../source/key_projects.rst:238 +msgid "" +"`Docs `__ | `GitHub `__ " +"| `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:249 +msgid "" +":doc:`Docs ` | `Issues `__ | `GitHub `__" +msgstr "" + +#: ../source/key_projects.rst:253 +msgid "This guide!" +msgstr "" + +#: ../source/key_projects.rst:258 +msgid "readme_renderer" +msgstr "" + +#: ../source/key_projects.rst:260 +msgid "" +"`GitHub and docs `__ | `PyPI " +"`__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:274 +msgid "Setuptools" +msgstr "" + +#: ../source/key_projects.rst:276 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:289 +msgid "trove-classifiers" +msgstr "" + +#: ../source/key_projects.rst:291 +msgid "" +"`Issues `__ | `GitHub " +"`__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:314 +msgid "twine" +msgstr "" + +#: ../source/key_projects.rst:316 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | " +"`PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:331 ../source/overview.rst:405 +msgid "virtualenv" +msgstr "" + +#: ../source/key_projects.rst:333 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:350 +msgid "Warehouse" +msgstr "" + +#: ../source/key_projects.rst:352 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:364 +msgid "wheel" +msgstr "" + +#: ../source/key_projects.rst:366 +msgid "" +"`Docs `__ | `Issues `__ | `GitHub `__ | " +"`PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:384 +msgid "Non-PyPA Projects" +msgstr "" + +#: ../source/key_projects.rst:389 +msgid "buildout" +msgstr "" + +#: ../source/key_projects.rst:391 +msgid "" +"`Docs `__ | `Issues `__ | `PyPI `__ | `GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:403 +msgid "conda" +msgstr "" + +#: ../source/key_projects.rst:405 +msgid ":doc:`Docs `" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:435 +msgid "devpi" +msgstr "" + +#: ../source/key_projects.rst:437 +msgid "" +"`Docs `__ | :gh:`Issues ` " +"| `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:452 +msgid "dumb-pypi" +msgstr "" + +#: ../source/key_projects.rst:454 +msgid "" +"`GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:464 +msgid "enscons" +msgstr "" + +#: ../source/key_projects.rst:466 +msgid "" +":gh:`Source ` | :gh:`Issues ` | `PyPI " +"`__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:485 +msgid "Flask-Pypi-Proxy" +msgstr "" + +#: ../source/key_projects.rst:487 +msgid "" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:491 ../source/key_projects.rst:685 +#: ../source/key_projects.rst:744 +msgid "Not maintained, project archived" +msgstr "" + +#: ../source/key_projects.rst:493 +msgid "" +"Flask-Pypi-Proxy is a :term:`package index ` as a cached " +"proxy for PyPI." +msgstr "" + +#: ../source/key_projects.rst:499 +msgid "Hashdist" +msgstr "" + +#: ../source/key_projects.rst:501 +msgid "" +"`Docs `__ | `GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:516 +msgid "Maturin" +msgstr "" + +#: ../source/key_projects.rst:518 +msgid "" +"`Docs `__ | `GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:529 +msgid "meson-python" +msgstr "" + +#: ../source/key_projects.rst:531 +msgid "" +"`Docs `__ | `GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:544 +msgid "multibuild" +msgstr "" + +#: ../source/key_projects.rst:546 +msgid "`GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:554 +msgid "nginx_pypi_cache" +msgstr "" + +#: ../source/key_projects.rst:556 +msgid ":gh:`GitHub `" +msgstr "" + +#: ../source/key_projects.rst:558 +msgid "" +"nginx_pypi_cache is a :term:`package index ` caching proxy " +"using `nginx `_." +msgstr "" + +#: ../source/key_projects.rst:564 +msgid "pdm" +msgstr "" + +#: ../source/key_projects.rst:566 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:578 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:594 +msgid "pip-tools" +msgstr "" + +#: ../source/key_projects.rst:596 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:612 +msgid "pip2pi" +msgstr "" + +#: ../source/key_projects.rst:614 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:617 +msgid "" +"pip2pi is a :term:`package index ` server where specific " +"packages are manually synchronised." +msgstr "" + +#: ../source/key_projects.rst:623 +msgid "piwheels" +msgstr "" + +#: ../source/key_projects.rst:625 +msgid "" +"`Website `__ | :doc:`Docs ` | " +"`GitHub `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:638 +msgid "poetry" +msgstr "" + +#: ../source/key_projects.rst:640 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:654 +msgid "proxpi" +msgstr "" + +#: ../source/key_projects.rst:656 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:659 +msgid "" +"proxpi is a simple :term:`package index ` which proxies PyPI " +"and other indexes with caching." +msgstr "" + +#: ../source/key_projects.rst:665 +msgid "Pulp-python" +msgstr "" + +#: ../source/key_projects.rst:667 +msgid "" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:679 +msgid "PyPI Cloud" +msgstr "" + +#: ../source/key_projects.rst:681 +msgid "" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:695 +msgid "pypiprivate" +msgstr "" + +#: ../source/key_projects.rst:697 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:700 +msgid "" +"pypiprivate serves a local (or `AWS S3`_-hosted) directory of packages as a :" +"term:`package index `." +msgstr "" + +#: ../source/key_projects.rst:706 +msgid "pypiserver" +msgstr "" + +#: ../source/key_projects.rst:708 +msgid "" +"`GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:722 +msgid "PyScaffold" +msgstr "" + +#: ../source/key_projects.rst:724 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:739 +msgid "pywharf" +msgstr "" + +#: ../source/key_projects.rst:741 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:746 +msgid "" +"pywharf is a :term:`package index ` server, serving files " +"locally or from `GitHub `_." +msgstr "" + +#: ../source/key_projects.rst:752 +msgid "scikit-build" +msgstr "" + +#: ../source/key_projects.rst:754 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:769 +msgid "scikit-build-core" +msgstr "" + +#: ../source/key_projects.rst:771 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:785 +msgid "shiv" +msgstr "" + +#: ../source/key_projects.rst:787 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:799 +msgid "simpleindex" +msgstr "" + +#: ../source/key_projects.rst:801 +msgid "" +":gh:`GitHub ` | `PyPI `__" +msgstr "" + +#: ../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 "" + +#: ../source/key_projects.rst:814 +msgid "" +":doc:`Docs ` | `GitHub `__ | " +"`Paper `__ | `Slides `__" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/key_projects.rst:833 +msgid "zest.releaser" +msgstr "" + +#: ../source/key_projects.rst:835 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../source/key_projects.rst:839 +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 "" + +#: ../source/key_projects.rst:846 +msgid "Standard Library Projects" +msgstr "" + +#: ../source/key_projects.rst:851 +msgid "ensurepip" +msgstr "" + +#: ../source/key_projects.rst:853 +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" + +#: ../source/key_projects.rst:856 +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 "" + +#: ../source/key_projects.rst:864 +msgid "http.server" +msgstr "" + +#: ../source/key_projects.rst:866 +msgid "" +":doc:`Docs ` | :gh:`Issues `" +msgstr "" + +#: ../source/key_projects.rst:869 +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 "" + +#: ../source/key_projects.rst:876 +msgid "venv" +msgstr "" + +#: ../source/key_projects.rst:878 +msgid "" +"`Docs `__ | `Issues `__" +msgstr "" + +#: ../source/key_projects.rst:881 +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 "" + +#: ../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 "" + +#: ../source/news.rst:10 +msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" +msgstr "" + +#: ../source/news.rst:13 +msgid "August 2019" +msgstr "" + +#: ../source/news.rst:14 +msgid "Updated to use :file:`python3 -m` when installing pipx. (:pr:`631`)" +msgstr "" + +#: ../source/news.rst:17 +msgid "July 2019" +msgstr "" + +#: ../source/news.rst:18 +msgid "Marked all PEP numbers with the :pep: role. (:pr:`629`)" +msgstr "" + +#: ../source/news.rst:19 +msgid "Upgraded Sphinx version and removed pypa.io intersphinx. (:pr:`625`)" +msgstr "" + +#: ../source/news.rst:20 +msgid "Mentioned :file:`find_namespace_packages`. (:pr:`622`)" +msgstr "" + +#: ../source/news.rst:21 +msgid "Updated directory layout examples for consistency. (:pr:`611`)" +msgstr "" + +#: ../source/news.rst:22 +msgid "Updated Bandersnatch link to GitHub. (:pr:`623`)" +msgstr "" + +#: ../source/news.rst:25 +msgid "June 2019" +msgstr "" + +#: ../source/news.rst:26 +msgid "Fixed some typos. (:pr:`620`)" +msgstr "" + +#: ../source/news.rst:29 +msgid "May 2019" +msgstr "" + +#: ../source/news.rst:30 +msgid "Added :file:`python_requires` usage to packaging tutorial. (:pr:`613`)" +msgstr "" + +#: ../source/news.rst:31 +msgid "Added a MANIFEST.in guide page. (:pr:`609`)" +msgstr "" + +#: ../source/news.rst:34 +msgid "April 2019" +msgstr "" + +#: ../source/news.rst:35 +msgid "" +"Added a mention for :file:`shiv` in the key projects section. (:pr:`608`)" +msgstr "" + +#: ../source/news.rst:36 +msgid "Reduced emphasis on virtualenv. (:pr:`606`)" +msgstr "" + +#: ../source/news.rst:39 +msgid "March 2019" +msgstr "" + +#: ../source/news.rst:40 +msgid "Moved single-sourcing guide version option to Python 3. (:pr:`605`)" +msgstr "" + +#: ../source/news.rst:41 +msgid "Covered RTD details for contributing. (:pr:`600`)" +msgstr "" + +#: ../source/news.rst:44 +msgid "February 2019" +msgstr "" + +#: ../source/news.rst:45 +msgid "" +"Elaborate upon the differences between the tutorial and the real packaging " +"process. (:pr:`602`)" +msgstr "" + +#: ../source/news.rst:46 +msgid "Added instructions to install Python CLI applications. (:pr:`594`)" +msgstr "" + +#: ../source/news.rst:49 +msgid "January 2019" +msgstr "" + +#: ../source/news.rst:50 +msgid "Added :file:`--no-deps` to the packaging tutorial. (:pr:`593`)" +msgstr "" + +#: ../source/news.rst:51 +msgid "Updated Sphinx and Nox. (:pr:`591`)" +msgstr "" + +#: ../source/news.rst:52 +msgid "Referenced Twine from Python3. (:pr:`581`)" +msgstr "" + +#: ../source/news.rst:55 +msgid "December 2018" +msgstr "" + +#: ../source/news.rst:56 +msgid "No programmers in the office!" +msgstr "" + +#: ../source/news.rst:59 +msgid "November 2018" +msgstr "" + +#: ../source/news.rst:60 +msgid "Removed landing page link to PyPI migration guide. (:pr:`575`)" +msgstr "" + +#: ../source/news.rst:61 +msgid "Changed bumpversion to bump2version. (:pr:`572`)" +msgstr "" + +#: ../source/news.rst:62 +msgid "Added single-sourcing package version example. (:pr:`573`)" +msgstr "" + +#: ../source/news.rst:63 +msgid "Added a guide for creating documentation. (:pr:`568`)" +msgstr "" + +#: ../source/news.rst:66 +msgid "October 2018" +msgstr "" + +#: ../source/news.rst:67 +msgid "Updated Nox package name. (:pr:`566`)" +msgstr "" + +#: ../source/news.rst:68 +msgid "Mentioned Sphinx extensions in guides. (:pr:`562`)" +msgstr "" + +#: ../source/news.rst:71 +msgid "September 2018" +msgstr "" + +#: ../source/news.rst:72 +msgid "Added a section on checking RST markup. (:pr:`554`)" +msgstr "" + +#: ../source/news.rst:73 +msgid "Updated user installs page. (:pr:`558`)" +msgstr "" + +#: ../source/news.rst:74 +msgid "Updated Google BigQuery urls. (:pr:`556`)" +msgstr "" + +#: ../source/news.rst:75 +msgid "Replaced tar command with working command. (:pr:`552`)" +msgstr "" + +#: ../source/news.rst:76 +msgid "" +"Changed to double quotes in the pip install SomeProject==1.4. (:pr:`550`)" +msgstr "" + +#: ../source/news.rst:79 +msgid "August 2018" +msgstr "" + +#: ../source/news.rst:80 +msgid "Removed the recommendation to store passwords in cleartext. (:pr:`546`)" +msgstr "" + +#: ../source/news.rst:81 +msgid "" +"Moved the Overview to a task based lead in along with the others. (:pr:`540`)" +msgstr "" + +#: ../source/news.rst:82 +msgid "Updated Python version supported by virtualenv. (:pr:`538`)" +msgstr "" + +#: ../source/news.rst:83 +msgid "Added outline/rough draft of new Overview page. (:pr:`519`)" +msgstr "" + +#: ../source/news.rst:86 +msgid "July 2018" +msgstr "" + +#: ../source/news.rst:88 +msgid "Improved binary extension docs. (:pr:`531`)" +msgstr "" + +#: ../source/news.rst:89 +msgid "Added scikit-build to key projects. (:pr:`530`)" +msgstr "" + +#: ../source/news.rst:92 +msgid "June 2018" +msgstr "" + +#: ../source/news.rst:94 +msgid "Fixed categories of interop PEP for pypa.io. (:pr:`527`)" +msgstr "" + +#: ../source/news.rst:95 +msgid "Updated Markdown descriptions explanation. (:pr:`522`)" +msgstr "" + +#: ../source/news.rst:98 +msgid "May 2018" +msgstr "" + +#: ../source/news.rst:100 +msgid "Noted issues with Provides-Dist and Obsoletes-Dist. (:pr:`513`)" +msgstr "" + +#: ../source/news.rst:101 +msgid "" +"Removed outdated warning about Python version mixing with Pipenv. (:pr:`501`)" +msgstr "" + +#: ../source/news.rst:102 +msgid "Simplified packaging tutorial. (:pr:`498`)" +msgstr "" + +#: ../source/news.rst:103 +msgid "Updated Windows users instructions for clarity. (:pr:`493`)" +msgstr "" + +#: ../source/news.rst:104 +msgid "Updated the license section description for completeness. (:pr:`492`)" +msgstr "" + +#: ../source/news.rst:105 +msgid "Added specification-style document to contributing section. (:pr:`489`)" +msgstr "" + +#: ../source/news.rst:106 +msgid "Added documentation types to contributing guide. (:pr:`485`)" +msgstr "" + +#: ../source/news.rst:109 +msgid "April 2018" +msgstr "" + +#: ../source/news.rst:111 +msgid "Added README guide. (:pr:`461`)" +msgstr "" + +#: ../source/news.rst:112 +msgid "Updated instructions and status for PyPI launch. (:pr:`475`)" +msgstr "" + +#: ../source/news.rst:113 +msgid "Added instructions for Warehouse. (:pr:`471`)" +msgstr "" + +#: ../source/news.rst:114 +msgid "Removed GPG references from publishing tutorial. (:pr:`466`)" +msgstr "" + +#: ../source/news.rst:115 +msgid "Added 'What’s in which Python 3.4–3.6?'. (:pr:`468`)" +msgstr "" + +#: ../source/news.rst:116 +msgid "Added a guide for phasing out Python versions. (:pr:`459`)" +msgstr "" + +#: ../source/news.rst:117 +msgid "Made default Description-Content-Type variant GFM. (:pr:`462`)" +msgstr "" + +#: ../source/news.rst:120 +msgid "March 2018" +msgstr "" + +#: ../source/news.rst:122 +msgid "Updated \"installing scientific packages\". (:pr:`455`)" +msgstr "" + +#: ../source/news.rst:123 +msgid "" +"Added :file:`long_description_content_type` to follow PEP 556. (:pr:`457`)" +msgstr "" + +#: ../source/news.rst:124 +msgid "Clarified a long description classifier on pypi.org. (:pr:`456`)" +msgstr "" + +#: ../source/news.rst:125 +msgid "Updated Core Metadata spec to follow PEP 556. (:pr:`412`)" +msgstr "" + +#: ../source/news.rst:128 +msgid "February 2018" +msgstr "" + +#: ../source/news.rst:130 +msgid "" +"Added python3-venv and python3-pip to Debian installation instructions. (:pr:" +"`445`)" +msgstr "" + +#: ../source/news.rst:131 +msgid "Updated PyPI migration info. (:pr:`439`)" +msgstr "" + +#: ../source/news.rst:132 +msgid "" +"Added a warning about managing multiple versions with pipenv. (:pr:`430`)" +msgstr "" + +#: ../source/news.rst:133 +msgid "Added example of multiple emails to Core Metadata. (:pr:`429`)" +msgstr "" + +#: ../source/news.rst:134 +msgid "Added explanation of \"legacy\" in test.pypi.org/legacy. (:pr:`426`)" +msgstr "" + +#: ../source/news.rst:137 +msgid "January 2018" +msgstr "" + +#: ../source/news.rst:139 +msgid "Added a link to PyPI's list of classifiers. (:pr:`425`)" +msgstr "" + +#: ../source/news.rst:140 +msgid "Updated README.rst explanation. (:pr:`419`)" +msgstr "" + +#: ../source/news.rst:143 +msgid "December 2017" +msgstr "" + +#: ../source/news.rst:145 +msgid "" +"Replaced :file:`~` with :file:`$HOME` in guides and tutorials. (:pr:`418`)" +msgstr "" + +#: ../source/news.rst:146 +msgid "Noted which fields can be used with environment markers. (:pr:`416`)" +msgstr "" + +#: ../source/news.rst:147 +msgid "Updated Requires-Python section. (:pr:`414`)" +msgstr "" + +#: ../source/news.rst:148 +msgid "Added news page. (:pr:`404`)" +msgstr "" + +#: ../source/news.rst:151 +msgid "November 2017" +msgstr "" + +#: ../source/news.rst:153 +msgid "" +"Introduced a new dependency management tutorial based on Pipenv. (:pr:`402`)" +msgstr "" + +#: ../source/news.rst:154 +msgid "" +"Updated the *Single Sourcing Package Version* tutorial to reflect pip's " +"current strategy. (:pr:`400`)" +msgstr "" + +#: ../source/news.rst:156 +msgid "" +"Added documentation about the ``py_modules`` argument to ``setup``. (:pr:" +"`398`)" +msgstr "" + +#: ../source/news.rst:157 +msgid "Simplified the wording for the :file:`manifest.in` section. (:pr:`395`)" +msgstr "" + +#: ../source/news.rst:160 +msgid "October 2017" +msgstr "" + +#: ../source/news.rst:162 +msgid "" +"Added a specification for the :file:`entry_points.txt` file. (:pr:`398`)" +msgstr "" + +#: ../source/news.rst:163 +msgid "" +"Created a new guide for managing packages using ``pip`` and ``virtualenv``. " +"(:pr:`385`)" +msgstr "" + +#: ../source/news.rst:164 +msgid "Split the specifications page into multiple pages. (:pr:`386`)" +msgstr "" + +#: ../source/news.rst:167 +msgid "September 2017" +msgstr "" + +#: ../source/news.rst:169 +msgid "" +"Encouraged using ``readme_renderer`` to validate :file:`README.rst`. (:pr:" +"`379`)" +msgstr "" + +#: ../source/news.rst:171 +msgid "Recommended using the ``--user-base`` option. (:pr:`374`)" +msgstr "" + +#: ../source/news.rst:174 +msgid "August 2017" +msgstr "" + +#: ../source/news.rst:176 +msgid "" +"Added a new, experimental tutorial on installing packages using ``Pipenv``. " +"(:pr:`369`)" +msgstr "" + +#: ../source/news.rst:177 +msgid "Added a new guide on how to use ``TestPyPI``. (:pr:`366`)" +msgstr "" + +#: ../source/news.rst:178 +msgid "Added :file:`pypi.org` as a term. (:pr:`365`)" +msgstr "" + +#: ../source/news.rst:181 +msgid "July 2017" +msgstr "" + +#: ../source/news.rst:183 +msgid "Added ``flit`` to the key projects list. (:pr:`358`)" +msgstr "" + +#: ../source/news.rst:184 +msgid "Added ``enscons`` to the list of key projects. (:pr:`357`)" +msgstr "" + +#: ../source/news.rst:185 +msgid "" +"Updated this guide's ``readme`` with instructions on how to build the guide " +"locally. (:pr:`356`)" +msgstr "" + +#: ../source/news.rst:186 +msgid "" +"Made the new ``TestPyPI`` URL more visible, adding note to homepage about " +"pypi.org. (:pr:`354`)" +msgstr "" + +#: ../source/news.rst:187 +msgid "" +"Added a note about the removal of the explicit registration API. (:pr:`347`)" +msgstr "" + +#: ../source/news.rst:190 +msgid "June 2017" +msgstr "" + +#: ../source/news.rst:192 +msgid "Added a document on migrating uploads to :file:`PyPI.org`. (:pr:`339`)" +msgstr "" + +#: ../source/news.rst:193 +msgid "Added documentation for ``python_requires``. (:pr:`338`)" +msgstr "" + +#: ../source/news.rst:194 +msgid "" +"Added a note about PyPI migration in the *Tool Recommendations* tutorial. (:" +"pr:`335`)" +msgstr "" + +#: ../source/news.rst:195 +msgid "" +"Added a note that :file:`manifest.in` does not affect wheels. (:pr:`332`)" +msgstr "" + +#: ../source/news.rst:196 +msgid "Added a license section to the distributing guide. (:pr:`331`)" +msgstr "" + +#: ../source/news.rst:197 +msgid "Expanded the section on the ``name`` argument. (:pr:`329`)" +msgstr "" + +#: ../source/news.rst:198 +msgid "Adjusted the landing page. (:pr:`327`, :pr:`326`, :pr:`324`)" +msgstr "" + +#: ../source/news.rst:199 +msgid "Updated to Sphinx 1.6.2. (:pr:`323`)" +msgstr "" + +#: ../source/news.rst:200 +msgid "Switched to the PyPA theme. (:pr:`305`)" +msgstr "" + +#: ../source/news.rst:201 +msgid "Re-organized the documentation into the new structure. (:pr:`318`)" +msgstr "" + +#: ../source/news.rst:204 +msgid "May 2017" +msgstr "" + +#: ../source/news.rst:206 +msgid "" +"Added documentation for the ``Description-Content-Type`` field. (:pr:`258`)" +msgstr "" + +#: ../source/news.rst:207 +msgid "Added contributor and style guide. (:pr:`307`)" +msgstr "" + +#: ../source/news.rst:208 +msgid "" +"Documented ``pip`` and ``easy_install``'s differences for per-project " +"indexes. (:pr:`233`)" +msgstr "" + +#: ../source/news.rst:211 +msgid "April 2017" +msgstr "" + +#: ../source/news.rst:213 +msgid "Added travis configuration for testing pull requests. (:pr:`300`)" +msgstr "" + +#: ../source/news.rst:214 +msgid "" +"Mentioned the requirement of the ``wheel`` package for creating wheels (:pr:" +"`299`)" +msgstr "" + +#: ../source/news.rst:215 +msgid "" +"Removed the ``twine register`` reference in the *Distributing Packages* " +"tutorial. (:pr:`271`)" +msgstr "" + +#: ../source/news.rst:216 +msgid "Added a topic on plugin discovery. (:pr:`294`, :pr:`296`)" +msgstr "" + +#: ../source/news.rst:217 +msgid "Added a topic on namespace packages. (:pr:`290`)" +msgstr "" + +#: ../source/news.rst:218 +msgid "" +"Added documentation explaining prominently how to install ``pip`` in ``/usr/" +"local``. (:pr:`230`)" +msgstr "" + +#: ../source/news.rst:219 +msgid "" +"Updated development mode documentation to mention that order of local " +"packages matters. (:pr:`208`)" +msgstr "" + +#: ../source/news.rst:220 +msgid "" +"Convert readthedocs link for their ``.org`` -> ``.io`` migration for hosted " +"projects (:pr:`239`)" +msgstr "" + +#: ../source/news.rst:221 +msgid "" +"Swapped order of :file:`setup.py` arguments for the upload command, as order " +"is significant. (:pr:`260`)" +msgstr "" + +#: ../source/news.rst:223 +msgid "" +"Explained how to install from unsupported sources using a helper " +"application. (:pr:`289`)" +msgstr "" + +#: ../source/news.rst:227 +msgid "March 2017" +msgstr "" + +#: ../source/news.rst:229 +msgid "Covered ``manylinux1`` in *Platform Wheels*. (:pr:`283`)" +msgstr "" + +#: ../source/news.rst:232 +msgid "February 2017" +msgstr "" + +#: ../source/news.rst:234 +msgid "Added :pep:`518`. (:pr:`281`)" +msgstr "" + +#: ../source/overview.rst:3 +msgid "Overview of Python Packaging" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:56 +msgid "Python modules" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:75 +msgid "Python source distributions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:116 +msgid "Python binary distributions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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/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 "" + +#: ../source/overview.rst:145 +msgid "A summary of Python's packaging capabilities for tools and libraries." +msgstr "" + +#: ../source/overview.rst:145 +msgid "" +"Python's recommended built-in library and tool packaging technologies. " +"Excerpted from `The Packaging Gradient (2017) `_." +msgstr "" + +#: ../source/overview.rst:152 +msgid "Packaging Python applications" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:222 +msgid "`Brython `_" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:238 +msgid "Technologies which support this model:" +msgstr "" + +#: ../source/overview.rst:240 +msgid ":gh:`PEX ` (Python EXecutable)" +msgstr "" + +#: ../source/overview.rst:241 +msgid "" +":doc:`zipapp ` (does not help manage dependencies, " +"requires Python 3.5+)" +msgstr "" + +#: ../source/overview.rst:242 +msgid ":gh:`shiv ` (requires Python 3)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:273 +msgid "Instructions on building and publishing for the Anaconda ecosystem:" +msgstr "" + +#: ../source/overview.rst:275 +msgid "" +"`Building libraries and applications with conda `_" +msgstr "" + +#: ../source/overview.rst:276 +msgid "" +"`Transitioning a native Python package to Anaconda `_" +msgstr "" + +#: ../source/overview.rst:278 +msgid "" +"A similar model involves installing an alternative Python distribution, but " +"does not support arbitrary operating system-level packages:" +msgstr "" + +#: ../source/overview.rst:282 +msgid "" +"`ActiveState ActivePython `_" +msgstr "" + +#: ../source/overview.rst:283 +msgid "`WinPython `_" +msgstr "" + +#: ../source/overview.rst:288 +msgid "Bringing your own Python executable" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:303 +msgid "A selection of Python freezers:" +msgstr "" + +#: ../source/overview.rst:305 +msgid "" +"`pyInstaller `_ - Cross-" +"platform" +msgstr "" + +#: ../source/overview.rst:306 +msgid "" +"`cx_Freeze `_ - Cross-platform" +msgstr "" + +#: ../source/overview.rst:307 +msgid "" +"`constructor `_ - For command-line " +"installers" +msgstr "" + +#: ../source/overview.rst:308 +msgid "`py2exe `_ - Windows only" +msgstr "" + +#: ../source/overview.rst:309 +msgid "`py2app `_ - Mac only" +msgstr "" + +#: ../source/overview.rst:310 +msgid "`osnap `_ - Windows and Mac" +msgstr "" + +#: ../source/overview.rst:311 +msgid "`pynsist `_ - Windows only" +msgstr "" + +#: ../source/overview.rst:313 +msgid "" +"Most of the above imply single-user deployments. For multi-component server " +"applications, see :gh:`Chef Omnibus `." +msgstr "" + +#: ../source/overview.rst:319 +msgid "Bringing your own userspace" +msgstr "" + +#: ../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 "" + +#: ../source/overview.rst:328 +msgid "" +"These techniques are mostly Python agnostic, because they package whole OS " +"filesystems, not just Python or Python packages." +msgstr "" + +#: ../source/overview.rst:331 +msgid "" +"Adoption is most extensive among Linux servers, where the technology " +"originated and where the technologies below work best:" +msgstr "" + +#: ../source/overview.rst:334 +msgid "`AppImage `_" +msgstr "" + +#: ../source/overview.rst:335 +msgid "`Docker `_" +msgstr "" + +#: ../source/overview.rst:336 +msgid "`Flatpak `_" +msgstr "" + +#: ../source/overview.rst:337 +msgid "`Snapcraft `_" +msgstr "" + +#: ../source/overview.rst:340 +msgid "Bringing your own kernel" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/overview.rst:351 +msgid "KVM on Linux" +msgstr "" + +#: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 +msgid "" +"`VHD `_, `AMI `_, and :doc:`other formats " +"`" +msgstr "" + +#: ../source/overview.rst:356 +msgid "" +"`OpenStack `_ - A cloud " +"management system written in Python, with extensive VM support" +msgstr "" + +#: ../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 "" + +#: ../source/overview.rst:379 +msgid "A summary of technologies used to package Python applications." +msgstr "" + +#: ../source/overview.rst:379 +msgid "" +"The simplified gamut of technologies used to package Python applications." +msgstr "" + +#: ../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 "" + +#: ../source/overview.rst:401 +msgid "" +"In most deployment pipelines, the OS package manager is just one piece of " +"the puzzle." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:27 +msgid "Wheel installation notionally consists of two phases:" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:29 +msgid "Unpack." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:31 +msgid "Parse ``distribution-1.0.dist-info/WHEEL``." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:34 +msgid "" +"If Root-Is-Purelib == 'true', unpack archive into purelib (site-packages)." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:36 +msgid "Else unpack archive into platlib (site-packages)." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:38 +msgid "Spread." +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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:48 +msgid "" +"If applicable, update scripts starting with ``#!python`` to point to the " +"correct interpreter." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:50 +msgid "Update ``distribution-1.0.dist-info/RECORD`` with the installed paths." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:52 +msgid "Remove empty ``distribution-1.0.data`` directory." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:57 +msgid "Recommended installer features" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:67 +msgid "Rewrite ``#!python``." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:72 +msgid "Generate script wrappers." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:75 +msgid "Recommended archiver features" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:82 +msgid "Place ``.dist-info`` at the end of the archive." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:96 +msgid "distribution" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:96 +msgid "Distribution name, e.g. 'django', 'pyramid'." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:124 +msgid "build tag" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:130 +#: ../source/specifications/platform-compatibility-tags.rst:20 +msgid "abi tag" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:130 +msgid "E.g. 'cp33m', 'abi3', 'none'." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:133 +#: ../source/specifications/platform-compatibility-tags.rst:23 +msgid "platform tag" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:133 +msgid "E.g. 'linux_x86_64', 'any'." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:145 +msgid "Escaping and Unicode" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:159 +msgid "" +"The remaining components may not contain ``-`` characters, so no escaping is " +"necessary." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:187 +msgid "``{distribution}-{version}.dist-info/`` contains metadata." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:188 +msgid "" +":file:`{distribution}-{version}.dist-info/licenses/` contains license files." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:197 +msgid "" +"``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " +"greater format metadata." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:209 +msgid "``Wheel-Version`` is the version number of the Wheel specification." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:210 +msgid "" +"``Generator`` is the name and optionally the version of the software that " +"produced the archive." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:217 +msgid "" +"``Build`` is the build number and is omitted if there is no build number." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:223 +msgid "Wheel does not contain setup.py or setup.cfg." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:232 +#: ../source/specifications/recording-installed-packages.rst:23 +msgid "The .dist-info directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:234 +msgid "" +"Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " +"RECORD." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/binary-distribution-format.rst:238 +msgid "WHEEL is the wheel metadata specific to a build of the package." +msgstr "" + +#: ../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, as signed wheel files " +"rely on the strong hashes in RECORD to validate the integrity of the archive." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:245 +msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:246 +msgid "" +"RECORD.jws is used for digital signatures. It is not mentioned in RECORD." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:248 +msgid "" +"RECORD.p7s is allowed as a courtesy to anyone who would prefer to use S/MIME " +"signatures to secure their wheel files. It is not mentioned in RECORD." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:251 +msgid "" +"During extraction, wheel installers verify all the hashes in RECORD against " +"the file contents. Apart from RECORD and its signatures, installation will " +"fail if any file in the archive is not both mentioned and correctly hashed " +"in RECORD." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:257 +msgid "Subdirectories in :file:`.dist-info/`" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:259 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:263 +msgid "Subdirectory name" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:263 +msgid "PEP / Standard" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:265 +msgid "``licenses``" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:265 +#: ../source/specifications/binary-distribution-format.rst:266 +msgid ":pep:`639`" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:266 +msgid "``license_files``" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:267 +msgid "``LICENSES``" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:267 +msgid "`REUSE licensing framework `__" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:268 +msgid "``sboms``" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:268 +msgid ":pep:`770`" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:272 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:274 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:281 +msgid "The :file:`.dist-info/sboms/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:283 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:288 +msgid "The .data directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:290 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:298 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:304 +msgid "Signed wheel files" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:306 +msgid "" +"Wheel files include an extended RECORD that enables digital signatures. PEP " +"376's RECORD is altered to include a secure hash " +"``digestname=urlsafe_b64encode_nopad(digest)`` (urlsafe base64 encoding with " +"no trailing = characters) as the second column instead of an md5sum. All " +"possible entries are hashed, including any generated files such as .pyc " +"files, but not RECORD which cannot contain its own hash. For example::" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:317 +msgid "" +"The signature file(s) RECORD.jws and RECORD.p7s are not mentioned in RECORD " +"at all since they can only be added after RECORD is generated. Every other " +"file in the archive must have a correct hash in RECORD or the installation " +"will fail." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:322 +msgid "" +"If JSON web signatures are used, one or more JSON Web Signature JSON " +"Serialization (JWS-JS) signatures is stored in a file RECORD.jws adjacent to " +"RECORD. JWS is used to sign RECORD by including the SHA-256 hash of RECORD " +"as the signature's JSON payload:" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:331 +msgid "(The hash value is the same format used in RECORD.)" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:333 +msgid "" +"If RECORD.p7s is used, it must contain a detached S/MIME format signature of " +"RECORD." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:336 +msgid "" +"A wheel installer is not required to understand digital signatures but MUST " +"verify the hashes in RECORD against the extracted file contents. When the " +"installer checks file hashes against RECORD, a separate signature checker " +"only needs to establish that RECORD matches the signature." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:341 +msgid "See" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:343 +msgid "https://datatracker.ietf.org/doc/html/rfc7515" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:344 +msgid "" +"https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" +"serialization-01" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:345 +msgid "https://datatracker.ietf.org/doc/html/rfc7517" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:346 +msgid "" +"https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:350 +#: ../source/specifications/platform-compatibility-tags.rst:370 +msgid "FAQ" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:354 +msgid "Wheel defines a .data directory. Should I put all my data there?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:356 +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:365 +msgid "Why does wheel include attached signatures?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:367 +msgid "" +"Attached signatures are more convenient than detached signatures because " +"they travel with the archive. Since only the individual files are signed, " +"the archive can be recompressed without invalidating the signature or " +"individual files can be verified without having to download the whole " +"archive." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:375 +msgid "Why does wheel allow JWS signatures?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:377 +msgid "" +"The JOSE specifications of which JWS is a part are designed to be easy to " +"implement, a feature that is also one of wheel's primary design goals. JWS " +"yields a useful, concise pure-Python implementation." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:383 +msgid "Why does wheel also allow S/MIME signatures?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:385 +msgid "" +"S/MIME signatures are allowed for users who need or want to use existing " +"public key infrastructure with wheel." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:388 +msgid "" +"Signed packages are only a basic building block in a secure package update " +"system. Wheel only provides the building block." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:393 +msgid "What's the deal with \"purelib\" vs. \"platlib\"?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:395 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:400 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:405 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:413 +msgid "Is it possible to import Python code directly from a wheel file?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:415 +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:421 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:430 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:447 +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:455 +#: ../source/specifications/core-metadata.rst:1035 +#: ../source/specifications/dependency-groups.rst:250 +#: ../source/specifications/dependency-specifiers.rst:516 +#: ../source/specifications/direct-url-data-structure.rst:292 +#: ../source/specifications/direct-url.rst:67 +#: ../source/specifications/entry-points.rst:164 +#: ../source/specifications/externally-managed-environments.rst:472 +#: ../source/specifications/inline-script-metadata.rst:213 +#: ../source/specifications/name-normalization.rst:50 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pylock-toml.rst:826 +#: ../source/specifications/pyproject-toml.rst:630 +#: ../source/specifications/recording-installed-packages.rst:278 +#: ../source/specifications/simple-repository-api.rst:972 +#: ../source/specifications/source-distribution-format.rst:153 +#: ../source/specifications/version-specifiers.rst:1269 +#: ../source/specifications/virtual-environments.rst:54 +msgid "History" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:457 +msgid "February 2013: This specification was approved through :pep:`427`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:458 +msgid "" +"February 2021: The rules on escaping in wheel filenames were revised, to " +"bring them into line with what popular tools actually do." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:460 +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 "" + +#: ../source/specifications/binary-distribution-format.rst:464 +#: ../source/specifications/recording-installed-packages.rst:288 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:466 +msgid "" +"January 2025: Clarified that name and version needs to be normalized for ``." +"dist-info`` and ``.data`` directories." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:471 +msgid "Appendix" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:473 +msgid "Example urlsafe-base64-nopad implementation::" +msgstr "" + +#: ../source/specifications/build-details/index.rst:7 +#: ../source/specifications/build-details/index.rst:41 +msgid "v1.0" +msgstr "" + +#: ../source/specifications/build-details/index.rst:5 +msgid ":file:`build-details.json`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/build-details/index.rst:22 +msgid "" +"Please refer to the :ref:`latest version ` for its " +"specification." +msgstr "" + +#: ../source/specifications/build-details/index.rst:28 +#: ../source/specifications/build-details/v1.0.rst:16 +#: ../source/specifications/inline-script-metadata.rst:100 +#: ../source/specifications/pylock-toml.rst:722 +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:26 +#: ../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 "" + +#: ../source/specifications/build-details/index.rst:48 +msgid "Schema" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/index.rst:52 +msgid "Initial version, introduced by :pep:`739`." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:5 +msgid "``build-details.json`` v1.0" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"*build-details.json — a static description file with build details of Python " +"installations*" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "type" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*object*" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "properties" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**schema\\_version**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Schema version." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"For this specification version, this value is constant and **MUST** be " +"``1.0``." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*string*" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "const" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "1.0" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**base\\_prefix**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Base prefix of the Python installation." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "examples" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "../.." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "base\\_interpreter" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the Python interprer of the base installation." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Either an absolute path, or a path relative to ``base_prefix``." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **MUST** be present if the installation provides an interpreter " +"executable." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/bin/python" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "bin/python" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**platform**" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "linux-x86\\_64" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**language**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to the Python language specification." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**version**" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"This field **SHOULD** be equivalent to ``sysconfig.get_python_version()``." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "3.14" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "version\\_info" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object in the format of :py:data:`sys.version_info`." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "This section **SHOULD** be equivalent to :py:data:`sys.version_info`." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "major" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "3" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "minor" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "14" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "micro" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "1" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "releaselevel" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "final" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "serial" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "0" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**major**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*number*" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**minor**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**micro**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**releaselevel**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "enum" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "alpha, beta, candidate, final" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**serial**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "additionalProperties" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "False" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**implementation**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to Python implementation." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**name**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Lower-case name of the Python implementation." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "cpython" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "pypy" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "" +"Object in the format of :py:data:`sys.version_info`, containing the " +"implementation version." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "7" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "16" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "True" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "abi" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to ABI." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**flags**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Build configuration flags, used to calculate the extension suffix." +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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*array*" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "t" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "d" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "extension\\_suffix" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".cpython-314-x86\\_64-linux-gnu.so" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "stable\\_abi\\_suffix" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Suffix used for extensions built against the stable ABI." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".abi3.so" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "suffixes" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "source" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".py" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "bytecode" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".pyc" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "optimized_bytecode" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "debug_bytecode" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "extensions" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".cpython-313-x86\\_64-linux-gnu.so" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid ".so" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "libpython" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to the ``libpython`` library." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "dynamic" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the dynamic ``libpython`` library." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/libpython3.14.so.1.0" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/libpython3.14.so.1.0" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "dynamic\\_stableabi" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the dynamic ``libpython`` library for the stable ABI." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "If this key is present ``dynamic`` **MUST** also be set." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/libpython3.so" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/libpython3.so" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "static" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the static ``libpython`` library." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/python3.14/config-3.14-x86\\_64-linux-gnu/libpython3.14.a" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "link\\_extensions" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Should extensions built against a dynamic ``libpython`` link to it?" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "*boolean*" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "c\\_api" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing details related to the Python C API." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "**headers**" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the C API headers." +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/include/python3.14" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "include/python3.14" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "pkgconfig\\_path" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "The path to the pkg-config definition files." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "/usr/lib/pkgconfig" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "lib/pkgconfig" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "arbitrary\\_data" +msgstr "" + +#: ../source/specifications/build-details/v1.0.rst:12 +msgid "Object containing extra arbitrary data." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/core-metadata.rst:9 +msgid "This page describes version 2.5, approved in September 2025." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/core-metadata.rst:48 +msgid "Metadata-Version" +msgstr "" + +#: ../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\", and \"2.5\"." +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 "" + +#: ../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 "" + +#: ../source/specifications/core-metadata.rst:66 +#: ../source/specifications/core-metadata.rst:84 +#: ../source/specifications/core-metadata.rst:101 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/core-metadata.rst:113 +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 "" + +#: ../source/specifications/core-metadata.rst:117 +msgid "" +"When found in the metadata of a source distribution, the following rules " +"apply:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:120 +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 "" + +#: ../source/specifications/core-metadata.rst:124 +msgid "" +"If a 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 "" + +#: ../source/specifications/core-metadata.rst:127 +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 "" + +#: ../source/specifications/core-metadata.rst:131 +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 "" + +#: ../source/specifications/core-metadata.rst:136 +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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" +"Full details of the semantics of ``Dynamic`` are described in :pep:`643`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:151 +msgid "Platform (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:155 +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:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 +msgid "Examples::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:167 +msgid "Supported-Platform (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:171 +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 "" + +#: ../source/specifications/core-metadata.rst:185 +msgid "Summary" +msgstr "" + +#: ../source/specifications/core-metadata.rst:189 +msgid "A one-line summary of what the distribution does." +msgstr "" + +#: ../source/specifications/core-metadata.rst:209 +msgid "This field may be specified in the message body instead." +msgstr "" + +#: ../source/specifications/core-metadata.rst:212 +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:217 +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 "" + +#: ../source/specifications/core-metadata.rst:223 +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:240 +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 "" + +#: ../source/specifications/core-metadata.rst:244 +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:253 +msgid "Description-Content-Type" +msgstr "" + +#: ../source/specifications/core-metadata.rst:257 +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:260 +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 "" + +#: ../source/specifications/core-metadata.rst:273 +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 "" + +#: ../source/specifications/core-metadata.rst:279 +msgid "Format::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:283 +msgid "The ``type/subtype`` part has only a few legal values:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:285 +msgid "``text/plain``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:286 +msgid "``text/x-rst``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:287 +msgid "``text/markdown``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:289 +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 "" + +#: ../source/specifications/core-metadata.rst:293 +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 "" + +#: ../source/specifications/core-metadata.rst:298 +msgid "``GFM`` for :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" +msgstr "" + +#: ../source/specifications/core-metadata.rst:299 +msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" +msgstr "" + +#: ../source/specifications/core-metadata.rst:317 +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 "" + +#: ../source/specifications/core-metadata.rst:321 +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 "" + +#: ../source/specifications/core-metadata.rst:325 +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 "" + +#: ../source/specifications/core-metadata.rst:329 +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 "" + +#: ../source/specifications/core-metadata.rst:338 +msgid "Keywords" +msgstr "" + +#: ../source/specifications/core-metadata.rst:342 +msgid "" +"A list of additional keywords, separated by commas, to be used to assist " +"searching for the distribution in a larger catalog." +msgstr "" + +#: ../source/specifications/core-metadata.rst:351 +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 "" + +#: ../source/specifications/core-metadata.rst:360 +msgid "Author" +msgstr "" + +#: ../source/specifications/core-metadata.rst:364 +msgid "" +"A string containing the author's name at a minimum; additional contact " +"information may be provided." +msgstr "" + +#: ../source/specifications/core-metadata.rst:377 +msgid "Author-email" +msgstr "" + +#: ../source/specifications/core-metadata.rst:381 +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 "" + +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 +msgid "" +"Per RFC-822, this field may contain multiple comma-separated e-mail " +"addresses::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:399 +msgid "Maintainer" +msgstr "" + +#: ../source/specifications/core-metadata.rst:403 +msgid "" +"A string containing the maintainer's name at a minimum; additional contact " +"information may be provided." +msgstr "" + +#: ../source/specifications/core-metadata.rst:406 +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 "" + +#: ../source/specifications/core-metadata.rst:420 +msgid "Maintainer-email" +msgstr "" + +#: ../source/specifications/core-metadata.rst:424 +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 "" + +#: ../source/specifications/core-metadata.rst:428 +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 "" + +#: ../source/specifications/core-metadata.rst:446 +msgid "License" +msgstr "" + +#: ../source/specifications/core-metadata.rst:449 +msgid "in favour of ``License-Expression``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:453 +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 "" + +#: ../source/specifications/core-metadata.rst:458 +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 "" + +#: ../source/specifications/core-metadata.rst:478 +msgid "License-Expression" +msgstr "" + +#: ../source/specifications/core-metadata.rst:482 +msgid "" +"Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 +msgid "License-File (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:511 +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 "" + +#: ../source/specifications/core-metadata.rst:528 +msgid "Classifier (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:532 +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 "" + +#: ../source/specifications/core-metadata.rst:538 +msgid "" +"The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " +"``License-Expression`` instead. See `PEP 639 `_." +msgstr "" + +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 +msgid "This field may be followed by an environment marker after a semicolon." +msgstr "" + +#: ../source/specifications/core-metadata.rst:553 +msgid "Requires-Dist (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 +msgid "" +"The field format specification was relaxed to accept the syntax used by " +"popular publishing tools." +msgstr "" + +#: ../source/specifications/core-metadata.rst:560 +msgid "" +"Each entry contains a string naming some other distutils project required by " +"this distribution." +msgstr "" + +#: ../source/specifications/core-metadata.rst:563 +msgid "The format of a requirement string contains from one to four parts:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:565 +msgid "" +"A project name, in the same format as the ``Name:`` field. The only " +"mandatory part." +msgstr "" + +#: ../source/specifications/core-metadata.rst:567 +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 "" + +#: ../source/specifications/core-metadata.rst:571 +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:574 +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:577 +msgid "See :pep:`508` for full details of the allowed format." +msgstr "" + +#: ../source/specifications/core-metadata.rst:579 +msgid "" +"The project names should correspond to names as found on the `Python Package " +"Index`_." +msgstr "" + +#: ../source/specifications/core-metadata.rst:582 +msgid "" +"Version specifiers must follow the rules described in :doc:`version-" +"specifiers`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:596 +msgid "Requires-Python" +msgstr "" + +#: ../source/specifications/core-metadata.rst:600 +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 "" + +#: ../source/specifications/core-metadata.rst:604 +msgid "The value must be in the format specified in :doc:`version-specifiers`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:606 +msgid "" +"For example, if a distribution uses :ref:`f-strings ` " +"then it may prevent installation on Python < 3.6 by specifying::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:611 +msgid "This field cannot be followed by an environment marker." +msgstr "" + +#: ../source/specifications/core-metadata.rst:616 +msgid "Requires-External (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:623 +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 "" + +#: ../source/specifications/core-metadata.rst:628 +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:634 +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 "" + +#: ../source/specifications/core-metadata.rst:639 +msgid "Notice that there is no particular rule on the strings to be used." +msgstr "" + +#: ../source/specifications/core-metadata.rst:651 +msgid "Project-URL (multiple-use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:655 +msgid "" +"A string containing a browsable URL for the project and a label for it, " +"separated by a comma." +msgstr "" + +#: ../source/specifications/core-metadata.rst:662 +msgid "The label is free text limited to 32 characters." +msgstr "" + +#: ../source/specifications/core-metadata.rst:664 +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 "" + +#: ../source/specifications/core-metadata.rst:674 +msgid "Provides-Extra (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:677 +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 "" + +#: ../source/specifications/core-metadata.rst:682 +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 "" + +#: ../source/specifications/core-metadata.rst:690 +msgid "" +"The specified name may be used to make a dependency conditional on whether " +"the optional feature has been requested." +msgstr "" + +#: ../source/specifications/core-metadata.rst:698 +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:708 +msgid "" +"Two feature names ``test`` and ``doc`` are reserved to mark dependencies " +"that are needed for running automated tests and generating documentation, " +"respectively." +msgstr "" + +#: ../source/specifications/core-metadata.rst:712 +msgid "" +"It is legal to specify ``Provides-Extra:`` without referencing it in any " +"``Requires-Dist:``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:715 +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 "" + +#: ../source/specifications/core-metadata.rst:720 +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 "" + +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 +msgid "Rarely Used Fields" +msgstr "" + +#: ../source/specifications/core-metadata.rst:825 +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 "" + +#: ../source/specifications/core-metadata.rst:830 +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 "" + +#: ../source/specifications/core-metadata.rst:840 +msgid "Provides-Dist (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:847 +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 "" + +#: ../source/specifications/core-metadata.rst:852 +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/specifications/core-metadata.rst:859 +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 "" + +#: ../source/specifications/core-metadata.rst:867 +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 "" + +#: ../source/specifications/core-metadata.rst:882 +msgid "Obsoletes-Dist (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:889 +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 "" + +#: ../source/specifications/core-metadata.rst:893 +msgid "" +"Version declarations can be supplied. Version numbers must be in the format " +"specified in :doc:`version-specifiers`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:898 +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 "" + +#: ../source/specifications/core-metadata.rst:911 +msgid "Deprecated Fields" +msgstr "" + +#: ../source/specifications/core-metadata.rst:913 +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 "" + +#: ../source/specifications/core-metadata.rst:922 +msgid "Home-page" +msgstr "" + +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 +msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." +msgstr "" + +#: ../source/specifications/core-metadata.rst:930 +msgid "A string containing the URL for the distribution's home page." +msgstr "" + +#: ../source/specifications/core-metadata.rst:939 +msgid "Download-URL" +msgstr "" + +#: ../source/specifications/core-metadata.rst:947 +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 "" + +#: ../source/specifications/core-metadata.rst:953 +msgid "Requires" +msgstr "" + +#: ../source/specifications/core-metadata.rst:956 +msgid "in favour of ``Requires-Dist``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:959 +msgid "" +"Each entry contains a string describing some other module or package " +"required by this package." +msgstr "" + +#: ../source/specifications/core-metadata.rst:962 +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 "" + +#: ../source/specifications/core-metadata.rst:966 +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 "" + +#: ../source/specifications/core-metadata.rst:974 +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 "" + +#: ../source/specifications/core-metadata.rst:977 +msgid "" +"All of the following are possible requirement strings: \"rfc822\", \"zlib " +"(>=1.1.4)\", \"zope\"." +msgstr "" + +#: ../source/specifications/core-metadata.rst:980 +msgid "" +"There’s no canonical list of what strings should be used; the Python " +"community is left to choose its own standards." +msgstr "" + +#: ../source/specifications/core-metadata.rst:993 +msgid "Provides" +msgstr "" + +#: ../source/specifications/core-metadata.rst:996 +msgid "in favour of ``Provides-Dist``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:999 +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 "" + +#: ../source/specifications/core-metadata.rst:1015 +msgid "Obsoletes" +msgstr "" + +#: ../source/specifications/core-metadata.rst:1018 +msgid "in favour of ``Obsoletes-Dist``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:1021 +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 "" + +#: ../source/specifications/core-metadata.rst:1025 +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 "" + +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 +msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1051 +msgid "Added the ``Dynamic`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1062 +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 "" + +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 +msgid "reStructuredText markup: https://docutils.sourceforge.io/" +msgstr "" + +#: ../source/specifications/core-metadata.rst:1081 +msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:5 +msgid "Dependency Groups" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/dependency-groups.rst:25 +msgid "This is a simple table which shows ``docs`` and ``test`` groups::" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:31 +msgid "" +"and a similar table which defines ``docs``, ``test``, and ``coverage`` " +"groups::" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:39 +msgid "The ``[dependency-groups]`` Table" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/dependency-groups.rst:61 +msgid "Dependency Group Include" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:63 +msgid "" +"A Dependency Group Include includes another Dependency Group in the current " +"group." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/dependency-groups.rst:102 +msgid "Package Building" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/dependency-groups.rst:114 +msgid "Installing Dependency Groups & Extras" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/dependency-groups.rst:157 +#: ../source/specifications/inline-script-metadata.rst:123 +msgid "Reference Implementation" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/dependency-groups.rst:252 +msgid "October 2024: This specification was approved through :pep:`735`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:7 +msgid "Dependency specifiers" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:9 +msgid "" +"This document describes the dependency specifiers format as originally " +"specified in :pep:`508`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:12 +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 in one platform, or only some " +"versions are acceptable, so the language permits describing all these cases." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:18 +msgid "" +"The language defined is a compact line based format which is already in " +"widespread use in pip requirements files, though we do not specify the " +"command line option handling that those files permit. There is one caveat - " +"the URL reference form, specified in :ref:`Versioning specifier " +"specification ` is not actually implemented in pip, but " +"we use that format rather than pip's current native format." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:31 +msgid "All features of the language shown with a name based lookup::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:35 +msgid "A minimal URL based lookup::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:40 +msgid "Concepts" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:42 +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 "" + +#: ../source/specifications/dependency-specifiers.rst:49 +msgid "Grammar" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:51 +msgid "" +"We first cover the grammar briefly and then drill into the semantics of each " +"section later." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:54 +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 "" + +#: ../source/specifications/dependency-specifiers.rst:59 +msgid "" +"The full grammar including annotations to build a useful parse tree is " +"included at the end of this document." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:62 +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 "" + +#: ../source/specifications/dependency-specifiers.rst:73 +msgid "" +"Environment markers allow making a specification only take effect in some " +"environments::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:102 +msgid "" +"Optional components of a distribution may be specified using the extras " +"field::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:111 +msgid "Restrictions on names for extras is defined in :pep:`685`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:113 +msgid "Giving us a rule for name based requirements::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:117 +msgid "And a rule for direct reference specifications::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:121 +msgid "Leading to the unified rule that can specify a dependency.::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:126 +msgid "Whitespace" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:128 +msgid "" +"Non line-breaking whitespace is mostly optional with no semantic meaning. " +"The sole exception is detecting the end of a URL requirement." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:134 +msgid "Names" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:136 +msgid "" +"Python distribution names are currently defined in :pep:`345`. 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. " +"However, PyPI places strict restrictions on names - they must match a case " +"insensitive regex or they won't be accepted. Accordingly, in this document " +"we limit the acceptable values for identifiers to that regex. A full " +"redefinition of name may take place in a future metadata PEP. The regex (run " +"with re.IGNORECASE) is::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:150 +msgid "Extras" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:152 +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:159 +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 "" + +#: ../source/specifications/dependency-specifiers.rst:164 +msgid "" +"If multiple extras are listed, all the dependencies are unioned together." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:169 +msgid "Versions" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:171 +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 comparison are also used in the markers feature. The optional " +"brackets around a version are present for compatibility with :pep:`345` but " +"should not be generated, only accepted." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:182 +msgid "Environment Markers" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:184 +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 argparse. In Python 2.7 argparse is always present. On " +"older Python versions it has to be installed as a dependency. This can be " +"expressed as so::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:191 +msgid "" +"A marker expression evaluates to either True or False. When it evaluates to " +"False, the dependency specification should be ignored." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:194 +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. Markers were first standardised in :pep:`345`. This " +"document fixes some issues that were observed in the design described in :" +"pep:`426`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:199 +msgid "" +"Comparisons in marker expressions are typed by the comparison operator and " +"the type of the marker value. The operators that are not in " +" perform the same as they do for strings or sets in Python " +"based on whether the marker value is a string or set itself. The " +" operators use the version comparison rules of the :ref:" +"`Version specifier specification ` when those are " +"defined (that is when both sides have a valid version specifier). If there " +"is no defined behaviour of this specification and the operator exists in " +"Python, then the operator falls back to the Python behaviour for the types " +"involved. Otherwise an error should be raised. e.g. the following will " +"result in errors::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:213 +msgid "" +"User supplied constants are always encoded as strings with either ``'`` or " +"``\"`` quote marks. Note that backslash escapes are not defined, but " +"existing implementations do support them. They are not included in this " +"specification because they add complexity and there is no observable need " +"for them today. Similarly we do not define non-ASCII character support: all " +"the runtime variables we are referencing are expected to be ASCII-only." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:220 +msgid "" +"The variables in the marker grammar such as \"os_name\" resolve to values " +"looked up in the Python runtime. With the exception of \"extra\" all values " +"are defined on all Python versions today - it is an error in the " +"implementation of markers if a value is not defined." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:225 +msgid "" +"Unknown variables must raise an error rather than resulting in a comparison " +"that evaluates to True or False." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:228 +msgid "" +"Variables whose value cannot be calculated on a given Python implementation " +"should evaluate to ``0`` for versions, and an empty string for all other " +"variables." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:232 +msgid "" +"The \"extra\" variable is special. It is used by wheels to signal which " +"specifications apply to a given extra in the wheel ``METADATA`` file, but " +"since the ``METADATA`` file is based on a draft version of :pep:`426`, there " +"is no current specification for this. Regardless, outside of a context where " +"this special handling is taking place, the \"extra\" variable should result " +"in an error like all other unknown variables." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:239 +msgid "" +"The \"extras\" and \"dependency_groups\" variables are also special. They " +"are used to specify any requested extras or dependency groups when " +"installing from a lock file. Outside of the context of lock files, these two " +"variables should result in an error like all other unknown variables." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:247 +msgid "Marker" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:248 +msgid "Python equivalent" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:249 +msgid "Type" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:250 +msgid "Sample values" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:251 +msgid "``os_name``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:252 +msgid ":py:data:`os.name`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:274 +#: ../source/specifications/dependency-specifiers.rst:278 +#: ../source/specifications/dependency-specifiers.rst:292 +#: ../source/specifications/dependency-specifiers.rst:301 +msgid "String" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:254 +msgid "``posix``, ``java``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:255 +msgid "``sys_platform``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:256 +msgid ":py:data:`sys.platform`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:258 +msgid "" +"``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " +"from Python3 and \"linux2\" from Python2)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:260 +msgid "``platform_machine``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:261 +msgid ":py:func:`platform.machine()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/platform-compatibility-tags.rst:256 +msgid "``x86_64``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:264 +msgid "``platform_python_implementation``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:265 +msgid ":py:func:`platform.python_implementation()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:267 +msgid "``CPython``, ``Jython``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:268 +msgid "``platform_release``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:269 +msgid ":py:func:`platform.release()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:271 +msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:272 +msgid "``platform_system``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:273 +msgid ":py:func:`platform.system()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:275 +msgid "``Linux``, ``Windows``, ``Java``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:276 +msgid "``platform_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:277 +msgid ":py:func:`platform.version()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:279 +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``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:282 +msgid "``python_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:283 +msgid "``'.'.join(platform.python_version_tuple()[:2])``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:284 +#: ../source/specifications/dependency-specifiers.rst:288 +#: ../source/specifications/dependency-specifiers.rst:296 +msgid ":ref:`Version `" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:285 +msgid "``3.4``, ``2.7``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:286 +msgid "``python_full_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:287 +msgid ":py:func:`platform.python_version()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:289 +#: ../source/specifications/dependency-specifiers.rst:297 +msgid "``3.4.0``, ``3.5.0b1``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:290 +msgid "``implementation_name``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:291 +msgid ":py:data:`sys.implementation.name `" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:293 +msgid "``cpython``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:294 +msgid "``implementation_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:295 +msgid "see definition below" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:298 +msgid "``extra``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:299 +#: ../source/specifications/dependency-specifiers.rst:304 +#: ../source/specifications/dependency-specifiers.rst:309 +msgid "" +"An error except when defined by the context interpreting the specification." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:302 +msgid "``toml``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:303 +#: ../source/specifications/pylock-toml.rst:108 +msgid "``extras``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:306 +#: ../source/specifications/dependency-specifiers.rst:311 +msgid "Set of strings" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:307 +msgid "``{\"toml\"}``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:308 +msgid "``dependency_groups``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:312 +msgid "``{\"test\"}``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:314 +msgid "" +"The ``implementation_version`` marker variable is derived from :py:data:`sys." +"implementation.version `:" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:331 +msgid "" +"This environment markers section, initially defined through :pep:`508`, " +"supersedes the environment markers section in :pep:`345`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:337 +msgid "Complete Grammar" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:339 +msgid "The complete parsley grammar::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:446 +msgid "A test program - if the grammar is in a string ``grammar``:" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:518 +msgid "November 2015: This specification was approved through :pep:`508`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:519 +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 "" + +#: ../source/specifications/dependency-specifiers.rst:524 +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:527 +msgid "" +"April 2025: Added ``extras`` and ``dependency_groups`` for :ref:`lock-file-" +"spec` as approved through :pep:`751`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 +msgid "" +"pip, the recommended installer for Python packages (http://pip.readthedocs." +"org/en/stable/)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:540 +msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:543 +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/direct-url.rst:6 +msgid "Recording the Direct URL Origin of installed distributions" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url.rst:45 +msgid "Example pip commands and their effect on direct_url.json" +msgstr "" + +#: ../source/specifications/direct-url.rst:47 +msgid "Commands that generate a ``direct_url.json``:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:7 +msgid "Direct URL Data Structure" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:55 +msgid "VCS URLs" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:80 +msgid "Archive URLs" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:92 +msgid "These hash names SHOULD always be normalized to be lowercase." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:114 +msgid "Local directories" +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:139 +msgid "Registered VCS" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:151 +msgid "Git" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 +msgid "git" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:167 +msgid "A commit hash (40 hexadecimal characters sha1)." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:178 +msgid "Mercurial" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:181 +msgid "https://www.mercurial-scm.org/" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 +msgid "hg" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:190 +msgid "A tag name, branch name, changeset ID, shortened changeset ID." +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:193 +msgid "A changeset ID (40 hexadecimal characters)." +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:196 +msgid "Bazaar" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:199 +msgid "https://www.breezy-vcs.org/" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 +msgid "bzr" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:208 +msgid "A tag name, branch name, revision id." +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:211 +msgid "A revision id." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:235 +msgid "JSON Schema" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:244 +msgid "Source archive:" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:257 +msgid "Git URL with tag and commit-hash:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/direct-url-data-structure.rst:296 +msgid "" +"January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." +msgstr "" + +#: ../source/specifications/entry-points.rst:5 +msgid "Entry points specification" +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 "" +"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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 as part of :pep:`508` (as ``extras``) and " +"restrictions on values specified in :pep:`685`. For tools writing the file, " +"it is recommended only to insert a space between the object reference and " +"the left square bracket." +msgstr "" + +#: ../source/specifications/entry-points.rst:128 +msgid "Use for scripts" +msgstr "" + +#: ../source/specifications/entry-points.rst:130 +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 "" + +#: ../source/specifications/entry-points.rst:138 +msgid "" +"For instance, the entry point ``mycmd = mymod:main`` would create a command " +"``mycmd`` launching a script like this::" +msgstr "" + +#: ../source/specifications/entry-points.rst:145 +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 "" + +#: ../source/specifications/entry-points.rst:153 +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 "" + +#: ../source/specifications/entry-points.rst:158 +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:166 +msgid "" +"October 2017: This specification was written to formalize the existing entry " +"points feature of setuptools (discussion_)." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:79 +msgid "package" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:102 +msgid "Python-specific package manager" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:127 +msgid "shadow" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:160 +msgid "Marking an interpreter as using an external package manager" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:247 +msgid "Writing to only the target ``sysconfig`` scheme" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:283 +msgid "Guide users towards virtual environments" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:308 +msgid "Keep the marker file in container images" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:317 +msgid "Create separate distro and local directories" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:422 +msgid "``pip install``" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:425 +msgid "``pip install --prefix=/some/path``" +msgstr "" + +#: ../source/specifications/externally-managed-environments.rst:425 +msgid "Calls ``sysconfig.get_preferred_scheme('prefix')``." +msgstr "" + +#: ../source/specifications/externally-managed-environments.rst:428 +msgid "``pip install --user``" +msgstr "" + +#: ../source/specifications/externally-managed-environments.rst:428 +msgid "Calls ``sysconfig.get_preferred_scheme('user')``." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/externally-managed-environments.rst:474 +msgid "June 2022: This specification was approved through :pep:`668`." +msgstr "" + +#: ../source/specifications/file-yanking.rst:5 +msgid "File Yanking" +msgstr "" + +#: ../source/specifications/file-yanking.rst:9 +msgid "This specification was originally defined in :pep:`592`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/file-yanking.rst:81 +msgid "Mirrors" +msgstr "" + +#: ../source/specifications/file-yanking.rst:83 +msgid "Mirrors can generally treat yanked files one of two ways:" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/file-yanking.rst:88 +msgid "" +"They may choose to include yanked files, and additionally mirror the ``data-" +"yanked`` attribute as well." +msgstr "" + +#: ../source/specifications/file-yanking.rst:91 +msgid "" +"Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" +"yanked`` attribute for it." +msgstr "" + +#: ../source/specifications/glob-patterns.rst:3 +msgid "``glob`` patterns" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/glob-patterns.rst:13 +msgid "Valid glob patterns" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/glob-patterns.rst:18 +msgid "" +"Alphanumeric characters, 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 "" + +#: ../source/specifications/glob-patterns.rst:27 +msgid "Path delimiters MUST be the forward slash character (``/``)." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/glob-patterns.rst:40 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/glob-patterns.rst:43 +msgid "Tools consuming glob patterns:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/glob-patterns.rst:61 +msgid "Examples of invalid glob patterns:" +msgstr "" + +#: ../source/specifications/glob-patterns.rst:74 +msgid "Reference implementation in Python" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/glob-patterns.rst:80 +msgid "The code below is as a simple reference implementation:" +msgstr "" + +#: ../source/specifications/index.rst:4 +msgid "PyPA specifications" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:6 +msgid "Index hosted attestations" +msgstr "" + +#: ../source/specifications/index-hosted-attestations.rst:8 +msgid "This specification was originally defined in :pep:`740`." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:22 +msgid "Upload endpoint changes" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:33 +msgid "Attestation objects" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:98 +msgid "" +"Certificates are specified as X.509 certificates, and comply with the " +"profile in :rfc:`5280`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:122 +msgid "The in-toto ``subject`` **MUST** contain only a single subject." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:128 +msgid "The following ``predicateType`` values are supported:" +msgstr "" + +#: ../source/specifications/index-hosted-attestations.rst:130 +msgid "" +"`SLSA Provenance `__: ``https://slsa.dev/" +"provenance/v1``" +msgstr "" + +#: ../source/specifications/index-hosted-attestations.rst:131 +msgid "" +"`PyPI Publish Attestation `__: ``https://docs.pypi.org/attestations/publish/v1``" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:141 +msgid "Provenance objects" +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 "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:169 +msgid "or, as pseudocode:" +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:233 +msgid "All other keys in the publisher object are publisher-specific." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/index-hosted-attestations.rst:293 +msgid "Appendix: Data models for Transparency Log Entries" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/inline-script-metadata.rst:5 +msgid "Inline script metadata" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/inline-script-metadata.rst:15 +msgid "" +"This specification defines a metadata comment block format (loosely inspired " +"by `reStructuredText Directives`__)." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/inline-script-metadata.rst:60 +msgid "" +"This is the canonical regular expression that MAY be used to parse the " +"metadata:" +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 "" + +#: ../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:74 +msgid "script type" +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:76 +msgid "" +"The first type of metadata block is named ``script``, which contains script " +"metadata (dependency data and tool configuration)." +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:79 +msgid "" +"This document MAY include the top-level fields ``dependencies`` and " +"``requires-python``, and MAY optionally include a ``[tool]`` table." +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:82 +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 "" + +#: ../source/specifications/inline-script-metadata.rst:86 +msgid "The top-level fields are:" +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:88 +msgid "" +"``dependencies``: A list of strings that specifies the runtime dependencies " +"of the script. Each entry MUST be a valid :ref:`dependency specifier " +"`." +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:91 +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 "" + +#: ../source/specifications/inline-script-metadata.rst:95 +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 "" + +#: ../source/specifications/inline-script-metadata.rst:102 +msgid "The following is an example of a script with embedded metadata:" +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:125 +msgid "" +"The following is an example of how to read the metadata on Python 3.11 or " +"higher." +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:151 +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 "" + +#: ../source/specifications/inline-script-metadata.rst:182 +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 "" + +#: ../source/specifications/inline-script-metadata.rst:186 +msgid "" +"The following is an example of how to read a stream of arbitrary metadata " +"blocks." +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:205 +#: ../source/specifications/simple-repository-api.rst:914 +msgid "Recommendations" +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:207 +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 "" + +#: ../source/specifications/inline-script-metadata.rst:215 +msgid "" +"October 2023: This specification was conditionally approved through :pep:" +"`723`." +msgstr "" + +#: ../source/specifications/inline-script-metadata.rst:216 +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/license-expression.rst:19 +msgid "A license expression can use the following license identifiers:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/license-expression.rst:32 +msgid "Examples of valid license expressions:" +msgstr "" + +#: ../source/specifications/license-expression.rst:45 +msgid "Examples of invalid license expressions:" +msgstr "" + +#: ../source/specifications/name-normalization.rst:3 +msgid "Names and normalization" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/name-normalization.rst:42 +msgid "``Friendly-Bard``" +msgstr "" + +#: ../source/specifications/name-normalization.rst:43 +msgid "``FRIENDLY-BARD``" +msgstr "" + +#: ../source/specifications/name-normalization.rst:44 +msgid "``friendly.bard``" +msgstr "" + +#: ../source/specifications/name-normalization.rst:45 +msgid "``friendly_bard``" +msgstr "" + +#: ../source/specifications/name-normalization.rst:46 +msgid "``friendly--bard``" +msgstr "" + +#: ../source/specifications/name-normalization.rst:47 +msgid "" +"``FrIeNdLy-._.-bArD`` (a *terrible* way to write a name, but it is valid)" +msgstr "" + +#: ../source/specifications/name-normalization.rst:52 +msgid "" +"September 2015: The specification of name normalized was approved through :" +"pep:`503 <503#normalized-names>`." +msgstr "" + +#: ../source/specifications/name-normalization.rst:54 +msgid "" +"November 2015: The specification of valid names was approved through :pep:" +"`508 <508#names>`." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:16 +msgid "The tag format is ``{python tag}-{abi tag}-{platform tag}``." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:18 +msgid "python tag" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:19 +msgid "'py27', 'cp33'" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:21 +msgid "'cp32dmu', 'none'" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:23 +msgid "'linux_x86_64', 'any'" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:42 +msgid "py: Generic Python (does not require implementation-specific features)" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:43 +msgid "cp: CPython" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:44 +msgid "ip: IronPython" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:45 +msgid "pp: PyPy" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:46 +msgid "jy: Jython" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:48 +msgid "" +"Other Python implementations should use :py:data:`sys.implementation.name " +"`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:66 +msgid "ABI Tag" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:73 +msgid "The CPython stable ABI is ``abi3`` as in the shared library suffix." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:83 +msgid "Platform Tag" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:86 +msgid "Basic platform tags" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:88 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:93 +msgid "win32" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:94 +msgid "linux_i386" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:95 +msgid "linux_x86_64" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:101 +msgid "``manylinux``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:103 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:107 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:112 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:118 +msgid "" +"The following older tags are still supported for backward compatibility:" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:120 +msgid "" +"``manylinux1`` supports glibc 2.5 on ``x86_64`` and ``i686`` architectures." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:121 +msgid "``manylinux2010`` supports glibc 2.12 on ``x86_64`` and ``i686``." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:122 +msgid "" +"``manylinux2014`` supports glibc 2.17 on ``x86_64``, ``i686``, ``aarch64``, " +"``armv7l``, ``ppc64``, ``ppc64le``, and ``s390x``." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:125 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:131 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:136 +msgid "" +"The following table shows the minimum versions of relevant projects to " +"support the various ``manylinux`` standards:" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:140 +msgid "Tool" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:140 +msgid "``manylinux1``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:140 +msgid "``manylinux2010``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:140 +msgid "``manylinux2014``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:140 +msgid "``manylinux_x_y``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:142 +msgid "``>=8.1.0``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:142 +msgid "``>=19.0``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:142 +msgid "``>=19.3``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:142 +msgid "``>=20.3``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "auditwheel" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=1.0.0``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=2.0.0``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=3.0.0``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=3.3.0`` [#]_" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:146 +msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:150 +msgid "``musllinux``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:152 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:157 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:188 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:197 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:202 +msgid "" +"The values of ``x`` and ``y`` correspond to the major and minor version " +"number of the macOS release, respectively. They must both be positive " +"integers, with the ``x`` value being ``>= 10``. 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, ``macosx_11_0_arm64`` " +"indicates compatibility with macOS 11 or later." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:209 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:217 +msgid "``arch``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:217 +msgid "Architectures supported" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +msgid "``universal2``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +msgid "``arm64``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``universal``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``intel``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``i386``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``fat``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``i386``, ``ppc``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +msgid "``fat3``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +msgid "``i386``, ``ppc``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +msgid "``fat64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +msgid "``ppc64``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:227 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:235 +msgid "Android" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:237 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:243 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:250 +msgid "" +"There are 4 `supported ABIs `__. Normalized according to the rules above, they are:" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:258 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:268 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:271 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:277 +msgid "" +"The value of ``arch`` must match the value of :py:func:`platform.machine()` " +"on the system." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:280 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:286 +msgid "" +"The combination of :file:`{arch}_{sdk}` is referred to as the \"multiarch\". " +"There are three possible values for multiarch:" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:289 +msgid "" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:291 +msgid "" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:293 +msgid "``x86_64_iphonesimulator``, for simulators running on x86_64 hardware." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:296 +msgid "Use" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:298 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:304 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:312 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:316 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:322 +msgid "cp33-cp33m-linux_x86_64" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:323 +msgid "cp33-abi3-linux_x86_64" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:324 +msgid "cp3-abi3-linux_x86_64" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:325 +msgid "cp33-none-linux_x86_64*" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:326 +msgid "cp3-none-linux_x86_64*" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:327 +msgid "py33-none-linux_x86_64*" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:328 +msgid "py3-none-linux_x86_64*" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:329 +msgid "cp33-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:330 +msgid "cp3-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:331 +msgid "py33-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:332 +msgid "py3-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:333 +msgid "py32-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:334 +msgid "py31-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:335 +msgid "py30-none-any" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:337 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:341 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:350 +msgid "Compressed Tag Sets" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:352 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:364 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:377 +msgid "What tags are used by default?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:373 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:387 +msgid "" +"What tag do I use if my distribution uses a feature exclusive to the newest " +"version of Python?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:380 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:392 +msgid "Why isn't there a ``.`` in the Python version number?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:390 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:398 +msgid "" +"Why normalise hyphens and other non-alphanumeric characters to underscores?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:395 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:407 +msgid "Why not use special character rather than ``.`` or ``-``?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:401 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:412 +msgid "Who will maintain the registry of abbreviated implementations?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:410 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:417 +msgid "Does the compatibility tag go into METADATA or PKG-INFO?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:415 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:423 +msgid "Why didn't you mention my favorite Python implementation?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:420 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:431 +msgid "" +"Why is the ABI tag (the second tag) sometimes \"none\" in the reference " +"implementation?" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:426 +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 "" + +#: ../source/specifications/platform-compatibility-tags.rst:436 +msgid "" +"February 2013: The original version of this specification was approved " +"through :pep:`425`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:438 +msgid "January 2016: The ``manylinux1`` tag was approved through :pep:`513`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:439 +msgid "April 2018: The ``manylinux2010`` tag was approved through :pep:`571`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:440 +msgid "July 2019: The ``manylinux2014`` tag was approved through :pep:`599`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:441 +msgid "" +"November 2019: The ``manylinux_x_y`` perennial tag was approved through :pep:" +"`600`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:443 +msgid "April 2021: The ``musllinux_x_y`` tag was approved through :pep:`656`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:444 +msgid "December 2023: The tags for iOS were approved through :pep:`730`." +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:445 +msgid "March 2024: The tags for Android were approved through :pep:`738`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/project-status-markers.rst:25 +msgid "" +"Indices **MAY** implement any subset of the status markers specified, as " +"applicable to their needs." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/project-status-markers.rst:32 +msgid "``active``" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/project-status-markers.rst:38 +msgid "" +"The index hosting the project **MUST** allow uploads of new distributions to " +"the project." +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 "" + +#: ../source/specifications/project-status-markers.rst:42 +msgid "Installer semantics: none." +msgstr "" + +#: ../source/specifications/project-status-markers.rst:45 +msgid "``archived``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/project-status-markers.rst:60 +msgid "``quarantined``" +msgstr "" + +#: ../source/specifications/project-status-markers.rst:62 +msgid "" +"Description: The project is considered generally unsafe for use, e.g. due to " +"malware." +msgstr "" + +#: ../source/specifications/project-status-markers.rst:69 +msgid "" +"The index **MUST NOT** offer any distributions of the project for download." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/project-status-markers.rst:78 +msgid "``deprecated``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:11 +msgid "This specification was originally defined in :pep:`751`." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:30 +msgid "" +"The expectation is that services that automatically install from lock files " +"will search for:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:33 +msgid "The lock file with the service's name and doing the default install" +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 "" + +#: ../source/specifications/pylock-toml.rst:35 +msgid "The default install of :file:`pylock.toml`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:53 +msgid "The format of the file is TOML_." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:65 +msgid "``lock-version``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:67 +msgid "**Type**: string; value of ``\"1.0\"``" +msgstr "" + +#: ../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:494 +#: ../source/specifications/pylock-toml.rst:689 +msgid "**Required?**: yes" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:69 +msgid "**Inspiration**: :ref:`core-metadata-metadata-version`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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:469 +#: ../source/specifications/pylock-toml.rst:482 +#: ../source/specifications/pylock-toml.rst:519 +#: ../source/specifications/pylock-toml.rst:674 +#: ../source/specifications/pylock-toml.rst:700 +#: ../source/specifications/pylock-toml.rst:715 +msgid "**Required?**: no" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:85 +#: ../source/specifications/pylock-toml.rst:520 +#: ../source/specifications/pylock-toml.rst:538 +msgid "**Inspiration**: uv_" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:88 +msgid "" +"Tools SHOULD write exclusive/non-overlapping environment markers to ease in " +"understanding." +msgstr "" + +#: ../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:518 +#: ../source/specifications/pylock-toml.rst:551 +#: ../source/specifications/pylock-toml.rst:620 +#: ../source/specifications/pylock-toml.rst:688 +msgid "**Type**: string" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:99 +#: ../source/specifications/pylock-toml.rst:190 +#: ../source/specifications/pylock-toml.rst:256 +#: ../source/specifications/pylock-toml.rst:555 +#: ../source/specifications/pylock-toml.rst:608 +#: ../source/specifications/pylock-toml.rst:624 +msgid "**Inspiration**: PDM_, Poetry_, uv_" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:113 +msgid "" +"The list of :ref:`extras ` supported by this " +"lock file." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:118 +msgid "Tools supporting extras MUST also support dependency groups." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:130 +msgid "``dependency-groups``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:134 +#: ../source/specifications/pylock-toml.rst:701 +#: ../source/specifications/pylock-toml.rst:716 +msgid "**Inspiration**: :ref:`pyproject-tool-table`" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:141 +msgid "Tools supporting dependency groups MUST also support extras." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:152 +msgid "``default-groups``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:156 +msgid "**Inspiration**: Poetry_, PDM_" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:171 +msgid "``created-by``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:175 +msgid "**Inspiration**: Tools with their name in their lock file name" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:176 +msgid "Records the name of the tool used to create the lock file." +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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:186 +msgid "``[[packages]]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:188 +#: ../source/specifications/pylock-toml.rst:254 +#: ../source/specifications/pylock-toml.rst:605 +#: ../source/specifications/pylock-toml.rst:673 +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 "" + +#: ../source/specifications/pylock-toml.rst:203 +msgid "**Inspiration**: :ref:`core-metadata-name`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:204 +msgid "The name of the package :ref:`normalized `." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:210 +msgid "``packages.version``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:214 +msgid "**Inspiration**: :ref:`core-metadata-version`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:227 +msgid "``packages.marker``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:231 +msgid "**Inspiration**: PDM_" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:232 +msgid "" +"The :ref:`environment marker ` " +"which specify when the package should be installed." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:240 +msgid "``packages.requires-python``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:244 +msgid "**Inspiration**: :ref:`core-metadata-requires-python`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:245 +msgid "" +"Holds the :ref:`version-specifiers` for Python version compatibility for the " +"package." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:252 +msgid "``[[packages.dependencies]]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:257 +msgid "" +"Records the other entries in :ref:`pylock-packages` which are direct " +"dependencies of this package." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:272 +msgid "``[packages.vcs]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:274 +#: ../source/specifications/pylock-toml.rst:376 +#: ../source/specifications/pylock-toml.rst:434 +#: ../source/specifications/pylock-toml.rst:535 +#: ../source/specifications/pylock-toml.rst:699 +#: ../source/specifications/pylock-toml.rst:714 +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 "" + +#: ../source/specifications/pylock-toml.rst:278 +msgid "**Inspiration**: :ref:`direct-url-data-structure`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:279 +msgid "" +"Record the version control system details for the :ref:`source tree ` it contains." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:284 +msgid "Tools MAY choose to only support a subset of the available VCS types." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:294 +msgid "``packages.vcs.type``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:296 +msgid "" +"**Type**: string; supported values specified in :ref:`direct-url-data-" +"structure-registered-vcs`" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:309 +msgid "**Required?**: if :ref:`pylock-packages-vcs-path` is not specified" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:311 +msgid "The URL_ to the source tree." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:317 +msgid "``packages.vcs.path``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:320 +msgid "**Required?**: if :ref:`pylock-packages-vcs-url` is not specified" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:322 +msgid "The path to the local directory of the source tree." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:323 +msgid "" +"If a relative path is used it MUST be relative to the location of this file." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:324 +msgid "" +"If the path is relative it MAY use POSIX-style path separators explicitly " +"for portability." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:331 +msgid "``packages.vcs.requested-revision``" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:345 +msgid "``packages.vcs.commit-id``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:350 +msgid "The exact commit/revision number that is to be installed." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:359 +msgid "``packages.vcs.subdirectory``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:363 +msgid "**Inspiration**: :ref:`direct-url-data-structure-subdirectories`" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:368 +msgid "The path MUST be relative to the root of the source tree structure." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:374 +msgid "``[packages.directory]``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:381 +msgid "" +"Record the local directory details for the :ref:`source tree ` it contains." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:384 +msgid "" +"Tools MAY choose to not support local directories, both from a locking and/" +"or installation perspective." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:394 +msgid "``packages.directory.path``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:399 +msgid "The local directory where the source tree is." +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 "" + +#: ../source/specifications/pylock-toml.rst:401 +msgid "" +"If the path is relative it MAY use POSIX-style path separators for " +"portability." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:408 +msgid "``packages.directory.editable``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:410 +msgid "**Type**: boolean" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:411 +msgid "**Required?**: no; defaults to ``false``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:413 +msgid "" +"A flag representing whether the source tree was an editable install at lock " +"time." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:424 +msgid "``packages.directory.subdirectory``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:426 +#: ../source/specifications/pylock-toml.rst:510 +msgid "See :ref:`pylock-packages-vcs-subdirectory`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:432 +msgid "``[packages.archive]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:436 +msgid "**Inspiration**: :ref:`direct-url-data-structure-archive`" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:440 +msgid "" +"Tools MAY choose to not support archive files, both from a locking and/or " +"installation perspective." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pylock-toml.rst:450 +msgid "``packages.archive.url``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:452 +msgid "See :ref:`pylock-packages-vcs-url`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:458 +msgid "``packages.archive.path``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:460 +msgid "See :ref:`pylock-packages-vcs-path`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:466 +msgid "``packages.archive.size``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:468 +msgid "**Type**: integer" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:470 +msgid "**Inspiration**: uv_, :ref:`simple-repository-api`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:471 +msgid "The size of the archive file." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:472 +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:479 +msgid "``packages.archive.upload-time``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:481 +msgid "**Type**: datetime" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:483 +msgid "**Inspiration**: :ref:`simple-repository-api`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:484 +msgid "The time the file was uploaded." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:485 +msgid "The date and time MUST be recorded in UTC." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:491 +msgid "``[packages.archive.hashes]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:493 +msgid "**Type**: Table of strings" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:495 +msgid "**Inspiration**: PDM_, Poetry_, uv_, :ref:`simple-repository-api`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:496 +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 "" + +#: ../source/specifications/pylock-toml.rst:498 +msgid "The table MUST contain at least one entry." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:499 +msgid "Hash algorithm keys SHOULD be lowercase." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:500 +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 "" + +#: ../source/specifications/pylock-toml.rst:508 +msgid "``packages.archive.subdirectory``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:516 +msgid "``packages.index``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:521 +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 "" + +#: ../source/specifications/pylock-toml.rst:523 +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 "" + +#: ../source/specifications/pylock-toml.rst:526 +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 "" + +#: ../source/specifications/pylock-toml.rst:533 +msgid "``[packages.sdist]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:536 +#: ../source/specifications/pylock-toml.rst:606 +msgid "" +"**Required?**: no; mutually-exclusive with :ref:`pylock-packages-vcs`, :ref:" +"`pylock-packages-directory`, and :ref:`pylock-packages-archive`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:539 +msgid "Details of a :ref:`source-distribution-format-sdist` for the package." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:541 +msgid "" +"Tools MAY choose to not support sdist files, both from a locking and/or " +"installation perspective." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:543 +msgid "" +"Tools SHOULD provide a way for users to opt in/out of using sdist files." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:549 +msgid "``packages.sdist.name``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:552 +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 "" + +#: ../source/specifications/pylock-toml.rst:556 +msgid "The file name of the :ref:`source-distribution-format-sdist` file." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:562 +msgid "``packages.sdist.upload-time``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:564 +#: ../source/specifications/pylock-toml.rst:633 +msgid "See :ref:`pylock-packages-archive-upload-time`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:570 +msgid "``packages.sdist.url``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:572 +#: ../source/specifications/pylock-toml.rst:641 +msgid "See :ref:`pylock-packages-archive-url`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:578 +msgid "``packages.sdist.path``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:580 +#: ../source/specifications/pylock-toml.rst:649 +msgid "See :ref:`pylock-packages-archive-path`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:586 +msgid "``packages.sdist.size``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:588 +#: ../source/specifications/pylock-toml.rst:657 +msgid "See :ref:`pylock-packages-archive-size`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:594 +msgid "``packages.sdist.hashes``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:596 +#: ../source/specifications/pylock-toml.rst:665 +msgid "See :ref:`pylock-packages-archive-hashes`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:603 +msgid "``[[packages.wheels]]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:609 +msgid "" +"For recording the wheel files as specified by :ref:`binary-distribution-" +"format` for the package." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:611 +msgid "" +"Tools MUST support wheel files, both from a locking and installation " +"perspective." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:618 +msgid "``packages.wheels.name``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:621 +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 "" + +#: ../source/specifications/pylock-toml.rst:625 +msgid "The file name of the :ref:`binary-distribution-format` file." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:631 +msgid "``packages.wheels.upload-time``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:639 +msgid "``packages.wheels.url``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:647 +msgid "``packages.wheels.path``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:655 +msgid "``packages.wheels.size``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:663 +msgid "``packages.wheels.hashes``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:671 +msgid "``[[packages.attestation-identities]]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:675 +#: ../source/specifications/pylock-toml.rst:690 +msgid "**Inspiration**: :ref:`provenance-object`" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:676 +msgid "" +"A recording of the attestations for **any** file recorded for this package." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:677 +msgid "If available, tools SHOULD include the attestation identities found." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:678 +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 "" + +#: ../source/specifications/pylock-toml.rst:686 +msgid "``packages.attestation-identities.kind``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:691 +msgid "The unique identity of the Trusted Publisher." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:697 +msgid "``[packages.tool]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:702 +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 "" + +#: ../source/specifications/pylock-toml.rst:705 +msgid "" +"Data recorded in the table MUST be disposable (i.e. it MUST NOT affect " +"installation)." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:712 +msgid "``[tool]``" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:717 +msgid "See :ref:`pylock-packages-tool`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:731 +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 "" + +#: ../source/specifications/pylock-toml.rst:735 +msgid "" +"Gather the extras and dependency groups to install and set ``extras`` and " +"``dependency_groups`` for marker evaluation, respectively." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:738 +msgid "``extras`` SHOULD be set to the empty set by default." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:739 +msgid "" +"``dependency_groups`` SHOULD be the set created from :ref:`pylock-default-" +"groups` by default." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:742 +msgid "" +"Check if the metadata version specified by :ref:`pylock-lock-version` is " +"supported; an error or warning MUST be raised as appropriate." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:744 +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 "" + +#: ../source/specifications/pylock-toml.rst:747 +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 "" + +#: ../source/specifications/pylock-toml.rst:750 +msgid "For each package listed in :ref:`pylock-packages`:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:752 +msgid "" +"If :ref:`pylock-packages-marker` is specified, check if it is satisfied; if " +"it isn't, skip to the next package." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:754 +msgid "" +"If :ref:`pylock-packages-requires-python` is specified, check if it is " +"satisfied; an error MUST be raised if it isn't." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:756 +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:758 +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:761 +msgid "Add the package to the set of packages to install." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:763 +msgid "For each package to be installed:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:765 +msgid "If :ref:`pylock-packages-vcs` is set:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:767 +msgid "" +"Clone the repository to the commit ID specified in :ref:`pylock-packages-vcs-" +"commit-id`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:769 +msgid "" +":ref:`Build ` the package, " +"respecting :ref:`pylock-packages-vcs-subdirectory`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:771 +#: ../source/specifications/pylock-toml.rst:777 +#: ../source/specifications/pylock-toml.rst:786 +#: ../source/specifications/pylock-toml.rst:806 +#: ../source/specifications/pylock-toml.rst:821 +msgid ":ref:`Install `." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:773 +msgid "Else if :ref:`pylock-packages-directory` is set:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:775 +msgid "" +":ref:`Build ` the package, " +"respecting :ref:`pylock-packages-directory-subdirectory`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:779 +msgid "Else if :ref:`pylock-packages-archive` is set:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:781 +#: ../source/specifications/pylock-toml.rst:811 +msgid "Get the file." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:782 +msgid "" +"Validate using :ref:`pylock-packages-archive-size` and :ref:`pylock-packages-" +"archive-hashes`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:784 +msgid "" +":ref:`Build ` the package, " +"respecting :ref:`pylock-packages-archive-subdirectory`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:788 +msgid "Else if there are entries for :ref:`pylock-packages-wheels`:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:790 +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 "" + +#: ../source/specifications/pylock-toml.rst:794 +msgid "Get the file:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:796 +msgid "If :ref:`pylock-packages-wheels-path` is set, use it." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:797 +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 "" + +#: ../source/specifications/pylock-toml.rst:804 +msgid "" +"Validate using :ref:`pylock-packages-wheels-size` and :ref:`pylock-packages-" +"wheels-hashes`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:808 +msgid "" +"Else if no :ref:`pylock-packages-wheels` file is found or :ref:`pylock-" +"packages-sdist` is solely set:" +msgstr "" + +#: ../source/specifications/pylock-toml.rst:813 +msgid "If :ref:`pylock-packages-sdist-path` is set, use it." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:814 +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 "" + +#: ../source/specifications/pylock-toml.rst:818 +msgid "" +"Validate using :ref:`pylock-packages-sdist-size` and :ref:`pylock-packages-" +"sdist-hashes`." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:820 +msgid ":ref:`Build ` the package." +msgstr "" + +#: ../source/specifications/pylock-toml.rst:828 +msgid "April 2025: Initial version, approved via :pep:`751`." +msgstr "" + +#: ../source/specifications/pypirc.rst:6 +msgid "The :file:`.pypirc` file" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/pypirc.rst:13 +msgid "The format (originally defined by the :ref:`distutils` package) is:" +msgstr "" + +#: ../source/specifications/pypirc.rst:32 +msgid "" +"The ``distutils`` section defines an ``index-servers`` field that lists the " +"name of all sections describing a repository." +msgstr "" + +#: ../source/specifications/pypirc.rst:35 +msgid "Each section describing a repository defines three fields:" +msgstr "" + +#: ../source/specifications/pypirc.rst:37 +msgid "``repository``: The URL of the repository." +msgstr "" + +#: ../source/specifications/pypirc.rst:38 +msgid "``username``: The registered username on the repository." +msgstr "" + +#: ../source/specifications/pypirc.rst:39 +msgid "``password``: The password that will used to authenticate the username." +msgstr "" + +#: ../source/specifications/pypirc.rst:43 +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 "" + +#: ../source/specifications/pypirc.rst:47 +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 "" + +#: ../source/specifications/pypirc.rst:57 +msgid "Common configurations" +msgstr "" + +#: ../source/specifications/pypirc.rst:61 +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 "" + +#: ../source/specifications/pypirc.rst:65 +msgid "" +"Twine's default configuration mimics a :file:`.pypirc` with repository " +"sections for PyPI and TestPyPI:" +msgstr "" + +#: ../source/specifications/pypirc.rst:81 +msgid "" +"Twine will add additional configuration from :file:`$HOME/.pypirc`, the " +"command line, and environment variables to this default configuration." +msgstr "" + +#: ../source/specifications/pypirc.rst:85 +msgid "Using a PyPI token" +msgstr "" + +#: ../source/specifications/pypirc.rst:87 +msgid "" +"To set your `API token`_ for PyPI, you can create a :file:`$HOME/.pypirc` " +"similar to:" +msgstr "" + +#: ../source/specifications/pypirc.rst:96 +msgid "" +"For :ref:`TestPyPI `, add a ``[testpypi]`` section, using " +"the API token from your TestPyPI account." +msgstr "" + +#: ../source/specifications/pypirc.rst:102 +msgid "Using another package index" +msgstr "" + +#: ../source/specifications/pypirc.rst:104 +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 "" + +#: ../source/specifications/pypirc.rst:131 +msgid "" +"Instead of using the ``password`` field, consider saving your API tokens and " +"passwords securely using `keyring`_ (which is installed by Twine):" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:6 +msgid "``pyproject.toml`` specification" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/pyproject-toml.rst:17 +msgid "This specification was originally defined in :pep:`518` and :pep:`621`." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:19 +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 "" + +#: ../source/specifications/pyproject-toml.rst:29 +msgid "Declaring build system dependencies: the ``[build-system]`` table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:31 +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 "" + +#: ../source/specifications/pyproject-toml.rst:37 +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 "" + +#: ../source/specifications/pyproject-toml.rst:44 +msgid "" +"An example ``[build-system]`` table for a project built with ``setuptools`` " +"is:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:53 +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 "" + +#: ../source/specifications/pyproject-toml.rst:56 +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 "" + +#: ../source/specifications/pyproject-toml.rst:65 +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 "" + +#: ../source/specifications/pyproject-toml.rst:103 +msgid "Declaring project metadata: the ``[project]`` table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:105 +msgid "" +"The ``[project]`` table specifies the project's :ref:`core metadata `." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:107 +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 "" + +#: ../source/specifications/pyproject-toml.rst:115 +msgid "" +"The lack of a ``[project]`` table implicitly means the :term:`build backend " +"` will dynamically provide all keys." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:118 +msgid "The only keys required to be statically defined are:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:122 +msgid "" +"The keys which are required but may be specified *either* statically or " +"listed as dynamic are:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:127 +msgid "" +"All other keys are considered optional and may be specified statically, " +"listed as dynamic, or left unspecified." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:130 +msgid "The complete list of keys allowed in the ``[project]`` table are:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:132 +msgid "``authors``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:134 +msgid "``dependencies``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:136 +#: ../source/specifications/pyproject-toml.rst:572 +msgid "``dynamic``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:137 +msgid "``entry-points``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:138 +msgid "``gui-scripts``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 +msgid "``optional-dependencies``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 +msgid "TOML_ type: string" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:160 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Name `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:163 +msgid "The name of the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:165 +msgid "" +"Tools SHOULD :ref:`normalize ` this name, as soon as it " +"is read for internal consistency." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:175 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Version " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:178 +msgid "" +"The version of the project, as defined in the :ref:`Version specifier " +"specification `." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:181 +msgid "Users SHOULD prefer to specify already-normalized versions." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:190 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Summary " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:193 +msgid "" +"The summary description of the project in one line. Tools MAY error if this " +"includes multiple lines." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:202 +msgid "TOML_ type: string or table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:203 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Description " +"` and :ref:`Description-Content-Type `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:207 +msgid "The full description of the project (i.e. the README)." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:209 +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 PEP, they 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 "" + +#: ../source/specifications/pyproject-toml.rst:220 +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 "" + +#: ../source/specifications/pyproject-toml.rst:227 +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 "" + +#: ../source/specifications/pyproject-toml.rst:244 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Python `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The Python version requirements of the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:256 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:259 +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 "" + +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 +msgid "Legacy specification" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:273 +msgid "TOML_ type: table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:274 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:277 +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 "" + +#: ../source/specifications/pyproject-toml.rst:284 +msgid "" +"The table subkeys were deprecated by :pep:`639` in favor of the string value." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 +msgid "TOML_ type: array of strings" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:295 +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 "" + +#: ../source/specifications/pyproject-toml.rst:301 +msgid "" +"The strings MUST contain valid glob patterns, as specified in :doc:`/" +"specifications/glob-patterns`." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:304 +msgid "" +"Patterns are relative to the directory containing :file:`pyproject.toml`," +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:306 +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 "" + +#: ../source/specifications/pyproject-toml.rst:309 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:311 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:313 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:316 +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 "" + +#: ../source/specifications/pyproject-toml.rst:330 +msgid "TOML_ type: Array of inline tables with string keys and values" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:331 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" +"`Maintainer `, and :ref:`Maintainer-email `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:337 +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 "" + +#: ../source/specifications/pyproject-toml.rst:342 +msgid "" +"The \"maintainers\" key is similar to \"authors\" in that its exact meaning " +"is open to interpretation." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:345 +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 "" + +#: ../source/specifications/pyproject-toml.rst:352 +msgid "" +"Using the data to fill in :ref:`core metadata ` is as follows:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:355 +msgid "" +"If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:358 +msgid "" +"If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:362 +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 "" + +#: ../source/specifications/pyproject-toml.rst:366 +msgid "Multiple values should be separated by commas." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:375 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Keywords " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:378 +msgid "The keywords for the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:387 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Classifier " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:390 +msgid "Trove classifiers which apply to the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:392 +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 "" + +#: ../source/specifications/pyproject-toml.rst:404 +msgid "TOML_ type: table with keys and values of strings" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:405 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Project-URL " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:408 +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 "" + +#: ../source/specifications/pyproject-toml.rst:418 +msgid "Entry points" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:420 +msgid "" +"TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " +"``[project.entry-points]``)" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:422 +msgid ":ref:`Entry points specification `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:424 +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 "" + +#: ../source/specifications/pyproject-toml.rst:430 +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 "" + +#: ../source/specifications/pyproject-toml.rst:434 +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 "" + +#: ../source/specifications/pyproject-toml.rst:440 +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 "" + +#: ../source/specifications/pyproject-toml.rst:453 +msgid "" +"TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " +"values of arrays of :pep:`508` strings (``optional-dependencies``)" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:456 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Dist ` and :ref:`Provides-Extra `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:460 +msgid "The (optional) dependencies of the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:462 +msgid "" +"For ``dependencies``, it is a key whose value is an array of strings. Each " +"string represents a dependency of the project and MUST be formatted as a " +"valid :pep:`508` string. Each string maps directly to a :ref:`Requires-Dist " +"` entry." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:467 +msgid "" +"For ``optional-dependencies``, it is a table where each key specifies an " +"extra and whose value is an array of strings. The strings of the arrays must " +"be valid :pep:`508` strings. 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 "" + +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 +msgid "TOML_ type: array of string" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:575 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Dynamic " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:578 +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 "" + +#: ../source/specifications/pyproject-toml.rst:584 +msgid "" +"A build back-end MUST honour statically-specified metadata (which means the " +"metadata did not list the key in ``dynamic``)." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:586 +msgid "" +"A build back-end MUST raise an error if the metadata specifies ``name`` in " +"``dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:588 +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 "" + +#: ../source/specifications/pyproject-toml.rst:593 +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 "" + +#: ../source/specifications/pyproject-toml.rst:597 +msgid "" +"Build back-ends MUST raise an error if the metadata specifies a key " +"statically as well as being listed in ``dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:599 +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 "" + +#: ../source/specifications/pyproject-toml.rst:603 +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 "" + +#: ../source/specifications/pyproject-toml.rst:613 +msgid "Arbitrary tool configuration: the ``[tool]`` table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:615 +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 "" + +#: ../source/specifications/pyproject-toml.rst:621 +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 "" + +#: ../source/specifications/pyproject-toml.rst:632 +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 "" + +#: ../source/specifications/pyproject-toml.rst:636 +msgid "" +"November 2020: The specification of the ``[project]`` table was approved " +"through :pep:`621`." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:639 +msgid "" +"December 2024: The ``license`` key was redefined, the ``license-files`` key " +"was added and ``License::`` classifiers were deprecated through :pep:`639`." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:56 +msgid "" +"This ``.dist-info`` directory may contain the following files, described in " +"detail below:" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:59 +msgid "``METADATA``: contains project metadata" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:60 +msgid "``RECORD``: records the list of installed files." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:61 +msgid "" +"``INSTALLER``: records the name of the tool used to install the project." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:62 +msgid "``entry_points.txt``: see :ref:`entry-points` for details" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:63 +msgid "``direct_url.json``: see :ref:`direct-url` for details" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directories, " +"described in detail below:" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:73 +msgid ":file:`sboms/`: contains Software Bill-of-Materials files (SBOMs)." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:89 +msgid "The METADATA file" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:100 +msgid "The RECORD file" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:105 +msgid "" +"The CSV dialect must be readable with the default ``reader`` of Python's " +"``csv`` module:" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:110 +msgid "line terminator: either ``\\r\\n`` or ``\\n``." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:146 +msgid "Here is an example snippet of a possible ``RECORD`` file::" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:181 +msgid "The INSTALLER file" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:189 +msgid "The file can be terminated by zero or more ASCII whitespace characters." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:191 +msgid "Here are examples of two possible ``INSTALLER`` files::" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:206 +msgid "The entry_points.txt file" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:213 +msgid "Its detailed specification is at :ref:`entry-points`." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:217 +msgid "The direct_url.json file" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:225 +msgid "Its detailed specification is at :ref:`direct-url`." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:229 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:240 +msgid "The :file:`sboms/` subdirectory" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/recording-installed-packages.rst:286 +msgid "" +"September 2020: Various amendments and clarifications were approved through :" +"pep:`627`." +msgstr "" + +#: ../source/specifications/schemas/index.rst:4 +msgid "PyPA schemas" +msgstr "" + +#: ../source/specifications/schemas/index.rst:6 +msgid "`direct_url.json `_" +msgstr "" + +#: ../source/specifications/schemas/index.rst:7 +msgid "`build-details.json `_" +msgstr "" + +#: ../source/specifications/schemas/index.rst:8 +msgid "`pylock.toml `_" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/section-installation-metadata.rst:3 +msgid "Package Installation Metadata" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/section-reproducible-environments.rst:3 +msgid "Reproducible Environments" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:6 +msgid "Simple repository API" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/simple-repository-api.rst:21 +msgid "Base API" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/simple-repository-api.rst:50 +msgid "Versioning PyPI's Simple API" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/simple-repository-api.rst:89 +msgid "API Version History" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/simple-repository-api.rst:95 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/simple-repository-api.rst:98 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:99 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:100 +msgid "API version 1.4: Added status markers, declared with :pep:`792`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "Clients" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/simple-repository-api.rst:121 +msgid "HTML Serialization" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:125 +msgid "" +"The following constraints apply to all HTML serialized responses described " +"in this spec:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:128 +msgid "All HTML responses **MUST** be a valid HTML5 document." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:129 +msgid "" +"HTML responses **MAY** contain one or more ``meta`` tags in the ```` " +"section. The semantics of these tags are defined below." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:133 +#: ../source/specifications/simple-repository-api.rst:428 +msgid "Project List" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:135 +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 "" + +#: ../source/specifications/simple-repository-api.rst:139 +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 "" + +#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:473 +msgid "Project Detail" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:158 +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 "" + +#: ../source/specifications/simple-repository-api.rst:164 +msgid "" +"For example, a project named \"HolyGrail\" would have a URL like ``/" +"holygrail/``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:167 +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 "" + +#: ../source/specifications/simple-repository-api.rst:172 +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 "" + +#: ../source/specifications/simple-repository-api.rst:177 +msgid "" +"In addition to the above, the following constraints are placed on the API:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:179 +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 "" + +#: ../source/specifications/simple-repository-api.rst:183 +msgid "" +"URLs may be either absolute or relative as long as they point to the correct " +"location." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:186 +msgid "" +"There are no constraints on where the files must be hosted relative to the " +"repository." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:189 +msgid "" +"There may be any other HTML elements on the API pages as long as the " +"required anchor elements exist." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:192 +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 "" + +#: ../source/specifications/simple-repository-api.rst:197 +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 "" + +#: ../source/specifications/simple-repository-api.rst:202 +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 "" + +#: ../source/specifications/simple-repository-api.rst:208 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:211 +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 "" + +#: ../source/specifications/simple-repository-api.rst:217 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:220 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:225 +msgid "" +"``data-dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``data-core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:228 +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 "" + +#: ../source/specifications/simple-repository-api.rst:232 +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 "" + +#: ../source/specifications/simple-repository-api.rst:242 +msgid "" +"In the attribute value, < and > have to be HTML encoded as ``<`` and " +"``>``, respectively." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:245 +msgid "" +"A repository **MAY** include a ``data-yanked`` attribute on a file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:247 +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 "" + +#: ../source/specifications/simple-repository-api.rst:253 +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 "" + +#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:601 +msgid "" +"The semantics of how tools should handle yanked files is described in :ref:" +"`file-yanking`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:261 +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 "" + +#: ../source/specifications/simple-repository-api.rst:268 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:272 +msgid "" +"The format of the linked provenance is defined in :ref:`index-hosted-" +"attestations`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:274 +msgid "" +"A repository **MAY** include ``pypi:project-status`` and ``pypi:project-" +"status-reason`` meta tags on the response itself." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:277 +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 "" + +#: ../source/specifications/simple-repository-api.rst:283 +#: ../source/specifications/simple-repository-api.rst:493 +msgid "" +"The set of valid project status markers and their semantics is described in :" +"ref:`project-status-markers`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:288 +msgid "" +"The ``pypi:project-status`` and ``pypi:project-status-reason`` meta tags " +"were added with API version 1.4." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:294 +msgid "Serve Distribution Metadata in the Simple Repository API" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:296 +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 "" + +#: ../source/specifications/simple-repository-api.rst:302 +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 "" + +#: ../source/specifications/simple-repository-api.rst:311 +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 "" + +#: ../source/specifications/simple-repository-api.rst:319 +msgid "Backwards Compatibility" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:321 +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 "" + +#: ../source/specifications/simple-repository-api.rst:325 +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 "" + +#: ../source/specifications/simple-repository-api.rst:334 +msgid "JSON-based Simple API for Python Package Indexes" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:336 +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 "" + +#: ../source/specifications/simple-repository-api.rst:341 +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 "" + +#: ../source/specifications/simple-repository-api.rst:351 +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 "" + +#: ../source/specifications/simple-repository-api.rst:358 +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 "" + +#: ../source/specifications/simple-repository-api.rst:364 +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 "" + +#: ../source/specifications/simple-repository-api.rst:368 +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 "" + +#: ../source/specifications/simple-repository-api.rst:372 +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 "" + +#: ../source/specifications/simple-repository-api.rst:376 +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 "" + +#: ../source/specifications/simple-repository-api.rst:382 +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 "" + +#: ../source/specifications/simple-repository-api.rst:390 +msgid "JSON Serialization" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:392 +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 "" + +#: ../source/specifications/simple-repository-api.rst:396 +msgid "" +"The following constraints apply to all JSON serialized responses described " +"in this spec:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:399 +msgid "" +"All JSON responses will *always* be a JSON object rather than an array or " +"other type." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:402 +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 "" + +#: ../source/specifications/simple-repository-api.rst:407 +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 "" + +#: ../source/specifications/simple-repository-api.rst:410 +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 "" + +#: ../source/specifications/simple-repository-api.rst:413 +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 "" + +#: ../source/specifications/simple-repository-api.rst:419 +msgid "" +"All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:422 +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:430 +msgid "" +"The root URL ``/`` for this spec (which represents the base URL) will be a " +"JSON encoded dictionary which has a two keys:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:433 +msgid "" +"``projects``: An array where each entry is a dictionary with a single key, " +"``name``, which represents string of the project name." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:434 +#: ../source/specifications/simple-repository-api.rst:484 +msgid "" +"``meta``: The general response metadata as `described earlier `__." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:436 +#: ../source/specifications/simple-repository-api.rst:632 +msgid "As an example:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:453 +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 "" + +#: ../source/specifications/simple-repository-api.rst:463 +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 "" + +#: ../source/specifications/simple-repository-api.rst:475 +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 "" + +#: ../source/specifications/simple-repository-api.rst:480 +msgid "" +"This URL must respond with a JSON encoded dictionary that has four keys:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:482 +msgid "``name``: The normalized name of the project." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:483 +msgid "" +"``files``: A list of dictionaries, each one representing an individual file." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:486 +msgid "" +"In addition to the general response metadata, the project detail ``meta`` " +"dictionary **MAY** also include the following:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:489 +msgid "" +"``project-status``: If present, this **MUST** be a valid project status " +"marker." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:498 +msgid "The ``project-status`` key was added with API version 1.4." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:500 +msgid "" +"``project-status-reason``: If present, this **MUST** be an arbitrary string " +"description of the project status." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:505 +msgid "The ``project-status-reason`` key was added with API version 1.4." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:507 +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 "" + +#: ../source/specifications/simple-repository-api.rst:514 +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 "" + +#: ../source/specifications/simple-repository-api.rst:521 +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 "" + +#: ../source/specifications/simple-repository-api.rst:529 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:531 +msgid "Each individual file dictionary has the following keys:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:533 +msgid "``filename``: The filename that is being represented." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:534 +msgid "``url``: The URL that the file can be fetched from." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:535 +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 "" + +#: ../source/specifications/simple-repository-api.rst:540 +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 "" + +#: ../source/specifications/simple-repository-api.rst:544 +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 "" + +#: ../source/specifications/simple-repository-api.rst:549 +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 "" + +#: ../source/specifications/simple-repository-api.rst:555 +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 "" + +#: ../source/specifications/simple-repository-api.rst:558 +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 "" + +#: ../source/specifications/simple-repository-api.rst:566 +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 "" + +#: ../source/specifications/simple-repository-api.rst:570 +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 "" + +#: ../source/specifications/simple-repository-api.rst:574 +msgid "" +"It is recommended that servers make the hashes of the metadata file " +"available if possible." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:577 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:579 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:584 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:587 +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 "" + +#: ../source/specifications/simple-repository-api.rst:593 +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 "" + +#: ../source/specifications/simple-repository-api.rst:604 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:608 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:610 +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 "" + +#: ../source/specifications/simple-repository-api.rst:614 +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 "" + +#: ../source/specifications/simple-repository-api.rst:621 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:623 +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 "" + +#: ../source/specifications/simple-repository-api.rst:630 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:668 +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 "" + +#: ../source/specifications/simple-repository-api.rst:677 +msgid "Content-Types" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:679 +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 "" + +#: ../source/specifications/simple-repository-api.rst:683 +msgid "The structure of this content type will be:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:689 +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 "" + +#: ../source/specifications/simple-repository-api.rst:694 +msgid "Which means that for the existing 1.0 API, the content types would be:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:696 +msgid "**JSON:** ``application/vnd.pypi.simple.v1+json``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:697 +msgid "**HTML:** ``application/vnd.pypi.simple.v1+html``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:699 +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 "" + +#: ../source/specifications/simple-repository-api.rst:704 +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 "" + +#: ../source/specifications/simple-repository-api.rst:711 +msgid "Version + Format Selection" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:713 +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 "" + +#: ../source/specifications/simple-repository-api.rst:718 +msgid "" +"To enable this, this spec standardizes on the use of HTTP's `Server-Driven " +"Content Negotiation `_." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:721 +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:724 +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 "" + +#: ../source/specifications/simple-repository-api.rst:726 +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 "" + +#: ../source/specifications/simple-repository-api.rst:729 +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 "" + +#: ../source/specifications/simple-repository-api.rst:733 +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:735 +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 "" + +#: ../source/specifications/simple-repository-api.rst:738 +msgid "" +"Return a HTTP ``300 Multiple Choices`` response that contains a list of all " +"of the possible responses that could have been chosen." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:740 +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:743 +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:748 +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 "" + +#: ../source/specifications/simple-repository-api.rst:755 +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 "" + +#: ../source/specifications/simple-repository-api.rst:762 +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 "" + +#: ../source/specifications/simple-repository-api.rst:766 +msgid "``$type/$subtype``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:767 +msgid "``$type/*``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:768 +msgid "``*/*``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:770 +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 "" + +#: ../source/specifications/simple-repository-api.rst:774 +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 "" + +#: ../source/specifications/simple-repository-api.rst:781 +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 "" + +#: ../source/specifications/simple-repository-api.rst:787 +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:791 +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 "" + +#: ../source/specifications/simple-repository-api.rst:798 +msgid "An example of how a client can operate would look like:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:849 +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 "" + +#: ../source/specifications/simple-repository-api.rst:855 +msgid "Alternative Negotiation Mechanisms" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:857 +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 "" + +#: ../source/specifications/simple-repository-api.rst:865 +msgid "URL Parameter" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:867 +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 "" + +#: ../source/specifications/simple-repository-api.rst:870 +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 "" + +#: ../source/specifications/simple-repository-api.rst:874 +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 "" + +#: ../source/specifications/simple-repository-api.rst:879 +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:882 +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 "" + +#: ../source/specifications/simple-repository-api.rst:891 +msgid "Endpoint Configuration" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:893 +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:897 +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:901 +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 "" + +#: ../source/specifications/simple-repository-api.rst:908 +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 "" + +#: ../source/specifications/simple-repository-api.rst:916 +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:920 +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 "" + +#: ../source/specifications/simple-repository-api.rst:925 +msgid "It is recommended that servers:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:927 +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 "" + +#: ../source/specifications/simple-repository-api.rst:931 +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 "" + +#: ../source/specifications/simple-repository-api.rst:936 +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 "" + +#: ../source/specifications/simple-repository-api.rst:939 +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 "" + +#: ../source/specifications/simple-repository-api.rst:945 +msgid "It is recommended that clients:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:947 +msgid "" +"Support all 3 content types described in this spec, using server-driven " +"content negotiation, for as long as they reasonably can." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:950 +msgid "" +"When constructing an ``Accept`` header, include all of the content types " +"that you support." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:953 +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 "" + +#: ../source/specifications/simple-repository-api.rst:959 +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 "" + +#: ../source/specifications/simple-repository-api.rst:963 +msgid "" +"Explicitly select what versions they are looking for, rather than using the " +"``latest`` meta version during normal operation." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:966 +msgid "" +"Check the ``Content-Type`` of the response and ensure it matches something " +"that you were expecting." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:974 +msgid "September 2015: initial form of the HTML format, in :pep:`503`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:975 +msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:976 +msgid "May 2019: \"yank\" support, in :pep:`592`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:977 +msgid "" +"July 2020: API versioning convention and metadata, and declaring the HTML " +"format as API v1, in :pep:`629`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:979 +msgid "" +"May 2021: providing package metadata independently from a package, in :pep:" +"`658`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:981 +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 "" + +#: ../source/specifications/simple-repository-api.rst:983 +msgid "" +"October 2022: project versions and file size and upload-time in the JSON " +"format, in :pep:`700`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:985 +msgid "" +"June 2023: renaming the field which provides package metadata independently " +"from a package, in :pep:`714`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:987 +msgid "" +"November 2024: provenance metadata in the HTML and JSON formats, in :pep:" +"`740`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:988 +msgid "" +"July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:989 +msgid "" +"July 2025: layout changes (dedicated page for file yanking, introduce " +"concepts before API details)" +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:6 +msgid "Source distribution format" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:21 +msgid "Source distributions are also known as *sdists* for short." +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:26 +msgid "Source trees" +msgstr "" + +#: ../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/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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:77 +msgid "" +"The tarball should 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 "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:91 +msgid "Unpacking with the data filter" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:105 +msgid "Unpacking without the data filter" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:119 +msgid "Device files (including pipes)." +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 "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:130 +msgid "When extracting *sdist* archives:" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:134 +msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:141 +msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:142 +msgid "It is RECOMMENDED to preserve the user *executable* bit." +msgstr "" + +#: ../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 "" + +#: ../source/specifications/source-distribution-format.rst:155 +msgid "" +"November 2020: The original version of this specification was approved " +"through :pep:`643`." +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:157 +msgid "July 2021: Defined what a source tree is." +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:158 +msgid "" +"September 2022: The filename of a source distribution was standardized " +"through :pep:`625`." +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:160 +msgid "" +"August 2023: Source distribution archive features were standardized through :" +"pep:`721`." +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:162 +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:7 +#: ../source/specifications/version-specifiers.rst:785 +msgid "Version specifiers" +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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" +"\"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 "" + +#: ../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 "" + +#: ../source/specifications/version-specifiers.rst:43 +msgid "Version scheme" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:45 +msgid "" +"Distributions are identified by a public version identifier which supports " +"all defined version comparison operations" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/version-specifiers.rst:64 +msgid "" +"Public version identifiers MUST NOT include leading or trailing whitespace." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/version-specifiers.rst:81 +msgid "Release segment: ``N(.N)*``" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:82 +msgid "Pre-release segment: ``{a|b|rc}N``" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:83 +msgid "Post-release segment: ``.postN``" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:84 +msgid "Development release segment: ``.devN``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/version-specifiers.rst:143 +msgid "ASCII letters (``[a-zA-Z]``)" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:144 +msgid "ASCII digits (``[0-9]``)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/version-specifiers.rst:175 +msgid "" +"Source distributions using a local version identifier SHOULD provide the " +"``python.integrator`` extension metadata (as defined in :pep:`459`)." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:180 +msgid "Final releases" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:182 +msgid "" +"A version identifier that consists solely of a release segment and " +"optionally an epoch identifier is termed a \"final release\"." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:185 +msgid "" +"The release segment consists of one or more non-negative integer values, " +"separated by dots::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:190 +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:194 +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:199 +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 "" + +#: ../source/specifications/version-specifiers.rst:203 +msgid "For example::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:218 +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 "" + +#: ../source/specifications/version-specifiers.rst:224 +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 "" + +#: ../source/specifications/version-specifiers.rst:229 +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:243 +msgid "Pre-releases" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:245 +msgid "" +"Some projects use an \"alpha, beta, release candidate\" pre-release cycle to " +"support testing by their users prior to a final release." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:248 +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:256 +msgid "" +"A version identifier that consists solely of a release segment and a pre-" +"release segment is termed a \"pre-release\"." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:259 +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 "" + +#: ../source/specifications/version-specifiers.rst:264 +msgid "" +"Installation tools MAY accept both ``c`` and ``rc`` releases for a common " +"release segment in order to handle some existing legacy distributions." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:267 +msgid "" +"Installation tools SHOULD interpret ``c`` versions as being equivalent to " +"``rc`` versions (that is, ``c1`` indicates the same version as ``rc1``)." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:270 +msgid "" +"Build tools, publication tools and index servers SHOULD disallow the " +"creation of both ``rc`` and ``c`` releases for a common release segment." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:275 +msgid "Post-releases" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:277 +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:281 +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:286 +msgid "" +"A version identifier that includes a post-release segment without a " +"developmental release segment is termed a \"post-release\"." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:289 +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 "" + +#: ../source/specifications/version-specifiers.rst:296 +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 "" + +#: ../source/specifications/version-specifiers.rst:301 +msgid "Post-releases are also permitted for pre-releases::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:309 +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 "" + +#: ../source/specifications/version-specifiers.rst:316 +msgid "Developmental releases" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:318 +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 "" + +#: ../source/specifications/version-specifiers.rst:323 +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 "" + +#: ../source/specifications/version-specifiers.rst:329 +msgid "" +"A version identifier that includes a developmental release segment is termed " +"a \"developmental release\"." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:332 +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 "" + +#: ../source/specifications/version-specifiers.rst:338 +msgid "" +"Developmental releases are also permitted for pre-releases and post-" +"releases::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:346 +msgid "" +"Do note that development releases are considered a type of pre-release when " +"handling them." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:351 +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 "" + +#: ../source/specifications/version-specifiers.rst:358 +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 "" + +#: ../source/specifications/version-specifiers.rst:364 +msgid "Version epochs" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:366 +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:371 +msgid "If no explicit epoch is given, the implicit epoch is ``0``." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:373 +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 "" + +#: ../source/specifications/version-specifiers.rst:387 +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:401 +msgid "Normalization" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:403 +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 "" + +#: ../source/specifications/version-specifiers.rst:410 +msgid "Case sensitivity" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:412 +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 "" + +#: ../source/specifications/version-specifiers.rst:418 +msgid "Integer Normalization" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:420 +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 "" + +#: ../source/specifications/version-specifiers.rst:428 +msgid "Pre-release separators" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:430 +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 "" + +#: ../source/specifications/version-specifiers.rst:439 +msgid "Pre-release spelling" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:441 +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 "" + +#: ../source/specifications/version-specifiers.rst:450 +msgid "Implicit pre-release number" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:452 +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 "" + +#: ../source/specifications/version-specifiers.rst:458 +msgid "Post release separators" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:460 +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 "" + +#: ../source/specifications/version-specifiers.rst:469 +msgid "Post release spelling" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:471 +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 "" + +#: ../source/specifications/version-specifiers.rst:478 +msgid "Implicit post release number" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:480 +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 "" + +#: ../source/specifications/version-specifiers.rst:486 +msgid "Implicit post releases" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:488 +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 "" + +#: ../source/specifications/version-specifiers.rst:497 +msgid "Development release separators" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:499 +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 "" + +#: ../source/specifications/version-specifiers.rst:506 +msgid "Implicit development release number" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:508 +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 "" + +#: ../source/specifications/version-specifiers.rst:515 +msgid "Local version segments" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:517 +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 "" + +#: ../source/specifications/version-specifiers.rst:524 +msgid "Preceding v character" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:526 +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 "" + +#: ../source/specifications/version-specifiers.rst:533 +msgid "Leading and Trailing Whitespace" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:535 +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 "" + +#: ../source/specifications/version-specifiers.rst:542 +msgid "Examples of compliant version schemes" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:544 +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 "" + +#: ../source/specifications/version-specifiers.rst:551 +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:556 +msgid "Simple \"major.minor\" versioning::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:565 +msgid "Simple \"major.minor.micro\" versioning::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:573 +msgid "" +"\"major.minor\" versioning with alpha, beta and candidate pre-releases::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:585 +msgid "" +"\"major.minor\" versioning with developmental releases, release candidates " +"and post-releases for minor corrections::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:600 +msgid "" +"Date based releases, using an incrementing serial within each year, skipping " +"zero::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:614 +msgid "Summary of permitted suffixes and relative ordering" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:618 +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 "" + +#: ../source/specifications/version-specifiers.rst:622 +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 "" + +#: ../source/specifications/version-specifiers.rst:626 +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 "" + +#: ../source/specifications/version-specifiers.rst:632 +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:635 +msgid "" +"Within a numeric release (``1.0``, ``2.7.3``), the following suffixes are " +"permitted and MUST be ordered as shown::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:640 +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 "" + +#: ../source/specifications/version-specifiers.rst:645 +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 "" + +#: ../source/specifications/version-specifiers.rst:651 +msgid "" +"Within a post-release (``1.0.post1``), the following suffixes are permitted " +"and MUST be ordered as shown::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:656 +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 "" + +#: ../source/specifications/version-specifiers.rst:660 +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:663 +msgid "The following example covers many of the possible combinations::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:688 +msgid "Version ordering across different metadata versions" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:690 +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 "" + +#: ../source/specifications/version-specifiers.rst:694 +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 "" + +#: ../source/specifications/version-specifiers.rst:702 +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 "" + +#: ../source/specifications/version-specifiers.rst:708 +msgid "" +"Distribution users may wish to explicitly remove non-compliant versions from " +"any private package indexes they control." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:713 +msgid "Compatibility with other version schemes" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:715 +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:720 +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:728 +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 "" + +#: ../source/specifications/version-specifiers.rst:735 +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 "" + +#: ../source/specifications/version-specifiers.rst:740 +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 "" + +#: ../source/specifications/version-specifiers.rst:744 +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 "" + +#: ../source/specifications/version-specifiers.rst:748 +msgid "" +"Specific build information may also be included in local version labels." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:754 +msgid "DVCS based version labels" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:756 +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 "" + +#: ../source/specifications/version-specifiers.rst:761 +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 "" + +#: ../source/specifications/version-specifiers.rst:765 +msgid "" +"Identifying hash information may also be included in local version labels." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:769 +msgid "Olson database versioning" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:771 +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 "" + +#: ../source/specifications/version-specifiers.rst:775 +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 "" + +#: ../source/specifications/version-specifiers.rst:780 +msgid "" +"As with other translated version identifiers, the corresponding Olson " +"database version could be recorded in the project metadata." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:787 +msgid "" +"A version specifier consists of a series of version clauses, separated by " +"commas. For example::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:792 +msgid "The comparison operator determines the kind of version clause:" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:794 +msgid "``~=``: `Compatible release`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:795 +msgid "``==``: `Version matching`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:796 +msgid "``!=``: `Version exclusion`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:797 +msgid "``<=``, ``>=``: `Inclusive ordered comparison`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:798 +msgid "``<``, ``>``: `Exclusive ordered comparison`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:799 +msgid "``===``: `Arbitrary equality`_ clause." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:801 +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:805 +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:808 +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 "" + +#: ../source/specifications/version-specifiers.rst:814 +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:823 +msgid "Compatible release" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:825 +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:829 +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:833 +msgid "" +"For a given release identifier ``V.N``, the compatible release clause is " +"approximately equivalent to the pair of comparison clauses::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:838 +msgid "" +"This operator MUST NOT be used with a single segment version number such as " +"``~=1``." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:841 +msgid "For example, the following groups of version clauses are equivalent::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:849 +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 "" + +#: ../source/specifications/version-specifiers.rst:859 +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 "" + +#: ../source/specifications/version-specifiers.rst:871 +msgid "Version matching" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:873 +msgid "" +"A version matching clause includes the version matching operator ``==`` and " +"a version identifier." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:876 +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:880 +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:886 +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:891 +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 "" + +#: ../source/specifications/version-specifiers.rst:898 +#: ../source/specifications/version-specifiers.rst:959 +msgid "" +"For example, given the version ``1.1.post1``, the following clauses would " +"match or not as shown::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:905 +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 "" + +#: ../source/specifications/version-specifiers.rst:913 +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 "" + +#: ../source/specifications/version-specifiers.rst:925 +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 "" + +#: ../source/specifications/version-specifiers.rst:931 +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 "" + +#: ../source/specifications/version-specifiers.rst:938 +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:942 +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 "" + +#: ../source/specifications/version-specifiers.rst:950 +msgid "Version exclusion" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:952 +msgid "" +"A version exclusion clause includes the version exclusion operator ``!=`` " +"and a version identifier." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:955 +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:968 +msgid "Inclusive ordered comparison" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:970 +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:976 +msgid "The inclusive ordered comparison operators are ``<=`` and ``>=``." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:978 +#: ../source/specifications/version-specifiers.rst:1008 +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:981 +#: ../source/specifications/version-specifiers.rst:1011 +msgid "Local version identifiers are NOT permitted in this version specifier." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:985 +msgid "Exclusive ordered comparison" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:987 +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:993 +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 "" + +#: ../source/specifications/version-specifiers.rst:1000 +msgid "" +"The exclusive ordered comparison ``>V`` **MUST NOT** match a local version " +"of the specified version." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1003 +msgid "" +"The exclusive ordered comparison ``=`` entry as part " +"of the URL fragment." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1132 +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 "" + +#: ../source/specifications/version-specifiers.rst:1138 +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 "" + +#: ../source/specifications/version-specifiers.rst:1145 +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 "" + +#: ../source/specifications/version-specifiers.rst:1153 +msgid "Remote URL examples::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1161 +msgid "File URLs" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1163 +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 "" + +#: ../source/specifications/version-specifiers.rst:1168 +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 "" + +#: ../source/specifications/version-specifiers.rst:1173 +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 "" + +#: ../source/specifications/version-specifiers.rst:1184 +msgid "Summary of differences from pkg_resources.parse_version" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1186 +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 "" + +#: ../source/specifications/version-specifiers.rst:1190 +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 "" + +#: ../source/specifications/version-specifiers.rst:1194 +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 "" + +#: ../source/specifications/version-specifiers.rst:1198 +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 "" + +#: ../source/specifications/version-specifiers.rst:1207 +msgid "Appendix: Parsing version strings with regular expressions" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1209 +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 "" + +#: ../source/specifications/version-specifiers.rst:1215 +msgid "" +"To test whether a version identifier is in the canonical format, you can use " +"the following function:" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1224 +msgid "" +"To extract the components of a version identifier, use the following regular " +"expression (as defined by the `packaging `_ project):" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1271 +msgid "August 2014: This specification was approved through :pep:`440`." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1272 +msgid "" +"May 2025: Clarify that development releases are a form of pre-release when " +"they are handled." +msgstr "" + +#: ../source/specifications/virtual-environments.rst:6 +msgid "Python Virtual Environments" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/virtual-environments.rst:18 +msgid "Runtime detection of virtual environments" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/virtual-environments.rst:33 +msgid "Declaring installation environments as Python virtual environments" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/virtual-environments.rst:56 +msgid "May 2012: This specification was approved through :pep:`405`." +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:5 +msgid "Well-known Project URLs in Metadata" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/well-known-project-urls.rst:26 +msgid "This specification was originally defined in :pep:`753`." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/well-known-project-urls.rst:53 +msgid "" +"The normalization procedure for ``Project-URL`` labels is defined by the " +"following Python function:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/well-known-project-urls.rst:78 +msgid "``Home-page``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:80 +msgid "``Home page``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:82 +msgid "``Change_Log``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:83 +msgid "``changelog``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:84 +msgid "``What's New?``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:85 +msgid "``whatsnew``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:86 +#: ../source/specifications/well-known-project-urls.rst:87 +msgid "``github``" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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/specifications/well-known-project-urls.rst:112 +msgid "The project's hosted source code or repository" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:113 +msgid "``repository``, ``sourcecode``, ``github``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:114 +msgid "``download`` (Download)" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:115 +msgid "" +"A download URL for the current distribution, equivalent to ``Download-URL``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:117 +msgid "``changelog`` (Changelog)" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/well-known-project-urls.rst:120 +msgid "``releasenotes`` (Release Notes)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/specifications/well-known-project-urls.rst:126 +msgid "``issues`` (Issue Tracker)" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:127 +msgid "The project's bug tracker" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:128 +msgid "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:129 +msgid "``funding`` (Funding)" +msgstr "" + +#: ../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 "" + +#: ../source/specifications/well-known-project-urls.rst:133 +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 +msgid "Example behavior" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:139 +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 +msgid "Example project URLs in standard configuration" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:151 +msgid "Core metadata representation" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:159 +msgid "Potential rendering" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:167 +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 +msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:173 +msgid "" +"``DOCUMENTATION`` becomes ``documentation``, which is rendered as " +"``Documentation``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:174 +msgid "" +"``Repository`` becomes ``repository``, which is rendered as ``Source Code``" +msgstr "" + +#: ../source/specifications/well-known-project-urls.rst:175 +msgid "" +"``GitHub`` becomes ``github``, which is rendered as ``Source Code (GitHub)`` " +"(as a specialization of ``Source Code``)" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/installing-packages.rst:31 +msgid "Ensure you can run Python from the command line" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/installing-packages.rst:95 +msgid "Ensure you can run pip from the command line" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/installing-packages.rst:119 +msgid "" +"If ``pip`` isn't already installed, then first try to bootstrap it from the " +"standard library:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:134 +msgid "If that still doesn't allow you to run ``python -m pip``:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:136 +msgid "" +"Securely Download `get-pip.py `_ [1]_" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:139 +msgid "" +"Run ``python get-pip.py``. [2]_ This will install or upgrade pip. " +"Additionally, it will install :ref:`setuptools` and :ref:`wheel` if they're " +"not installed already." +msgstr "" + +#: ../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 "" + +#: ../source/tutorials/installing-packages.rst:154 +msgid "Ensure pip, setuptools, and wheel are up to date" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:156 +msgid "" +"While ``pip`` alone is sufficient to install from pre-built binary archives, " +"up to date copies of the ``setuptools`` and ``wheel`` projects are useful to " +"ensure you can also install from source archives:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:173 +msgid "Optionally, create a virtual environment" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:175 +msgid "" +"See :ref:`section below ` for " +"details, but here's the basic :doc:`venv ` [3]_ command " +"to use on a typical Linux system:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:192 +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 "" + +#: ../source/tutorials/installing-packages.rst:199 +msgid "Creating Virtual Environments" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:201 +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 "" + +#: ../source/tutorials/installing-packages.rst:207 +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 "" + +#: ../source/tutorials/installing-packages.rst:213 +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:217 +msgid "" +"Also, what if you can’t install :term:`packages ` into " +"the global site-packages directory? For instance, on a shared host." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:220 +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:224 +msgid "" +"Currently, there are two common tools for creating Python virtual " +"environments:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:226 +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 "" + +#: ../source/tutorials/installing-packages.rst:229 +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 "" + +#: ../source/tutorials/installing-packages.rst:234 +msgid "The basic usage is like so:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:236 +msgid "Using :doc:`venv `:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:252 +msgid "Using :ref:`virtualenv`:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:268 +msgid "" +"For more information, see the :doc:`venv ` docs or the :" +"doc:`virtualenv ` docs." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:271 +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 "" + +#: ../source/tutorials/installing-packages.rst:276 +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 "" + +#: ../source/tutorials/installing-packages.rst:286 +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 "" + +#: ../source/tutorials/installing-packages.rst:293 +msgid "Use pip for Installing" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:295 +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 "" + +#: ../source/tutorials/installing-packages.rst:301 +msgid "Installing from PyPI" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:303 +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 "" + +#: ../source/tutorials/installing-packages.rst:311 +msgid "To install the latest version of \"SomeProject\":" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:325 +msgid "To install a specific version:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:339 +msgid "To install greater than or equal to one version and less than another:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:354 +msgid "" +"To install a version that's :ref:`compatible ` with a certain version: [4]_" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:369 +msgid "" +"In this case, this means to install any version \"==1.4.*\" version that's " +"also \">=1.4.2\"." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:374 +msgid "Source Distributions vs Wheels" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:376 +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 "" + +#: ../source/tutorials/installing-packages.rst:382 +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 "" + +#: ../source/tutorials/installing-packages.rst:387 +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 "" + +#: ../source/tutorials/installing-packages.rst:395 +msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:412 +msgid "Installing to the User Site" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:414 +msgid "" +"To install :term:`packages ` that are isolated to the " +"current user, use the ``--user`` flag:" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:429 +msgid "" +"For more information see the `User Installs `_ section from the pip docs." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:433 +msgid "" +"Note that the ``--user`` flag has no effect when inside a virtual " +"environment - all installation commands will affect the virtual environment." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:436 +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 "" + +#: ../source/tutorials/installing-packages.rst:444 +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 "" + +#: ../source/tutorials/installing-packages.rst:450 +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 "" + +#: ../source/tutorials/installing-packages.rst:466 +msgid "" +"Install a list of requirements specified in a :ref:`Requirements File `." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:482 +msgid "Installing from VCS" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:484 +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 "" + +#: ../source/tutorials/installing-packages.rst:506 +msgid "Installing from other Indexes" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:508 +msgid "Install from an alternate index" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:522 +msgid "" +"Search an additional index during install, in addition to :term:`PyPI " +"`" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:538 +msgid "Installing from a local src tree" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:541 +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 "" + +#: ../source/tutorials/installing-packages.rst:558 +msgid "You can also install normally from src" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:573 +msgid "Installing from local archives" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:575 +msgid "Install a particular source archive file." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:589 +msgid "" +"Install from a local directory containing archives (and don't check :term:" +"`PyPI `)" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:609 +msgid "Installing from other sources" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:611 +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 "" + +#: ../source/tutorials/installing-packages.rst:623 +msgid "Installing Prereleases" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:625 +msgid "" +"Find pre-release and development versions, in addition to stable versions. " +"By default, pip only finds stable versions." +msgstr "" + +#: ../source/tutorials/installing-packages.rst:641 +msgid "Installing \"Extras\"" +msgstr "" + +#: ../source/tutorials/installing-packages.rst:643 +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 "" + +#: ../source/tutorials/installing-packages.rst:666 +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 "" + +#: ../source/tutorials/installing-packages.rst:675 +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 "" + +#: ../source/tutorials/installing-packages.rst:680 +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 "" + +#: ../source/tutorials/managing-dependencies.rst:4 +msgid "Managing Application Dependencies" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/managing-dependencies.rst:35 +msgid "Use ``pip`` to install Pipenv:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/managing-dependencies.rst:122 +msgid "Then you can run this script using ``pipenv run``:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:2 +msgid "Packaging Python Projects" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:111 +msgid "Choosing a build backend" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:206 +msgid "``description`` is a short, one-sentence summary of the package." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:222 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:236 +msgid "Creating README.md" +msgstr "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:251 +msgid "Creating a LICENSE" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:253 +msgid "" +"It's important for every package uploaded to the Python Package Index to " +"include a license. This tells users who install your package the terms under " +"which they can use your package. 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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:305 +msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:319 +msgid "" +"If you have trouble installing these, see the :doc:`installing-packages` " +"tutorial." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:322 +msgid "" +"Now run this command from the same directory where :file:`pyproject.toml` is " +"located:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:389 +msgid "" +"Once installed, run Twine to upload all of the archives under :file:`dist`:" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:474 +msgid "and import the package:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:486 +msgid "" +"**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " +"✨" +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:507 +msgid "" +"Install your package from the real PyPI using ``python3 -m pip install [your-" +"package]``." +msgstr "" + +#: ../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 "" + +#: ../source/tutorials/packaging-projects.rst:512 +msgid "" +"Read about advanced configuration for your chosen build backend: `Hatchling " +"`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." +msgstr "" + +#: ../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 "" + +#: ../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 "" + +#: ../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 "" diff --git a/locales/de/LC_MESSAGES/messages.po b/locales/de/LC_MESSAGES/messages.po index f9f1456ce..1e5e10583 100644 --- a/locales/de/LC_MESSAGES/messages.po +++ b/locales/de/LC_MESSAGES/messages.po @@ -11,13 +11,14 @@ # Emr , 2024. # Carsten Gerlach , 2025. # chrysle , 2025. +# Norah-14 , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-11 12:33+0000\n" -"PO-Revision-Date: 2025-04-26 13:01+0000\n" -"Last-Translator: Jean-Luc Tibaux \n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" +"PO-Revision-Date: 2025-10-28 15:43+0000\n" +"Last-Translator: Norah-14 \n" "Language-Team: German \n" "Language: de\n" @@ -25,7 +26,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.12-dev\n" +"X-Generator: Weblate 5.14.1-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -3682,7 +3683,7 @@ msgstr "" #: ../source/glossary.rst:157 ../source/specifications/license-expression.rst:3 msgid "License Expression" -msgstr "" +msgstr "Lizensausdruck" #: ../source/glossary.rst:158 msgid "SPDX Expression" @@ -4229,7 +4230,7 @@ msgid "Column" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "" @@ -4594,7 +4595,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "" @@ -4813,14 +4814,14 @@ msgid "" "the file :file:`greet.py`, named after the main module:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -4832,13 +4833,13 @@ msgid "" "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4846,7 +4847,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4854,11 +4855,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4875,68 +4876,68 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 #, fuzzy msgid "Installing the package with ``pipx``" msgstr "Betreuer" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -5284,7 +5285,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7717,7 +7718,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9986,8 +9987,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -10015,8 +10016,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -10047,7 +10048,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -10077,8 +10078,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -10130,7 +10131,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -10142,7 +10143,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -10154,8 +10155,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -10254,7 +10255,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -10262,8 +10263,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -10301,8 +10302,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10353,8 +10354,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10366,7 +10367,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10393,8 +10394,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -11012,7 +11013,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12920,10 +12921,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12934,41 +12935,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12976,30 +12981,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -13012,13 +13017,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -13028,24 +13033,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -13056,11 +13061,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13839,7 +13844,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13850,9 +13855,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14579,7 +14584,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14647,7 +14652,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14669,23 +14674,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14769,39 +14774,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14809,19 +14829,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14829,7 +14849,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14837,7 +14857,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14845,31 +14865,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14983,76 +15003,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "Betreuer" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -15060,7 +15080,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -15070,32 +15090,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -15103,50 +15132,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -15154,64 +15183,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -15219,13 +15248,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -15233,25 +15262,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -15259,18 +15288,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -15279,13 +15308,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -15293,20 +15322,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15314,7 +15343,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15324,11 +15353,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15336,7 +15460,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15346,18 +15470,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15366,7 +15490,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15377,42 +15501,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15421,24 +15545,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15446,28 +15570,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15478,33 +15602,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15513,89 +15637,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15605,21 +15753,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15640,7 +15788,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15729,12 +15877,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15747,17 +15895,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15767,7 +15915,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15776,12 +15924,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15796,7 +15944,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16342,17 +16490,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18363,7 +18519,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20936,7 +21092,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20948,83 +21104,93 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:144 #, fuzzy msgid "``maintainers``" msgstr "Betreuer" -#: ../source/specifications/pyproject-toml.rst:144 +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -21038,7 +21204,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -21047,7 +21213,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -21059,46 +21225,54 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 #, fuzzy #| msgid "Specifications" msgid "Legacy specification" msgstr "Die Spezifikationen" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -21108,24 +21282,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -21134,40 +21310,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -21176,11 +21352,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -21188,20 +21364,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -21210,56 +21386,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -21267,38 +21443,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -21306,14 +21482,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -21321,7 +21497,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -21329,24 +21505,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21354,7 +21530,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21365,17 +21541,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21383,19 +21650,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21404,20 +21671,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21425,18 +21692,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21444,7 +21711,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21452,25 +21719,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -23150,70 +23429,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -23221,7 +23437,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -23230,18 +23446,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -23249,13 +23465,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -23264,23 +23480,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23289,79 +23505,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/eo/LC_MESSAGES/messages.po b/locales/eo/LC_MESSAGES/messages.po index 42dc94b09..0727e1e32 100644 --- a/locales/eo/LC_MESSAGES/messages.po +++ b/locales/eo/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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2025-06-29 12:03+0000\n" "Last-Translator: phlostically \n" "Language-Team: Esperanto `." @@ -5829,7 +5829,7 @@ msgstr "" "Nun, aldonu malplenan dosieron :file:`__init__.py`, por marki la projekton " "kiel ordinaran :term:`importan pakon `." -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../source/guides/creating-command-line-tools.rst:88 #, fuzzy #| msgid "" #| "The file :file:`__main__.py` marks the main entry point for the " @@ -5848,7 +5848,7 @@ msgstr "" "kun plata aranĝo sed postulas instaladon kun src-aranĝo). Tial, starigu la " "komandlinian fasadon ĉi tie:" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -5860,11 +5860,11 @@ msgstr "" "meti trukon en tiun dosieron; legu pri tio en :ref:`running-cli-from-source-" "src-layout`." -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "``pyproject.toml``" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -5890,7 +5890,7 @@ msgstr "" "`console_scripts`) devas esti aldonita kiel :term:`subŝlosilo `:" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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." @@ -5898,11 +5898,11 @@ msgstr "" "Nun, la fontarbo de la projekto pretas transformiĝi en instaleblan :term:" "`distribuan pakon `." -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "Instali la pakon per ``pipx``" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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:" @@ -5910,7 +5910,7 @@ msgstr "" "Post instalo de ``pipx`` laŭ :ref:`installing-stand-alone-command-line-" "tools`, instalu vian projekton:" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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:" @@ -5918,7 +5918,7 @@ msgstr "" "Tio difinos la ruleblan programon kiel enirpunkton kaj disponigos la " "komandon ``greet``. Ni elprovu:" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 " @@ -5928,7 +5928,7 @@ msgstr "" "la programo per la flago ``--help`` aŭ agordi kompletigadon per la flago ``--" "install-completion``." -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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:" @@ -5936,7 +5936,7 @@ msgstr "" "Por simple ruli la programon sen malprovizora instalado, uzu ``pipx run``, " "kiu kreos provizoran (sed enkaŝmemorigitan) virtualan medion por ĝi:" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../source/guides/creating-command-line-tools.rst:156 #, fuzzy #| msgid "" #| "This syntax is a bit unpractical, however; as the name of the entry point " @@ -5952,7 +5952,7 @@ msgstr "" "difinita ĉi-supre ne egalas la nomon de la pako, ni devas eksplici la " "rulotan programon (malgraŭ la ekzisto de nur unu)." -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 " @@ -5961,7 +5961,7 @@ msgstr "" "Tamen ekzistas pli praktika solvo de tiu problemo: enirpunkto specifa al " "``pipx run``. La sama estas difinebla jene en :file:`pyproject.toml`:" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 " @@ -5971,11 +5971,11 @@ msgstr "" "``pipx`` trovos la ruleblan programon kiel la implicitaĵon kaj rulos ĝin. " "Tio ebligas la jenan komandon:" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "Konkludo" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -6425,7 +6425,7 @@ msgstr "" "``--old-and-unmanageable``." #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 #, fuzzy msgid "``scripts``" msgstr "``description``" @@ -9494,7 +9494,9 @@ 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/pyproject-toml`" +#, fuzzy +#| msgid ":doc:`pip:reference/build-system/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr ":doc:`pip:reference/build-system/pyproject-toml`" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -12446,8 +12448,8 @@ msgstr "Bazaj informoj" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "``name``" @@ -12485,8 +12487,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "``version``" @@ -12522,7 +12524,7 @@ msgid "Dependencies and requirements" msgstr "Dependecoj kaj postuloj" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies``/``optional-dependencies``" @@ -12559,8 +12561,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "``requires-python``" @@ -12626,7 +12628,7 @@ msgid "About your project" msgstr "Pri via projekto" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "``authors``/``maintainers``" @@ -12640,7 +12642,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "``description``" @@ -12655,8 +12657,8 @@ msgstr "" "serĉrezultoj (`jene `_)." #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "``readme``" @@ -12765,16 +12767,16 @@ msgid "2.4.0" msgstr "2.4.0" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" -msgstr "`ankoraŭ ne `_" +msgid "2.2.0" +msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "``license``" @@ -12827,8 +12829,8 @@ msgstr "" "versio 2.2 aŭ ajna pli nova kongrua versio." #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "``license-files``" @@ -12887,8 +12889,8 @@ msgstr "" "diskutita de ĉi tiu specifo estas nevalida." #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "``keywords``" @@ -12902,7 +12904,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "``classifiers``" @@ -12934,8 +12936,8 @@ msgstr "" "``Private ::``." #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "``urls``" @@ -13736,7 +13738,7 @@ msgstr "" "ĝi estas la oficiala PyPI-alŝutilo, ĝi estas rapida kaj sekura, ĝi estas " "mastrumata, kaj ĝi funkcias fidinde." -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "virtualenv" @@ -16084,11 +16086,17 @@ msgid "Bringing your own kernel" msgstr "Alporti vian propran kernon" #: ../source/overview.rst:342 +#, fuzzy +#| msgid "" +#| "Most 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." msgid "" -"Most 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." +"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 "" "La plejmulto da mastrumaj sistemoj subtenas ian klasikan virtualigon " "rulantan programon pakitan kiel diskokopion kun propra plena mastruma " @@ -16105,10 +16113,14 @@ msgstr "" "dependas de Python kaj inkluzivas la jenon:" #: ../source/overview.rst:351 -msgid "`Vagrant `_" -msgstr "`Vagrant `_" +msgid "KVM on Linux" +msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " @@ -16118,19 +16130,23 @@ msgstr "" "wikipedia.org/wiki/Amazon_Machine_Image>`_, kaj :doc:`aliaj dosierformoj " "`" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 +#, fuzzy +#| msgid "" +#| "`OpenStack `_ - A cloud " +#| "management system in Python, with extensive VM support" msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" "`OpenStack `_ – Nubadministra " "sistemo en Python, kun multa subteno de virtuala maŝino" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "Alporti vian propran aparaton" -#: ../source/overview.rst:358 +#: ../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 " @@ -16140,7 +16156,7 @@ msgstr "" "instalita sur iu aparato. Tiel, la uzanto de via programo postulas nur " "elektron." -#: ../source/overview.rst:362 +#: ../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 " @@ -16150,7 +16166,7 @@ msgstr "" "estas uzataj de ĉiuj, de la plej komplikaj datencentroj ĝis la plej junaj " "infanoj." -#: ../source/overview.rst:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -16162,20 +16178,20 @@ msgstr "" "kaj sendu ĝin al la datencentro aŭ la hejmo de viaj uzantoj. Ili povos " "ekuzi, kaj vi povos ekmalstreĉi." -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "Resumo pri teĥnikoj por paki Python-programojn." -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "La simpligita gamo de teĥnikoj uzataj por paki Python-programojn." -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "Kio pri…" -#: ../source/overview.rst:380 +#: ../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." @@ -16183,11 +16199,11 @@ msgstr "" "La ĉi-supraj paragrafoj nur priskribas tiom, kiom eblas. Vi eble demandos " "pri mankantaj temoj." -#: ../source/overview.rst:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "Mastrumasistemaj pakoj" -#: ../source/overview.rst:386 +#: ../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 " @@ -16208,7 +16224,7 @@ msgstr "" "eĉ disponigo. Oni povas eĉ uzi `FPM `_ por generi kaj deb kaj RPM el la sama fonto." -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." @@ -16216,7 +16232,7 @@ msgstr "" "En multaj disponigaj ĉenstabloj, la mastrumsistema pakadministrilo estas nur " "unu ero en la puzlo." -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -16226,7 +16242,7 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 " @@ -16236,11 +16252,11 @@ msgstr "" "la Interreto al virtuala medio, simile al evoluada medio. La ĉi-supra " "superrigardo priskribas multe pli bonajn solvojn." -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "Sekureco" -#: ../source/overview.rst:419 +#: ../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." @@ -16248,7 +16264,7 @@ msgstr "" "Ju pli suben vi iras, des pli malfacile estas ĝisdatigi komponantojn de via " "pako, ĉar ĉiuj estas des pli kunligitaj." -#: ../source/overview.rst:422 +#: ../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 " @@ -16259,11 +16275,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "Konkludo" -#: ../source/overview.rst:433 +#: ../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 " @@ -17262,7 +17278,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -17273,9 +17289,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -18072,7 +18088,7 @@ msgid "Core metadata specifications" msgstr "Kernaj metadatenaj specifoj" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -18146,9 +18162,13 @@ msgid "Metadata-Version" msgstr "Metadata-Version" #: ../source/specifications/core-metadata.rst:52 +#, fuzzy +#| msgid "" +#| "Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " +#| "\"2.1\", \"2.2\", \"2.3\", and \"2.4\"." msgid "" "Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " -"\"2.1\", \"2.2\", \"2.3\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" "Versio de la dosierformo; la validaj valoroj estas «1.0», «1.1», «1.2», " "«2.1», «2.2», «2.3», kaj «2.4»." @@ -18175,23 +18195,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "Ekzemple::" @@ -18302,14 +18322,27 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "Plenaj detaloj pri la semantiko de ``Dynamic`` troviĝas en :pep:`643`." -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "Platform (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 msgid "" "A Platform specification describing an operating system supported by the " "distribution which is not listed in the \"Operating System\" Trove " @@ -18319,25 +18352,27 @@ msgstr "" "kaj ne en la listo de la Trove-klasigilo «Operating System». Vidu " "«Klasigilon» ĉi-sube." -#: ../source/specifications/core-metadata.rst:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "Ekzemploj::" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "Supported-Platform (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -18349,19 +18384,19 @@ msgstr "" "ĉefprocesoron, por kiu la duuma distribuo estis tradukita. Ĉi tiu PEP ne " "difinas la semantikon de la kampo ``Supported-Platform``." -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "Unulinia resumo pri la funkcioj de la distribuo." -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "Ĉi tiu kampo estas anstataŭe specifebla en la mesaĝa korpo." -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -18372,7 +18407,7 @@ msgstr "" "Programo uzanta metadatenojn ne supozu ajnan maksimumon por tiu kampo, " "kvankam oni ne inkluzivu plenan manlibron kiel la priskribon." -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -18384,7 +18419,7 @@ msgstr "" "anstataŭe montri la kampon krude. Tio signifas, ke aŭtoro estu konservativa " "pri la uzata marklingvo." -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -18392,7 +18427,7 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 " @@ -18402,7 +18437,7 @@ msgstr "" "vertikalo devas esti anstataŭigita per unu CRLF, kiam la kampo estas " "maldensigita per realigaĵo de RFC822." -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 msgid "" "Alternatively, the distribution's description may instead be provided in the " "message body (i.e., after a completely blank line following the headers, " @@ -18412,11 +18447,11 @@ msgstr "" "mesaĝo (t.e. post plene malplena linio post la ĉapoj, sen krommarĝeno aŭ " "alia speciala aranĝado)." -#: ../source/specifications/core-metadata.rst:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "Description-Content-Type" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 msgid "" "A string stating the markup syntax (if any) used in the distribution's " "description, so that tools can intelligently render the description." @@ -18424,7 +18459,7 @@ msgstr "" "Signoĉeno pri la marklingva sintakso (se iu ekzistas) de la priskribo de la " "distribuo, por inteligenta montrado de la priskribo far iloj." -#: ../source/specifications/core-metadata.rst:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `_). " "Resume, ĝi havas parton ``type/subtype`` kun nedeviga(j) parametro(j):" -#: ../source/specifications/core-metadata.rst:269 +#: ../source/specifications/core-metadata.rst:279 msgid "Format::" msgstr "Formo::" -#: ../source/specifications/core-metadata.rst:273 +#: ../source/specifications/core-metadata.rst:283 msgid "The ``type/subtype`` part has only a few legal values:" msgstr "La parto ``type/subtype`` nur havas kelkajn validajn valorojn:" -#: ../source/specifications/core-metadata.rst:275 +#: ../source/specifications/core-metadata.rst:285 msgid "``text/plain``" msgstr "``text/plain``" -#: ../source/specifications/core-metadata.rst:276 +#: ../source/specifications/core-metadata.rst:286 msgid "``text/x-rst``" msgstr "``text/x-rst``" -#: ../source/specifications/core-metadata.rst:277 +#: ../source/specifications/core-metadata.rst:287 msgid "``text/markdown``" msgstr "``text/markdown``" -#: ../source/specifications/core-metadata.rst:279 +#: ../source/specifications/core-metadata.rst:289 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 " @@ -18493,7 +18528,7 @@ msgstr "" "ununura valida valoro estas ``UTF-8``. Se ĝi mankas, oni supozas la valoron " "``UTF-8``." -#: ../source/specifications/core-metadata.rst:283 +#: ../source/specifications/core-metadata.rst:293 msgid "" "Other parameters might be specific to the chosen subtype. For example, for " "the ``markdown`` subtype, there is an optional ``variant`` parameter that " @@ -18505,15 +18540,15 @@ msgstr "" "varianto de Markdown (se ĝi mankas, tio implicas ``GFM``). Aktuale du " "variantoj estas konataj:" -#: ../source/specifications/core-metadata.rst:288 +#: ../source/specifications/core-metadata.rst:298 msgid "``GFM`` for :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" msgstr "``GFM`` por :rfc:`GitHub-stila Markdown <7764#section-3.2>`" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "``CommonMark`` por :rfc:`CommonMark <7764#section-3.5>`" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 " @@ -18523,7 +18558,7 @@ msgstr "" "kiel ``text/x-rst; charset=UTF-8`` kaj, se ĝi ne estas valida " "reStructuredText, montri ĝin kiel ``text/plain``." -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 msgid "" "If a ``Description-Content-Type`` is an unrecognized value, then the assumed " "content type is ``text/plain`` (Although PyPI will probably reject anything " @@ -18533,7 +18568,7 @@ msgstr "" "enhavtipo estas ``text/plain`` (kvankam PyPI verŝajne malakceptos ion ajn de " "nekonata valoro)." -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 msgid "" "If the ``Description-Content-Type`` is ``text/markdown`` and ``variant`` is " "not specified or is set to an unrecognized value, then the assumed " @@ -18542,7 +18577,7 @@ msgstr "" "Se ``Description-Content-Type`` estas ``text/markdown`` kaj ``variant`` " "estas nespecifita aŭ nekonata, do la implicita ``variant`` estas ``GFM``." -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 " @@ -18552,11 +18587,11 @@ msgstr "" "``varianto`` estas implicite ``GFM``. Tial, ĝi ekvivalentas la ekzemplon " "antaŭ si." -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "Keywords" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." @@ -18564,7 +18599,7 @@ msgstr "" "Listo de ekstraj ŝlosilvortoj, apartigitaj de komoj, por helpi serĉadon de " "la distribuo en granda katalogo." -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -18575,11 +18610,11 @@ msgstr "" "setuptools realigis ĝin per komoj. Tiuj iloj estas vaste uzata dum multaj " "jaroj; tial pli facilas modifi la normon por kongrui kun la realo." -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "Author" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." @@ -18587,11 +18622,11 @@ msgstr "" "Signoĉeno enhavanta la nomon de la aŭtoro minimume; kromaj kontaktaj " "informoj povas esti disponigitaj." -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "Author-email" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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." @@ -18599,8 +18634,8 @@ msgstr "" "Signoĉeno enhavanta la retpoŝtan adreson de la aŭtoro. Ĝi povas enhavi " "nomon kaj retpoŝtan adreson laŭ la formo de la ĉapo ``From:`` en RFC 822." -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" @@ -18608,11 +18643,11 @@ msgstr "" "Laŭ RFC 822, ĉi tiu kampo povas enhavi pluajn kome disigitajn retpoŝtajn " "adresojn::" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "Prizorganto" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." @@ -18620,7 +18655,7 @@ msgstr "" "Signoĉeno enhavanta la nomon de la mastrumanto minimume; kromaj kontaktaj " "informoj povas esti disponigitaj." -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 " @@ -18629,11 +18664,11 @@ msgstr "" "Notu, ke ĉi tiu kampo estas por tiam, kiam projekto estas mastrumata de iu " "alia ol la origina aŭtoro. Ĝi malestu, se ĝi estus identa al ``Author``." -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "Maintainer-email" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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." @@ -18641,7 +18676,7 @@ msgstr "" "Signoĉeno enhavanta la retpoŝtan adreson de la mastrumanto. Ĝi povas enhavi " "nomon kaj retpoŝtan adreson laŭ la formo de la ĉapo ``From:`` en RFC 822." -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 " @@ -18651,15 +18686,15 @@ msgstr "" "alia ol la origina aŭtoro. Ĝi malestu, se ĝi estus identa al ``Author-" "email``." -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "License" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "Anstataŭe uzu ``License-Expression``." -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -18671,7 +18706,7 @@ msgstr "" "metadatenojn ignoros ``License``, kaj PyPI rifuzos alŝutojn. Vidu `PEP 639 " "`__." -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -18681,11 +18716,11 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "License-Expression" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." @@ -18693,11 +18728,20 @@ msgstr "" "Signoĉeno, kiu estas valida :term:`SPDX-licencesprimo ` " "laŭ :doc:`/specifications/license-expression`." -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "License-File (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 " @@ -18707,11 +18751,11 @@ msgstr "" "La dosierloko troviĝas en la projekta fontarbo relative al la projekta " "radika dosierujo. Por detaloj, vidu :pep:`639`." -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "Classifier (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -18722,7 +18766,7 @@ msgstr "" "estas priskribitaj en :pep:`301`, kaj la Python-Pakindekso eldonas dinamikan " "liston de `aktuale difinitaj klasigiloj `__." -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "Tiu kampo povas esti sekvita per media marko post punktokomo." -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "Requires-Dist (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." @@ -18754,7 +18798,7 @@ msgstr "" "La specifo pri la kampa formo estis malstriktigita por akcepti la sintakson " "uzatan de popularaj eldoniloj." -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." @@ -18762,19 +18806,19 @@ msgstr "" "Ĉiu ero enhavas signoĉenon nomantan alian distutils-projekton postulatan de " "tiu distribuo." -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" "La formo de postulo-signoĉeno enhavas minimume unu, maksimume kvar partojn:" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" "Projekta nomo en la sama formo kiel la kampo ``Name:``. La sola deviga parto." -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -18785,7 +18829,7 @@ msgstr "" "postulata projekto, por specifaj funkcioj postulantaj ekstrajn dependecojn. " "La nomoj DEVAS observi la limigojn de la kampo ``Provides-Extra:``." -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 msgid "" "A version specifier. Tools parsing the format should accept optional " "parentheses around this, but tools generating it should not use parentheses." @@ -18793,7 +18837,7 @@ msgstr "" "Versio-specifilo. Ilo sintakse analizanta la formon akceptu nedevigajn " "rondajn krampojn ĉirkaŭ tiu, sed ilo generanta ĝin ne uzu rondajn krampojn." -#: ../source/specifications/core-metadata.rst:558 +#: ../source/specifications/core-metadata.rst:574 msgid "" "An environment marker after a semicolon. This means that the requirement is " "only needed in the specified conditions." @@ -18801,11 +18845,11 @@ msgstr "" "Media marko post punktokomo. Tio signifas, ke la postulo estas nur efektiva " "sub la specifitaj kondiĉoj." -#: ../source/specifications/core-metadata.rst:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "Vidu :pep:`508` por plenaj detaloj pri la permesataj formoj." -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." @@ -18813,17 +18857,17 @@ msgstr "" "La projektaj nomoj respondu al nomoj ĉe la `Python-Pakindekso `_." -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "Versispecifilo devas observi la regulojn en :doc:`version-specifiers`." -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 msgid "" "This field specifies the Python version(s) that the distribution is " "compatible with. Installation tools may look at this when picking which " @@ -18833,12 +18877,12 @@ msgstr "" "kongruas. Instalilo povas konsideri tion dum elektado de instalota versio de " "projekto." -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" "La valoro devas observi la formon specifitan en :doc:`version-specifiers`." -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" @@ -18846,15 +18890,15 @@ msgstr "" "Ekzemple, se distribuo uzas :ref:`f-signoĉenon `, ĝi " "povas malpermesi instaladon sur Python < 3.6 jene::" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "Ĉi tiu kampo ne povas esti sekvita de media marko." -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "Requires-External (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -18862,7 +18906,7 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 msgid "" "The format of a requirement string is a name of an external dependency, " "optionally followed by a version declaration within parentheses." @@ -18870,7 +18914,7 @@ msgstr "" "La formo de postulo-signoĉeno estas nomo de ekstera dependaĵo, nedevige " "sekvita de versia deklaro ene de rondaj krampoj." -#: ../source/specifications/core-metadata.rst:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -18882,15 +18926,15 @@ msgstr "" "specifiloj `; ĝi sekvu la versian skemon de la ekstera " "dependaĵo." -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "Notu, ke ekzistas neniu speciala regulo pri la uzota signoĉeno." -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "Project-URL (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." @@ -18898,11 +18942,11 @@ msgstr "" "Signoĉeno enhavanta alireblan retadreson de la projekto kaj etikedon, " "apartigitajn de komo." -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "La etikedo estas arbitra teksto limigita al 32 skribsignoj." -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -18914,11 +18958,11 @@ msgstr "" "kiujn oni povas prezenti speciale por homoj. Vidu :ref:`well-known-project-" "urls`." -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "Provides-Extra (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 msgid "" ":pep:`685` restricted valid values to be unambiguous (i.e. no normalization " "required). For older metadata versions, value restrictions were brought into " @@ -18928,7 +18972,7 @@ msgstr "" "sen postulata normigo.Por malnovaj versioj de metadatenoj, limigoj de valoro " "kongruiĝis kun ``Name:``, kaj reguloj pri normigado estis starigitaj." -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -18942,7 +18986,7 @@ msgstr "" "streketon. Nomo devas konformi al la jena regula esprimo (garantiante " "malambiguecon)::" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." @@ -18950,7 +18994,7 @@ msgstr "" "La specifita nomo povas esti uzata por igi dependecon kondiĉa pri ĉu la " "nedeviga funkcio estas petata." -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -18958,7 +19002,7 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " @@ -18967,7 +19011,7 @@ msgstr "" "Du funkcio-nomoj ``test`` kaj ``doc`` estas rezervataj por marki dependecojn " "por aŭtomataj testoj kaj generado de dokumentaro respektive." -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." @@ -18975,7 +19019,7 @@ msgstr "" "Validas specifi ``Provides-Extra:`` sen referencado de ĝi en ajna ``Requires-" "Dist:``." -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -18987,7 +19031,7 @@ msgstr "" "Iloj skribantaj metadatenojn DEVAS sciigi pri eraro, se du kampoj ``Provides-" "Extra:`` konfliktus post normigo." -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -18997,11 +19041,110 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +#, fuzzy +#| msgid "Supported-Platform (multiple use)" +msgid "Import-Name (multiple use)" +msgstr "Supported-Platform (plurfoje uzebla)" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +#, fuzzy +#| msgid "Supported-Platform (multiple use)" +msgid "Import-Namespace (multiple use)" +msgstr "Supported-Platform (plurfoje uzebla)" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "Malofte uzataj kampoj" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -19013,7 +19156,7 @@ msgstr "" "klasas, kiel ilo interpretu ilin por malfermita indeksoservilo kiel `PyPI " "`__." -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -19023,11 +19166,11 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "Provides-Dist (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 msgid "" "Each entry contains a string naming a Distutils project which is contained " "within this distribution. This field *must* include the project identified " @@ -19037,7 +19180,7 @@ msgstr "" "distribuo enhavas. Tiu kampo *devas* inkluzivi la projekton identigitan en " "la kampo ``Name``, sekvita de la versio: Nomo (Versio)." -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -19046,7 +19189,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -19057,7 +19200,7 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 msgid "" "A version declaration may be supplied and must follow the rules described " "in :doc:`version-specifiers`. The distribution's version number will be " @@ -19067,11 +19210,11 @@ msgstr "" "`version-specifiers`. Se nenio estas provizita, tio implicas la versian " "numeron de la distribuo." -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "Obsoletes-Dist (plurfoje uzebla)" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 msgid "" "Each entry contains a string describing a distutils project's distribution " "which this distribution renders obsolete, meaning that the two projects " @@ -19081,7 +19224,7 @@ msgstr "" "kiun ĉi tiu distribuo evitindigas – alivorte, oni ne instalu ambaŭ " "projektojn samtempe." -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." @@ -19089,7 +19232,7 @@ msgstr "" "Versio-deklaroj povas esti provizitaj. Versia numero devas observi la " "formon en :doc:`version-specifiers`." -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 " @@ -19099,11 +19242,11 @@ msgstr "" "Gorgon 2.3 fariĝis Torqued Python 1.0. Kiam oni instalas Torqued Python, do " "oni malinstalu la distribuon de Gorgon." -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "Evitindaj Kampoj" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -19116,24 +19259,24 @@ msgstr "" "(post kiam ili nur estos validaj en dosieroj uzantaj metadateno-version " "antaŭ la forigo). Ilo AVERTU uzanton, se troviĝas evitinda kampo." -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "Laŭ :pep:`753`, uzu :ref:`core-metadata-project-url` anstataŭe." -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "Signoĉeno de la retadreso de la ĉefpaĝo de la distribuo." -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -19144,15 +19287,15 @@ msgstr "" "elŝutebla. (Tio signifas, ke la retadreso ne povas esti «``.../BeagleVote-" "latest.tgz``», sed devas esti «``.../BeagleVote-0.45.tgz``».)" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "Requires" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "anstataŭe uzu ``Requires-Dist``" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." @@ -19160,7 +19303,7 @@ msgstr "" "Ĉiu ero enhavas signiĉenon priskribantan alian modulon aŭ pakon postulatan " "de tiu pako." -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 " @@ -19170,7 +19313,7 @@ msgstr "" "uzebla kun la ``import``-aserto, laŭvole sekvita de versio-deklaro en rondaj " "krampoj." -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -19181,7 +19324,7 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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." @@ -19189,14 +19332,14 @@ msgstr "" "Iom ajn da kondiĉaj operatoroj validas. Ekzemple, ``>1.0, !=1.3.4, <2.0`` " "estas valida versio-deklaro." -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" "Jen kelkaj eblaj postulo-signoĉenoj: «rfc822», «zlib (>=1.1.4)», «zope»." -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." @@ -19204,15 +19347,15 @@ msgstr "" "Ne ekzistas listo de uzendaj signoĉenoj; la komunumo de Python elektu siajn " "proprajn normojn." -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "Provides" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "anstataŭe uzu ``Provides-Dist``" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -19221,15 +19364,15 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "Obsoletes" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "anstataŭe uzu ``Obsoletes-Dist``" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 msgid "" "Each entry contains a string describing a package or module that this " "package renders obsolete, meaning that the two packages should not be " @@ -19239,7 +19382,7 @@ msgstr "" "malnoviĝintigas, tiel ke la du pakaĵoj ne estu instalitaj kune. Oni povas " "provizi versio-deklarojn." -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 " @@ -19249,67 +19392,99 @@ msgstr "" "Gorgon 2.3 fariĝis Torqued Python 1.0. Kiam oni instalas Torqued Python, do " "oni malinstalu la pakon Gorgon." -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." -msgstr "Aŭgusto 2024: Kernaj metadatenoj 2.4 estis aprobitaj per :pep:`639`." - -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." -msgstr "Aldonis la kampon ``License-Expression``." - -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." -msgstr "Aldonis la kampon ``License-File``." - -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." -msgstr "Marto 2022: Kernaj metadatenoj 2.3 estis aprobitaj per :pep:`685`." - -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." -msgstr "Devigis normigon de nomoj de ekstraĵoj." +#: ../source/specifications/core-metadata.rst:1037 +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:935 -msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." -msgstr "Oktobro 2020: Kernaj metadatenoj 2.2 estis aprobitaj per :pep:`643`." +#: ../source/specifications/core-metadata.rst:1039 +#, 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`:" -#: ../source/specifications/core-metadata.rst:937 -msgid "Added the ``Dynamic`` field." -msgstr "Aldonis la kampon ``Dynamic``." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +msgstr "Februaro 2010: Kernaj metadatenoj 1.2 estis aprobitaj per :pep:`345`." -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:1043 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "Februaro 2018: Kernaj metadatenoj 2.1 estis aprobitaj per :pep:`566`." -#: ../source/specifications/core-metadata.rst:941 +#: ../source/specifications/core-metadata.rst:1045 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "Aldonis ``Description-Content-Type`` kaj ``Provides-Extra``." -#: ../source/specifications/core-metadata.rst:942 +#: ../source/specifications/core-metadata.rst:1046 msgid "Added canonical method for transforming metadata to JSON." msgstr "Aldonis kanonan metodon por transformi metadatenojn al JSON." -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:1047 msgid "Restricted the grammar of the ``Name`` field." msgstr "Restriktis la gramatikon de la kampo ``Name``." -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." -msgstr "Februaro 2010: Kernaj metadatenoj 1.2 estis aprobitaj per :pep:`345`." +#: ../source/specifications/core-metadata.rst:1049 +msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." +msgstr "Oktobro 2020: Kernaj metadatenoj 2.2 estis aprobitaj per :pep:`643`." -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" -msgstr "Aprilo 2003: Kernaj metadatenoj 1.1 estis aprobitaj per :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1051 +msgid "Added the ``Dynamic`` field." +msgstr "Aldonis la kampon ``Dynamic``." -#: ../source/specifications/core-metadata.rst:949 -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:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +msgstr "Marto 2022: Kernaj metadatenoj 2.3 estis aprobitaj per :pep:`685`." -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." +msgstr "Devigis normigon de nomoj de ekstraĵoj." + +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +msgstr "Aŭgusto 2024: Kernaj metadatenoj 2.4 estis aprobitaj per :pep:`639`." + +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." +msgstr "Aldonis la kampon ``License-Expression``." + +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." +msgstr "Aldonis la kampon ``License-File``." + +#: ../source/specifications/core-metadata.rst:1062 +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 "" + +#: ../source/specifications/core-metadata.rst:1066 +#, 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`." + +#: ../source/specifications/core-metadata.rst:1068 +#, fuzzy +#| msgid "Added the ``Dynamic`` field." +msgid "Added the ``Import-Name`` field." +msgstr "Aldonis la kampon ``Dynamic``." + +#: ../source/specifications/core-metadata.rst:1069 +#, fuzzy +#| msgid "Added the ``Dynamic`` field." +msgid "Added the ``Import-Namespace`` field." +msgstr "Aldonis la kampon ``Dynamic``." + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "Marklingvo reStructuredText: https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "RFC 822 Long-Ĉapaj Kampoj: :rfc:`822#section-3.1.1`" @@ -19318,8 +19493,13 @@ msgid "Dependency Groups" msgstr "Dependecaj Grupoj" #: ../source/specifications/dependency-groups.rst:7 +#, fuzzy +#| 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." msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" @@ -19328,8 +19508,13 @@ msgstr "" "projektaj metadatenoj post konstruado." #: ../source/specifications/dependency-groups.rst:11 +#, fuzzy +#| 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." msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" @@ -19338,8 +19523,13 @@ msgstr "" "kolekto de rilataj programetoj." #: ../source/specifications/dependency-groups.rst:15 +#, fuzzy +#| msgid "" +#| "Fundamentally, Dependency Groups should be thought of as being a " +#| "standardized subset of the capabilities of ``requirements.txt`` files " +#| "(which are ``pip``-specific)." msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -19365,8 +19555,14 @@ msgid "The ``[dependency-groups]`` Table" msgstr "La Tabelo ``[dependency-groups]``" #: ../source/specifications/dependency-groups.rst:41 +#, fuzzy +#| 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." msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -19476,11 +19672,17 @@ msgid "Package Building" msgstr "Konstruado de Pako" #: ../source/specifications/dependency-groups.rst:104 +#, fuzzy +#| 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." 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." +"dependency groups." msgstr "" "Konstrua malfasado DEVAS NE inkluzivi datenon pri Dependecaj Grupoj en " "konstruita distribuo kiel pakan metadatenon. Tio signifas, ke la dosiero " @@ -19488,8 +19690,14 @@ msgstr "" "inkluzivu referenceblan kampon enhavantan Dependecan Grupon." #: ../source/specifications/dependency-groups.rst:108 +#, fuzzy +#| 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." msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -19504,9 +19712,14 @@ msgid "Installing Dependency Groups & Extras" msgstr "Instali Dependecajn Grupojn kaj Ekstraĵojn" #: ../source/specifications/dependency-groups.rst:116 +#, fuzzy +#| 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." msgid "" "There is no syntax or specification-defined interface for installing or " -"referring to Dependency Groups. Tools are expected to provide dedicated " +"referring to dependency groups. Tools are expected to provide dedicated " "interfaces for this purpose." msgstr "" "Ne ekzistas sintakso aŭ specifo-difinita interfaco por instalado aŭ menciado " @@ -19515,10 +19728,10 @@ 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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -19528,23 +19741,31 @@ msgstr "Valideckontrolo kaj Kongrueco" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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 +#, fuzzy +#| msgid "" +#| "Tools SHOULD error when evaluating or processing unrecognized data in " +#| "Dependency Groups." msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" "Ilo SCIIGU pri eraro, kiam ĝi renkontas aŭ pritraktas nerekonatan datenon en " "Dependeca Grupo." #: ../source/specifications/dependency-groups.rst:138 +#, fuzzy +#| msgid "" +#| "Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +#| "unless they have a need to do so." msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" "Ilo NE KONTROLU malprokraste la validecon de la enhavoj de *ĉiuj* Dependecaj " @@ -19560,10 +19781,15 @@ msgstr "" "la grupo ``foo``, kaj nur sciigos pri eraro se la grupo ``bar`` estas uzata:" #: ../source/specifications/dependency-groups.rst:152 +#, fuzzy +#| 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." 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." +"contents of all dependency groups." msgstr "" "Kelkfoje, ilo tamen povas esti pli strikta. Ekzemple, erardetektilo kaj " "valideckontrolilo celas kontroli, ĉu la enhavoj de ĉiuj Dependecaj Grupoj " @@ -20183,7 +20409,15 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" @@ -20191,12 +20425,12 @@ msgstr "" "pip, la rekomendata instalilo por Python-pakoj (http://pip.readthedocs.org/" "en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 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:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -22787,7 +23021,7 @@ msgid "" msgstr "Jen ekzemplo de kiel legi fluon da arbitraj metadatenaj blokoj." #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "Rekomendoj" @@ -25734,7 +25968,7 @@ msgid "``dependencies``" msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "``dynamic``" @@ -25746,23 +25980,35 @@ msgstr "``entry-points``" msgid "``gui-scripts``" msgstr "``gui-scripts``" -#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +#, fuzzy +#| msgid "``name``" +msgid "``import-names``" +msgstr "``name``" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:144 msgid "``maintainers``" msgstr "``maintainers``" -#: ../source/specifications/pyproject-toml.rst:144 +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "``optional-dependencies``" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "Tipo de TOML_: signoĉeno" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" @@ -25770,11 +26016,11 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Name `" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "La nomo de la projekto." -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." @@ -25782,7 +26028,7 @@ msgstr "" "Ilo :ref:`NORMIGU ` ĉi tiun nomon tuj post legado por " "interna kohereco." -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" @@ -25790,7 +26036,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Version " "`" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." @@ -25798,11 +26044,11 @@ msgstr "" "La versio de la projekto laŭ :ref:`la specifo pri versispecifiloj `." -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "Uzantoj *PREFERU* specifi jam normigitajn versiojn." -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" @@ -25810,7 +26056,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Summary " "`" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." @@ -25818,11 +26064,11 @@ msgstr "" "La resuma priskribo pri la projekto en unu linio. Ilo POVAS sciigi eraron, " "se ĝi inkluzivas plurajn liniojn." -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "Tipo de TOML_: signoĉeno aŭ tabelo" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type ` kaj :ref:`Description-Content-Type `" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "La plena priskribo de la projekto (t.e. la README)." -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -25860,7 +26106,7 @@ msgstr "" "``dynamic``. Por ĉia nerekonebla sufikso, kiam enhavtipo ne estas " "disponigita, ilo DEVAS sciigi pri eraro." -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -25869,7 +26115,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -25888,7 +26134,7 @@ msgstr "" "enhavtipo subtenata de la :ref:`kernaj metadatenoj `. Alikaze " "ilo DEVAS sciigi pri eraro por nesubtenataj enhavtipoj." -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" @@ -25896,11 +26142,11 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Requires-" "Python `" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "La postuloj de la projekto pri versioj de Python." -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" @@ -25908,7 +26154,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`License-" "Expression `" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`. " @@ -25918,15 +26164,23 @@ msgstr "" "laŭ :doc:`/specifications/license-expression`. Ilo KONTROLU la validecon de " "la esprimo kaj NORMIGU la usklecon." -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "Malnova normo" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "Tipo de TOML_: tabelo" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" @@ -25934,7 +26188,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`License " "`" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -25951,20 +26205,22 @@ msgstr "" "disaŭaj: ilo DEVAS sciigi pri eraro, se la metadatenoj enhavas ambaŭ " "ŝlosilojn." -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" "La tabelajn subŝlosilojn malrekomendis :pep:`639`, rekomendante anstaŭe la " "signoĉenan valoron." -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "Tipo de TOML_: listo de signoĉenoj" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" @@ -25972,7 +26228,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`License-" "File `" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -25981,7 +26237,7 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." @@ -25989,13 +26245,13 @@ msgstr "" "La signoĉeno DEVAS enhavi validan patroneon laŭ la normo :doc:`/" "specifications/glob-patterns`." -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" "Patroneo estas relativa al la dosierujo enhavanta :file:`pyproject.toml`," -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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." @@ -26003,11 +26259,11 @@ msgstr "" "Ilo DEVAS supozi, ke la enhavo de licenco-dosiero estas valida UTF-8-kodita " "teksto, kaj KONTROLU la validecon kaj SCIIGU eraron, se ĝi ne validas." -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "Konstruiloj:" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." @@ -26015,7 +26271,7 @@ msgstr "" "DEVAS inkluzivi ĉiujn dosierojn kongruajn al enlistigita patroneo en ĉiuj " "distribuaj arĥivoj." -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." @@ -26023,7 +26279,7 @@ msgstr "" "DEVAS enlistigi ĉiun kongruan dosierlokon sub kampo ``License-File`` en la " "Kernaj Metadatenoj." -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -26038,11 +26294,11 @@ msgstr "" "ne inkluzivi ajanan dosieron, aŭ uzi sian propran logikon por trovi la " "taŭgajn dosierojn en la distribuo." -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "Tipo de TOML_: Listo de tabeloj de signoĉenaj ŝlosiloj kaj valoroj" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -26054,7 +26310,7 @@ msgstr "" "ref:`Maintainer `, kaj :ref:`Maintainer-email " "`" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 " @@ -26064,7 +26320,7 @@ msgstr "" "signifo dependas de interpretad – ĝi povas listigi la originalajn aŭ ĉefajn " "verkintojn, aktualajn mastrumantojn, aŭ posedantojn de la pako." -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." @@ -26072,7 +26328,7 @@ msgstr "" "La ŝlosilo ``maintainers`` similas al ``authors``: ĝia preciza signifo " "dependas de interpretado." -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -26087,13 +26343,13 @@ msgstr "" "esti valida retpoŝta adreso. Ambaŭ ŝlosiloj estas ellaseblaj, sed la tabelo " "devas enhavi almenaŭ unu el la duo." -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" "La datenoj respondas al :ref:`kernaj metadatenoj ` jene:" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." @@ -26101,7 +26357,7 @@ msgstr "" "Se nur ``name`` estas provizita, la valoro respondas al :ref:`Author ` aŭ :ref:`Maintainer ` depende." -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` aŭ :ref:`Maintainer-email ` depende." -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 msgid "" "If both ``email`` and ``name`` are provided, the value goes in :ref:`Author-" "email ` or :ref:`Maintainer-email ` aŭ :ref:`Maintainer-email ` depende, en la formo ``{name} <{email}>``." -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "Oni apartigu plurajn valorojn per komoj." -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" @@ -26133,11 +26389,11 @@ msgstr "" "Respondas al la :ref:`kerna metadatena ` kampo: :ref:" "`Keywords `" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "La ŝlosilvortoj pri la projekto." -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" @@ -26145,11 +26401,11 @@ msgstr "" "Respondas al la :ref:`kerna metadatena ` kampo: :ref:" "`Classifier `" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "Klasigiloj Trove rilataj al la projekto." -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -26161,11 +26417,11 @@ msgstr "" "valoro ``license`` (por la metadatena kampo ``License-Expression``) kaj " "klasigilo ``License ::`` estas uzataj." -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "Tipo de TOML_: tabelo kun ŝlosiloj kaj valoroj signoĉenaj" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" @@ -26173,7 +26429,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Project-URL " "`" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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-" @@ -26183,11 +26439,11 @@ msgstr "" "valoro estas la retadreso mem. Vidu :ref:`well-known-project-urls` por " "reguloj pri normigado kaj prezentado de bone konataj metadatenoj." -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "Enirpunktoj" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" @@ -26195,11 +26451,11 @@ msgstr "" "Tipo de TOML_: tabelo (``[project.scripts]``, ``[project.gui-scripts]``, kaj " "``[project.entry-points]``)" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr ":ref:`Specifo pri enirpunktoj `" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -26211,7 +26467,7 @@ msgstr "" "`. La ŝlosilo de la tabelo estas la nomo de la enirpunkto; la " "valoro estas la referenco al objekto." -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 msgid "" "The ``[project.gui-scripts]`` table corresponds to the ``gui_scripts`` group " "in the :ref:`entry points specification `. Its format is the " @@ -26221,7 +26477,7 @@ msgstr "" "en :ref:`la specifo pri enirpunktoj `. Ĝia formo estas sama " "kiel ``[project.scripts]``." -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -26234,7 +26490,7 @@ msgstr "" "subsubtabelojn; la profundo de ingado de la enirpunktogrupoj estu nur unu " "nivelo." -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -26246,7 +26502,7 @@ msgstr "" "gui_scripts]``, ĉar tiuj estus ambiguaj pro ``[project.scripts]`` kaj " "``[project.gui-scripts]``, respektive." -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" @@ -26255,7 +26511,7 @@ msgstr "" "tabelo de valoroj de listoj de signoĉenoj laŭ :pep:`508` (``optional-" "dependencies``)" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra ` kaj :ref:`Provides-Extra `" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "La (nedevigaj) dependecoj de la projektoj." -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -26281,7 +26537,7 @@ msgstr "" "valida laŭ :pep:`508`. Ĉiu signoĉeno rekte respondas al ero :ref:`Requires-" "Dist `." -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -26292,11 +26548,117 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +#, 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 `" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +#, fuzzy +msgid "Examples:" +msgstr "Ekzemploj" + +#: ../source/specifications/pyproject-toml.rst:534 +#, 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 `" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +#, fuzzy +#| msgid "Example::" +msgid "Example:" +msgstr "Ekzemple::" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "Tipo de TOML_: listo de signoĉenoj" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" @@ -26304,7 +26666,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Dynamic " "`" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -26316,7 +26678,7 @@ msgstr "" "intence nespecifitajn metadatenojn ne provizotajn far ilo, de metadatenoj " "poste provizotaj far ilo." -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." @@ -26324,7 +26686,7 @@ msgstr "" "Konstrua malfasado DEVAS observi statike specifitan metadatenon (de ŝlosilo " "ne en ``dynamic``)." -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." @@ -26332,7 +26694,7 @@ msgstr "" "Konstrua malfasado DEVAS sciigi pri eraro, se la metadatenoj specifas " "``name`` en ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -26341,7 +26703,7 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Optional\", the metadata MAY list it in ``dynamic`` if the expectation is " @@ -26351,7 +26713,7 @@ msgstr "" "kiel «Nedeviga», do la metadateno POVAS meti ĝin en ``dynamic``, se oni " "atendas, ke konstrua malfasado poste provizos la datenon pri la ŝlosilo." -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." @@ -26359,7 +26721,7 @@ msgstr "" "Konstrua malfasado DEVAS sciigi pri eraro, se la metadatenoj specifas unu " "ŝlosilon kaj statike kaj en ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -26371,7 +26733,7 @@ msgstr "" "ununura maniero por permesi al ilo plenigi metadatenojn, kaj la uzanto devas " "eksplici la aŭtomatan plenigadon)." -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 " @@ -26381,11 +26743,11 @@ msgstr "" "en ``dynamic`` sed la konstrua malfasado ne povis determini ĝian datenon " "(estas akcepteble, se la ilo determinas, ke la dateno manku)." -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "Ĉiaj ilaj agordoj: la tabelo ``[tool]``" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -26397,7 +26759,7 @@ msgstr "" "`_ konservus siajn agordojn en ``[tool." "flit]``." -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -26405,7 +26767,7 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 msgid "" "May 2016: The initial specification of the ``pyproject.toml`` file, with " "just a ``[build-system]`` containing a ``requires`` key and a ``[tool]`` " @@ -26415,7 +26777,7 @@ msgstr "" "``[build-system]`` enhavanta ŝlosilon ``requires`` kaj tabelon ``[tool]``, " "estis aprobita per :pep:`518`." -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." @@ -26423,7 +26785,7 @@ msgstr "" "Novembro 2020: La specifo de la tabelo ``[project]`` estis aprobita per :pep:" "`621`." -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." @@ -26432,6 +26794,18 @@ msgstr "" "files`` estis aldonita, kaj la klasigiloj ``License::`` estis evitindigitaj " "per :pep:`639`." +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "Registri instalitajn projektojn" @@ -28602,94 +28976,7 @@ msgstr "" "dosierformon de specifita deponeja retadreso, kaj (dum sendado de peto al " "tiu servilo) sendi ĉapon ``Accept`` *nur* inkluzivantan la ĝustan enhavtipon." -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "Subteno de TUF – PEP 458" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" -":pep:`458` postulas, ke ĉiu API-respondo estu haketebla kaj unike " -"identigebla per dosierloko relativa al la deponeja radiko. Por deponejo de " -"simpla API, la cela dosierloko estas la Radiko de nia API (ekz. ``/simple/`` " -"ĉe PyPI). Tio estas problema dum uzado de la API per TUF-kliento anstataŭ " -"ordinara HTTP-kliento, ĉar la TUF-kliento ne povas pritrakti la fakton, ke " -"celo povas havi plurajn malsamajn prezentaojn de malsamaj haketaĵoj." - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" -":pep:`458` ne specifas la celan dosierlokon por la Simpla API, sed TUF " -"postulas, ke cela dosierloko estu «dosiereca»: alivorte, dosierloko kiel " -"``simple/PROJEKTO/`` ne validas, ĉar ĝi estas dosierujo." - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" -"Dankinde, la cela dosierloko *ne devas* kongrui kun la retadreso de la " -"Simpla API; ĝi povas esti simple ĵetono, kiun la elŝuta kodo povas " -"transformi al la fakta elŝutota retadreso. La samo veras por aliaj aspektoj " -"de la fakta HTTP-peto kiel la ĉapo ``Accept``." - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" -"Tamen, ŝajnas ke la nuna evoluanta branĉo de pip, kiu provas realigi :pep:" -"`458`, uzas celan dosierlokon kiel `simple/PROJEKTO/index.html``. Oni povus " -"modifi tion inkluzivante la version de la API kaj la seriigon, kiel ``simple/" -"PROJEKTO/vnd.pypi.simple.vN.FORMO``. Do la versio 1 de la HTML-formo estus " -"``simple/PROJEKTO/vnd.pypi.simple.v1.html``, dum la versio 1 de la JSON-" -"formo estus ``simple/PROJEKTO/vnd.pypi.simple.v1.json``." - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" -"Tiukaze, ĉar ``text/html`` estas sinonimo de ``application/vnd.pypi.simple." -"v1+html`` dum interagado per TUF, estas pli bone normigi al la pli " -"eksplicita nomo." - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" -"Simile la metaversio ``latest`` ne inkluziviĝu en la celoj; nur eksplicite " -"deklarita versio estu subtenata." - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -28700,7 +28987,7 @@ msgstr "" "tiun normon laŭ la opinioj de la aŭtoroj. Ĝi **ne** devige postulas tiajn " "decidojn." -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -28709,11 +28996,11 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "Ni rekomendas, ke serviloj faru la jenon:" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 " @@ -28723,7 +29010,7 @@ msgstr "" "marĉandadon, por tiel longe kiel oni racie povas, aŭ minimume tiel longe " "kiel oni ricevas iom da trafiko uzanta la HTML-respondojn." -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -28734,7 +29021,7 @@ msgstr "" "dosiertipon, ĝi ne liveru respondon ``300 Multiple Choice``; anstataŭe ĝi " "liveru respondon ``406 Not Acceptable``." -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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." @@ -28742,7 +29029,7 @@ msgstr "" "Tamen, se oni elektas uzi la finpunktan agordon, oni prefere liveru " "respondon ``200 OK`` en la atendata enhavtipo de tiu finpunkto." -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -28751,11 +29038,11 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "Ni rekomendas, ke klientoj faru la jenon:" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." @@ -28763,14 +29050,14 @@ msgstr "" "Subtenu ĉiujn 3 enhavtipojn priskribitajn en ĉi tiu specifo, per servila " "enhavo-marĉandado, tiel longe kiel racie eblas." -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" "Dum konstruado de ĉapo ``Accept``, inkluzivu ĉiujn enhavtipojn subtenatajn." -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -28779,7 +29066,7 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 " @@ -28789,7 +29076,7 @@ msgstr "" "valoron ``;q=0.01`` sur la malnova enhavtipo ``text/html``, krom se tiu " "estas la sola enhavtipo, kiun vi petas." -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." @@ -28797,7 +29084,7 @@ msgstr "" "Eksplicite elektu la version serĉatan, anstataŭ uzi la metadatenan version " "``latest``, dum ordinara funkciado." -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." @@ -28805,19 +29092,19 @@ msgstr "" "Kontrolu la ``Content-Type`` de la respondo, kaj certigu, ke ĝi kongruas kun " "io atendata de vi." -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "Septembro 2015: unua versio de la HTML-formo, en :pep:`503`" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "Julio 2016: Metadateno Requires-Python, en ĝisdatigo al :pep:`503`" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "Majo 2019: Subteno de «fortiro», en :pep:`592`" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" @@ -28825,14 +29112,14 @@ msgstr "" "Julio 2020: Versia konvencio de API kaj metadatenoj, kaj deklaro de la HTML-" "formo kiel versio 1 de la API, en :pep:`629`" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" "Majo 2021: provizi pakajn metadatenojn sendepende de pako, laŭ :pep:`658`" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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`" @@ -28840,7 +29127,7 @@ msgstr "" "Majo 2022: komenca versio de la JSON-formo, kun meĥanismo por kliento elekti " "inter ili, kaj deklaro de ambaŭ formoj kiel versio 1 de la API, en :pep:`691`" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" @@ -28848,7 +29135,7 @@ msgstr "" "Oktobro 2022: projekta versio kaj dosiera grando kaj alŝuta tempo en la " "formo JSON laŭ :pep:`700`" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" @@ -28856,7 +29143,7 @@ msgstr "" "Junio 2023: ŝanĝi la nomon de la kampo provizantan pakajn metadatenojn " "sendepende de pako laŭ :pep:`714`" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -28864,7 +29151,7 @@ msgstr "" "Novembro 2024: originpruvaj metadatenoj en la formoj HTML kaj JSON, en :pep:" "`740`" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 #, fuzzy #| msgid "" #| "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" @@ -28875,7 +29162,7 @@ msgstr "" "Novembro 2024: originpruvaj metadatenoj en la formoj HTML kaj JSON, en :pep:" "`740`" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" @@ -33439,6 +33726,86 @@ msgstr "" "komencanto pri Python-pakado, recomendate estas nur uzi *ordinarajn pakojn* " "kaj ``__init__.py`` (eĉ se tiu dosiero estas malplena)." +#~ msgid "TUF Support - PEP 458" +#~ msgstr "Subteno de TUF – PEP 458" + +#~ msgid "" +#~ ":pep:`458` requires that all API responses are hashable and that they can " +#~ "be uniquely identified by a path relative to the repository root. For a " +#~ "Simple API repository, the target path is the Root of our API (e.g. ``/" +#~ "simple/`` on PyPI). This creates challenges when accessing the API using " +#~ "a TUF client instead of directly using a standard HTTP client, as the TUF " +#~ "client cannot handle the fact that a target could have multiple different " +#~ "representations that all hash differently." +#~ msgstr "" +#~ ":pep:`458` postulas, ke ĉiu API-respondo estu haketebla kaj unike " +#~ "identigebla per dosierloko relativa al la deponeja radiko. Por deponejo " +#~ "de simpla API, la cela dosierloko estas la Radiko de nia API (ekz. ``/" +#~ "simple/`` ĉe PyPI). Tio estas problema dum uzado de la API per TUF-" +#~ "kliento anstataŭ ordinara HTTP-kliento, ĉar la TUF-kliento ne povas " +#~ "pritrakti la fakton, ke celo povas havi plurajn malsamajn prezentaojn de " +#~ "malsamaj haketaĵoj." + +#~ msgid "" +#~ ":pep:`458` does not specify what the target path should be for the Simple " +#~ "API, but TUF requires that the target paths be \"file-like\", in other " +#~ "words, a path like ``simple/PROJECT/`` is not acceptable, because it " +#~ "technically points to a directory." +#~ msgstr "" +#~ ":pep:`458` ne specifas la celan dosierlokon por la Simpla API, sed TUF " +#~ "postulas, ke cela dosierloko estu «dosiereca»: alivorte, dosierloko kiel " +#~ "``simple/PROJEKTO/`` ne validas, ĉar ĝi estas dosierujo." + +#~ msgid "" +#~ "The saving grace is that the target path does not *have* to actually " +#~ "match the URL being fetched from the Simple API, and it can just be a " +#~ "sigil that the fetching code knows how to transform into the actual URL " +#~ "that needs to be fetched. This same thing can hold true for other aspects " +#~ "of the actual HTTP request, such as the ``Accept`` header." +#~ msgstr "" +#~ "Dankinde, la cela dosierloko *ne devas* kongrui kun la retadreso de la " +#~ "Simpla API; ĝi povas esti simple ĵetono, kiun la elŝuta kodo povas " +#~ "transformi al la fakta elŝutota retadreso. La samo veras por aliaj " +#~ "aspektoj de la fakta HTTP-peto kiel la ĉapo ``Accept``." + +#~ msgid "" +#~ "However, it appears that the current WIP branch against pip that attempts " +#~ "to implement :pep:`458` is using a target path like ``simple/PROJECT/" +#~ "index.html``. This could be modified to include the API version and " +#~ "serialization format using something like ``simple/PROJECT/vnd.pypi." +#~ "simple.vN.FORMAT``. So the v1 HTML format would be ``simple/PROJECT/vnd." +#~ "pypi.simple.v1.html`` and the v1 JSON format would be ``simple/PROJECT/" +#~ "vnd.pypi.simple.v1.json``." +#~ msgstr "" +#~ "Tamen, ŝajnas ke la nuna evoluanta branĉo de pip, kiu provas realigi :pep:" +#~ "`458`, uzas celan dosierlokon kiel `simple/PROJEKTO/index.html``. Oni " +#~ "povus modifi tion inkluzivante la version de la API kaj la seriigon, kiel " +#~ "``simple/PROJEKTO/vnd.pypi.simple.vN.FORMO``. Do la versio 1 de la HTML-" +#~ "formo estus ``simple/PROJEKTO/vnd.pypi.simple.v1.html``, dum la versio 1 " +#~ "de la JSON-formo estus ``simple/PROJEKTO/vnd.pypi.simple.v1.json``." + +#~ msgid "" +#~ "In this case, since ``text/html`` is an alias to ``application/vnd.pypi." +#~ "simple.v1+html`` when interacting through TUF, it likely will make the " +#~ "most sense to normalize to the more explicit name." +#~ msgstr "" +#~ "Tiukaze, ĉar ``text/html`` estas sinonimo de ``application/vnd.pypi." +#~ "simple.v1+html`` dum interagado per TUF, estas pli bone normigi al la pli " +#~ "eksplicita nomo." + +#~ msgid "" +#~ "Likewise the ``latest`` metaversion should not be included in the " +#~ "targets, only explicitly declared versions should be supported." +#~ msgstr "" +#~ "Simile la metaversio ``latest`` ne inkluziviĝu en la celoj; nur " +#~ "eksplicite deklarita versio estu subtenata." + +#~ msgid "`not yet `_" +#~ msgstr "`ankoraŭ ne `_" + +#~ msgid "`Vagrant `_" +#~ msgstr "`Vagrant `_" + #, fuzzy #~| msgid ":ref:`pyproject-toml-spec`" #~ msgid "**Inspiration**: :ref:` pyproject-tool-table`" @@ -33689,10 +34056,6 @@ msgstr "" #~ "Multaj konstruaj malfasadoj aŭtomate inkluzivas licencajn dosierojn en " #~ "pakojn. Vidu la dokumentaron de via malfasado por pli da detaloj." -#, fuzzy -#~ msgid "Examples:" -#~ msgstr "Ekzemploj" - #~ msgid "The summary description of the project." #~ msgstr "La resuma priskribo de la projekto." diff --git a/locales/es/LC_MESSAGES/messages.po b/locales/es/LC_MESSAGES/messages.po index b50cbbc83..f18db1c6b 100644 --- a/locales/es/LC_MESSAGES/messages.po +++ b/locales/es/LC_MESSAGES/messages.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2025-05-01 09:08+0000\n" "Last-Translator: Joseph Hale \n" "Language-Team: Spanish `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4907,7 +4907,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4915,12 +4915,12 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 #, fuzzy msgid "``pyproject.toml``" msgstr "Creación de pyproject.toml" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4937,68 +4937,68 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 #, fuzzy msgid "Installing the package with ``pipx``" msgstr "Instalación de paquetes" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "Conclusión" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -5346,7 +5346,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7814,7 +7814,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -10092,8 +10092,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -10121,8 +10121,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -10155,7 +10155,7 @@ msgid "Dependencies and requirements" msgstr "Archivos de requisitos" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -10185,8 +10185,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -10239,7 +10239,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -10251,7 +10251,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -10263,8 +10263,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -10366,7 +10366,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -10374,8 +10374,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -10413,8 +10413,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 #, fuzzy msgid "``license-files``" msgstr "Dependencias externas" @@ -10466,8 +10466,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10479,7 +10479,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10506,8 +10506,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -11126,7 +11126,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -13045,10 +13045,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -13059,41 +13059,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -13101,30 +13105,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -13137,13 +13141,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -13153,24 +13157,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "Seguridad" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -13181,11 +13185,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13968,7 +13972,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13979,9 +13983,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14724,7 +14728,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14792,7 +14796,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14814,23 +14818,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14914,39 +14918,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14954,19 +14973,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14974,7 +14993,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14982,7 +15001,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14990,31 +15009,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -15128,76 +15147,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "Responsable" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -15205,7 +15224,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -15215,32 +15234,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -15248,50 +15276,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -15299,64 +15327,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -15364,13 +15392,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -15378,25 +15406,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -15404,18 +15432,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -15424,13 +15452,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -15438,20 +15466,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15459,7 +15487,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15469,11 +15497,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15481,7 +15604,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15491,18 +15614,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15511,7 +15634,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15522,42 +15645,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15566,24 +15689,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15591,29 +15714,29 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 #, fuzzy msgid "Requires" msgstr "Archivo de requisitos" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15624,33 +15747,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15659,89 +15782,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15751,21 +15898,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15786,7 +15933,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15874,12 +16021,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15894,17 +16041,17 @@ msgstr "Instalando \"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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15915,7 +16062,7 @@ msgstr "Etiquetas de compatibilidad con plataformas" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15924,12 +16071,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15944,7 +16091,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16494,17 +16641,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18517,7 +18672,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 #, fuzzy msgid "Recommendations" msgstr "Recomendaciones de herramientas" @@ -21117,7 +21272,7 @@ msgid "``dependencies``" msgstr "Dependencias externas" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -21129,63 +21284,73 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:144 #, fuzzy msgid "``maintainers``" msgstr "Responsable" -#: ../source/specifications/pyproject-toml.rst:144 +#: ../source/specifications/pyproject-toml.rst:146 #, fuzzy msgid "``optional-dependencies``" msgstr "Dependencias externas" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." @@ -21193,22 +21358,22 @@ msgstr "" "La descripción resumida del proyecto en una línea. Las herramientas PUEDEN " "producir un error si esto incluye varias líneas." -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -21222,7 +21387,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -21231,7 +21396,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -21243,46 +21408,54 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 #, fuzzy #| msgid "PyPA specifications" msgid "Legacy specification" msgstr "Especificaciones de PyPA" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -21292,24 +21465,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -21318,40 +21493,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -21360,11 +21535,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -21372,20 +21547,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -21394,56 +21569,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -21451,38 +21626,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -21490,14 +21665,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -21505,7 +21680,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -21513,24 +21688,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21538,7 +21713,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21549,17 +21724,110 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +#, fuzzy +msgid "Examples:" +msgstr "Ejemplos" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +#, fuzzy +msgid "Example:" +msgstr "Ejemplos" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21567,19 +21835,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21588,20 +21856,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21609,18 +21877,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21628,7 +21896,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21636,25 +21904,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -23363,70 +23643,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -23434,7 +23651,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -23443,18 +23660,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -23462,13 +23679,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -23477,23 +23694,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23502,79 +23719,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" @@ -27165,10 +27382,6 @@ msgstr "" #~ msgid "Signing the distribution packages" #~ msgstr "Paquete de Distribución" -#, fuzzy -#~ msgid "Examples:" -#~ msgstr "Ejemplos" - #~ msgid "Give a short and long description for your project." #~ msgstr "Brinde una descripción breve y una larga del proyecto." diff --git a/locales/fa/LC_MESSAGES/messages.po b/locales/fa/LC_MESSAGES/messages.po index 7ad603fc8..c3b83fd3d 100644 --- a/locales/fa/LC_MESSAGES/messages.po +++ b/locales/fa/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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2023-02-15 07:52+0000\n" "Last-Translator: Arsalan Dehghani \n" "Language-Team: Persian `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4562,7 +4562,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4570,11 +4570,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4591,70 +4591,70 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 #, fuzzy #| msgid "Translations" msgid "Installing the package with ``pipx``" msgstr "ترجمه‌ها" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 #, fuzzy msgid "Conclusion" msgstr "ترجمه‌ها" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -5002,7 +5002,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7433,7 +7433,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9705,8 +9705,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9734,8 +9734,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9766,7 +9766,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9796,8 +9796,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9849,7 +9849,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9861,7 +9861,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9873,8 +9873,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9973,7 +9973,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9981,8 +9981,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -10020,8 +10020,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10072,8 +10072,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10085,7 +10085,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10112,8 +10112,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10731,7 +10731,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12639,10 +12639,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12653,41 +12653,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12695,30 +12699,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12731,13 +12735,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12747,24 +12751,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12775,11 +12779,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13558,7 +13562,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13569,9 +13573,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14301,7 +14305,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14369,7 +14373,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14391,23 +14395,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14491,39 +14495,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14531,19 +14550,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14551,7 +14570,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14559,7 +14578,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14567,31 +14586,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14705,76 +14724,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14782,7 +14801,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14792,32 +14811,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14825,50 +14853,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14876,64 +14904,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14941,13 +14969,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14955,25 +14983,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14981,18 +15009,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -15001,13 +15029,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -15015,20 +15043,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15036,7 +15064,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15046,11 +15074,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15058,7 +15181,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15068,18 +15191,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15088,7 +15211,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15099,42 +15222,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15143,24 +15266,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15168,28 +15291,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15200,33 +15323,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15235,89 +15358,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15327,21 +15474,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15362,7 +15509,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15449,12 +15596,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15467,17 +15614,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15487,7 +15634,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15496,12 +15643,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15516,7 +15663,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16059,17 +16206,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18075,7 +18230,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20646,7 +20801,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20658,82 +20813,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20747,7 +20912,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20756,7 +20921,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20768,46 +20933,54 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 #, fuzzy #| msgid "Specifications" msgid "Legacy specification" msgstr "مشخصات" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20817,24 +20990,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20843,40 +21018,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20885,11 +21060,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20897,20 +21072,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20919,56 +21094,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20976,38 +21151,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -21015,14 +21190,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -21030,7 +21205,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -21038,24 +21213,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21063,7 +21238,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21074,17 +21249,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21092,19 +21358,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21113,20 +21379,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21134,18 +21400,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21153,7 +21419,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21161,25 +21427,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22861,70 +23139,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22932,7 +23147,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22941,18 +23156,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22960,13 +23175,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22975,23 +23190,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23000,79 +23215,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/fil/LC_MESSAGES/messages.po b/locales/fil/LC_MESSAGES/messages.po index 1a681829f..86b9cc514 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2022-11-19 08:28+0000\n" "Last-Translator: RedFurrFox \n" "Language-Team: Filipino `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4553,7 +4553,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4561,11 +4561,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4582,67 +4582,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4990,7 +4990,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7417,7 +7417,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9683,8 +9683,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9712,8 +9712,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9744,7 +9744,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9774,8 +9774,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9827,7 +9827,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9839,7 +9839,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9851,8 +9851,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9951,7 +9951,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9959,8 +9959,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -9998,8 +9998,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10050,8 +10050,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10063,7 +10063,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10090,8 +10090,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10709,7 +10709,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12617,10 +12617,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12631,41 +12631,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12673,30 +12677,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12709,13 +12713,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12725,24 +12729,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12753,11 +12757,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13536,7 +13540,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13547,9 +13551,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14272,7 +14276,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14340,7 +14344,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14362,23 +14366,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14462,39 +14466,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14502,19 +14521,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14522,7 +14541,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14530,7 +14549,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14538,31 +14557,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14676,76 +14695,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14753,7 +14772,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14763,32 +14782,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14796,50 +14824,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14847,64 +14875,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14912,13 +14940,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14926,25 +14954,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14952,18 +14980,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14972,13 +15000,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14986,20 +15014,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15007,7 +15035,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15017,11 +15045,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15029,7 +15152,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15039,18 +15162,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15059,7 +15182,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15070,42 +15193,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15114,24 +15237,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15139,28 +15262,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15171,33 +15294,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15206,89 +15329,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15298,21 +15445,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15333,7 +15480,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15420,12 +15567,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15438,17 +15585,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15458,7 +15605,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15467,12 +15614,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15487,7 +15634,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16029,17 +16176,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18043,7 +18198,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20604,7 +20759,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20616,82 +20771,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20705,7 +20870,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20714,7 +20879,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20726,44 +20891,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20773,24 +20946,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20799,40 +20974,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20841,11 +21016,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20853,20 +21028,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20875,56 +21050,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20932,38 +21107,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20971,14 +21146,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20986,7 +21161,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20994,24 +21169,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21019,7 +21194,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21030,17 +21205,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21048,19 +21314,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21069,20 +21335,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21090,18 +21356,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21109,7 +21375,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21117,25 +21383,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22813,70 +23091,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22884,7 +23099,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22893,18 +23108,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22912,13 +23127,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22927,23 +23142,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22952,79 +23167,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/fr/LC_MESSAGES/messages.po b/locales/fr/LC_MESSAGES/messages.po index 7b7315988..186a2c27c 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2025-02-17 11:31+0000\n" "Last-Translator: Bruno Alla \n" "Language-Team: French `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4756,7 +4756,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4764,12 +4764,12 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 #, fuzzy msgid "``pyproject.toml``" msgstr "pyproject.toml" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4786,69 +4786,69 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 #, fuzzy msgid "Installing the package with ``pipx``" msgstr "Installez `pypinfo`_ à l'aide de pip." -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 #, fuzzy msgid "Conclusion" msgstr "Traductions" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -5197,7 +5197,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7648,7 +7648,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9930,8 +9930,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "``name``" @@ -9959,8 +9959,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9993,7 +9993,7 @@ msgid "Dependencies and requirements" msgstr "Fichiers requirements vs install_requires" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies`` / ``optional-dependencies``" @@ -10023,8 +10023,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "``requires-python``" @@ -10077,7 +10077,7 @@ msgid "About your project" msgstr "Configurer votre projet" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "``authors`` / ``maintainers``" @@ -10089,7 +10089,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "``description``" @@ -10101,8 +10101,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "``readme``" @@ -10211,7 +10211,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -10219,8 +10219,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "``license``" @@ -10258,8 +10258,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 #, fuzzy #| msgid "``license``" msgid "``license-files``" @@ -10312,8 +10312,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "``keywords``" @@ -10325,7 +10325,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "``classifiers``" @@ -10355,8 +10355,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "``urls``" @@ -11023,7 +11023,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "virtualenv" @@ -13001,10 +13001,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -13015,41 +13015,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -13057,30 +13061,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -13093,13 +13097,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -13109,24 +13113,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "Sécurité" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -13137,11 +13141,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13932,7 +13936,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13943,9 +13947,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14712,7 +14716,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14780,7 +14784,7 @@ 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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14802,23 +14806,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "Exemple ::" @@ -14902,39 +14906,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "Exemples::" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14942,19 +14961,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14962,7 +14981,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14970,7 +14989,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14978,31 +14997,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "Description-Content-Type" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "Mots-clés" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -15116,11 +15135,11 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "Author" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." @@ -15128,11 +15147,11 @@ msgstr "" "Une chaîne contenant le nom de l'auteur au minimum ; des informations de " "contact supplémentaires peuvent être fournies." -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "Author-email" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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." @@ -15141,8 +15160,8 @@ msgstr "" "et une adresse mail dans les formes légales pour un en-tête ``From:`` " "RFC-822." -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" @@ -15150,49 +15169,49 @@ msgstr "" "Selon la RFC-822, ce champ peut contenir plusieurs adresses mails séparées " "par une virgule ::" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "Maintainer" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "Maintainer-email" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "License" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -15200,7 +15219,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -15210,32 +15229,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -15243,50 +15271,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -15294,64 +15322,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -15359,13 +15387,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -15373,25 +15401,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -15399,18 +15427,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -15419,13 +15447,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -15433,20 +15461,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15454,7 +15482,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15464,11 +15492,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15476,7 +15599,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15486,18 +15609,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15506,7 +15629,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15517,42 +15640,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15561,24 +15684,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15586,28 +15709,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "Requires" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15618,33 +15741,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "Provides" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15653,91 +15776,123 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "Obsoletes" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" +"Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" +"`241`." -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +#, fuzzy +#| msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" +"Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" +"`241`." -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." -msgstr "Restreint les noms supplémentaires à être normalisés." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." -msgstr "" +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." +msgstr "Restreint les noms supplémentaires à être normalisés." -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +#, fuzzy +#| msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" "Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" "`241`." -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15747,21 +15902,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15782,7 +15937,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15870,12 +16025,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15889,17 +16044,17 @@ msgstr "Format d'installation" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15909,7 +16064,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15918,12 +16073,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15938,7 +16093,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16493,17 +16648,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18521,7 +18684,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -21227,7 +21390,7 @@ msgid "``dependencies``" msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "``dynamic``" @@ -21239,82 +21402,94 @@ msgstr "``entry-points``" msgid "``gui-scripts``" msgstr "``gui-scripts``" -#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +#, fuzzy +#| msgid "``name``" +msgid "``import-names``" +msgstr "``name``" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:144 msgid "``maintainers``" msgstr "``maintainers``" -#: ../source/specifications/pyproject-toml.rst:144 +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "``optional-dependencies``" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -21328,7 +21503,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -21337,7 +21512,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -21349,46 +21524,54 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 #, fuzzy #| msgid "Specification" msgid "Legacy specification" msgstr "Spécification" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -21398,24 +21581,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -21424,40 +21609,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -21466,11 +21651,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -21478,20 +21663,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -21500,56 +21685,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -21557,38 +21742,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -21596,14 +21781,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -21611,7 +21796,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -21619,24 +21804,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21644,7 +21829,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21655,17 +21840,111 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +#, fuzzy +msgid "Examples:" +msgstr "Exemples" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +#, fuzzy +#| msgid "Example::" +msgid "Example:" +msgstr "Exemple ::" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21673,19 +21952,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21694,20 +21973,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21715,18 +21994,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "Configuration arbitraire d'outils : la table ``[tool]``" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21734,7 +22013,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21742,25 +22021,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -23456,70 +23747,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -23527,7 +23755,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -23536,18 +23764,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -23555,13 +23783,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -23570,23 +23798,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23595,79 +23823,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" @@ -27255,10 +27483,6 @@ msgstr "" #~ msgid "Additional file information" #~ msgstr "Outils supplémentaires" -#, fuzzy -#~ msgid "Examples:" -#~ msgstr "Exemples" - #~ msgid "Wheel vs Egg" #~ msgstr "Wheel vs Egg" diff --git a/locales/frc/LC_MESSAGES/messages.po b/locales/frc/LC_MESSAGES/messages.po index b6a8fd228..b626a9dbc 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -3931,7 +3931,7 @@ msgid "Column" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "" @@ -4296,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "" @@ -4514,14 +4514,14 @@ msgid "" "the file :file:`greet.py`, named after the main module:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -4533,13 +4533,13 @@ msgid "" "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4547,7 +4547,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4555,11 +4555,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4576,67 +4576,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4984,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7411,7 +7411,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9677,8 +9677,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9706,8 +9706,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9738,7 +9738,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9768,8 +9768,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9821,7 +9821,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9833,7 +9833,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9845,8 +9845,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9945,7 +9945,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9953,8 +9953,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -9992,8 +9992,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10044,8 +10044,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10057,7 +10057,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10084,8 +10084,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10703,7 +10703,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12611,10 +12611,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12625,41 +12625,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12667,30 +12671,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12703,13 +12707,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12719,24 +12723,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12747,11 +12751,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13530,7 +13534,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13541,9 +13545,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14266,7 +14270,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14334,7 +14338,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14356,23 +14360,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14456,39 +14460,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14496,19 +14515,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14516,7 +14535,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14524,7 +14543,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14532,31 +14551,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14670,76 +14689,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14747,7 +14766,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14757,32 +14776,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14790,50 +14818,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14841,64 +14869,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14906,13 +14934,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14920,25 +14948,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14946,18 +14974,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14966,13 +14994,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14980,20 +15008,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15001,7 +15029,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15011,11 +15039,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15023,7 +15146,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15033,18 +15156,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15053,7 +15176,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15064,42 +15187,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15108,24 +15231,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15133,28 +15256,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15165,33 +15288,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15200,89 +15323,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15292,21 +15439,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15327,7 +15474,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15414,12 +15561,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15432,17 +15579,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15452,7 +15599,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15461,12 +15608,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15481,7 +15628,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16023,17 +16170,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18037,7 +18192,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20598,7 +20753,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20610,82 +20765,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20699,7 +20864,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20708,7 +20873,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20720,44 +20885,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20767,24 +20940,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20793,40 +20968,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20835,11 +21010,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20847,20 +21022,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20869,56 +21044,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20926,38 +21101,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20965,14 +21140,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20980,7 +21155,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20988,24 +21163,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21013,7 +21188,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21024,17 +21199,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21042,19 +21308,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21063,20 +21329,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21084,18 +21350,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21103,7 +21369,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21111,25 +21377,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22807,70 +23085,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22878,7 +23093,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22887,18 +23102,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22906,13 +23121,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22921,23 +23136,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22946,79 +23161,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/gl/LC_MESSAGES/messages.po b/locales/gl/LC_MESSAGES/messages.po index e46661713..45d59d81b 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -3931,7 +3931,7 @@ msgid "Column" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "" @@ -4296,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "" @@ -4514,14 +4514,14 @@ msgid "" "the file :file:`greet.py`, named after the main module:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -4533,13 +4533,13 @@ msgid "" "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4547,7 +4547,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4555,11 +4555,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4576,67 +4576,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4984,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7411,7 +7411,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9677,8 +9677,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9706,8 +9706,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9738,7 +9738,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9768,8 +9768,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9821,7 +9821,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9833,7 +9833,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9845,8 +9845,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9945,7 +9945,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9953,8 +9953,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -9992,8 +9992,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10044,8 +10044,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10057,7 +10057,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10084,8 +10084,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10703,7 +10703,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12611,10 +12611,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12625,41 +12625,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12667,30 +12671,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12703,13 +12707,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12719,24 +12723,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12747,11 +12751,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13530,7 +13534,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13541,9 +13545,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14266,7 +14270,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14334,7 +14338,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14356,23 +14360,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14456,39 +14460,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14496,19 +14515,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14516,7 +14535,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14524,7 +14543,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14532,31 +14551,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14670,76 +14689,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14747,7 +14766,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14757,32 +14776,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14790,50 +14818,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14841,64 +14869,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14906,13 +14934,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14920,25 +14948,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14946,18 +14974,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14966,13 +14994,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14980,20 +15008,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15001,7 +15029,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15011,11 +15039,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15023,7 +15146,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15033,18 +15156,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15053,7 +15176,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15064,42 +15187,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15108,24 +15231,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15133,28 +15256,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15165,33 +15288,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15200,89 +15323,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15292,21 +15439,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15327,7 +15474,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15414,12 +15561,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15432,17 +15579,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15452,7 +15599,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15461,12 +15608,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15481,7 +15628,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16023,17 +16170,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18037,7 +18192,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20598,7 +20753,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20610,82 +20765,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20699,7 +20864,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20708,7 +20873,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20720,44 +20885,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20767,24 +20940,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20793,40 +20968,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20835,11 +21010,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20847,20 +21022,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20869,56 +21044,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20926,38 +21101,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20965,14 +21140,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20980,7 +21155,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20988,24 +21163,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21013,7 +21188,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21024,17 +21199,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21042,19 +21308,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21063,20 +21329,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21084,18 +21350,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21103,7 +21369,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21111,25 +21377,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22807,70 +23085,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22878,7 +23093,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22887,18 +23102,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22906,13 +23121,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22921,23 +23136,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22946,79 +23161,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/gmh/LC_MESSAGES/messages.po b/locales/gmh/LC_MESSAGES/messages.po index 7d1df0473..37035284a 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -3931,7 +3931,7 @@ msgid "Column" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "" @@ -4296,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "" @@ -4514,14 +4514,14 @@ msgid "" "the file :file:`greet.py`, named after the main module:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -4533,13 +4533,13 @@ msgid "" "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4547,7 +4547,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4555,11 +4555,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4576,67 +4576,67 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -4984,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7411,7 +7411,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9677,8 +9677,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9706,8 +9706,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9738,7 +9738,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9768,8 +9768,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9821,7 +9821,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9833,7 +9833,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9845,8 +9845,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -9945,7 +9945,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -9953,8 +9953,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -9992,8 +9992,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10044,8 +10044,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10057,7 +10057,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10084,8 +10084,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10703,7 +10703,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12611,10 +12611,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12625,41 +12625,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12667,30 +12671,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12703,13 +12707,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12719,24 +12723,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12747,11 +12751,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13530,7 +13534,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13541,9 +13545,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14266,7 +14270,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14334,7 +14338,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14356,23 +14360,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14456,39 +14460,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14496,19 +14515,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14516,7 +14535,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14524,7 +14543,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14532,31 +14551,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14670,76 +14689,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14747,7 +14766,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14757,32 +14776,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14790,50 +14818,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14841,64 +14869,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14906,13 +14934,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14920,25 +14948,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -14946,18 +14974,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -14966,13 +14994,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -14980,20 +15008,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15001,7 +15029,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15011,11 +15039,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15023,7 +15146,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15033,18 +15156,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15053,7 +15176,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15064,42 +15187,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15108,24 +15231,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15133,28 +15256,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15165,33 +15288,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15200,89 +15323,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15292,21 +15439,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15327,7 +15474,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15414,12 +15561,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15432,17 +15579,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15452,7 +15599,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15461,12 +15608,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15481,7 +15628,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16023,17 +16170,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18037,7 +18192,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20598,7 +20753,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20610,82 +20765,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20699,7 +20864,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20708,7 +20873,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20720,44 +20885,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20767,24 +20940,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20793,40 +20968,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20835,11 +21010,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20847,20 +21022,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20869,56 +21044,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -20926,38 +21101,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -20965,14 +21140,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -20980,7 +21155,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -20988,24 +21163,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21013,7 +21188,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21024,17 +21199,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21042,19 +21308,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21063,20 +21329,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21084,18 +21350,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21103,7 +21369,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21111,25 +21377,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22807,70 +23085,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22878,7 +23093,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22887,18 +23102,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22906,13 +23121,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -22921,23 +23136,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -22946,79 +23161,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/hi/LC_MESSAGES/messages.po b/locales/hi/LC_MESSAGES/messages.po index 0b7a06016..636e226be 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2024-09-16 10:09+0000\n" "Last-Translator: kumar Shivam \n" "Language-Team: Hindi `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4577,7 +4577,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4585,13 +4585,13 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 #, fuzzy #| msgid "Project name" msgid "``pyproject.toml``" msgstr "परियोजना" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4608,69 +4608,69 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 #, fuzzy #| msgid "Installing packages" msgid "Installing the package with ``pipx``" msgstr "पैकेज प्रतिष्ठापन" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -5018,7 +5018,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7465,7 +7465,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9735,8 +9735,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9764,8 +9764,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9796,7 +9796,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9826,8 +9826,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9879,7 +9879,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9891,7 +9891,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9903,8 +9903,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -10003,7 +10003,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -10011,8 +10011,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -10050,8 +10050,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10102,8 +10102,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10115,7 +10115,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10142,8 +10142,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10761,7 +10761,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12669,10 +12669,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12683,41 +12683,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12725,30 +12729,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12761,13 +12765,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12777,24 +12781,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12805,11 +12809,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13590,7 +13594,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13601,9 +13605,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14328,7 +14332,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14396,7 +14400,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14418,23 +14422,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14518,39 +14522,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14558,19 +14577,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14578,7 +14597,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14586,7 +14605,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14594,31 +14613,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14732,76 +14751,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14809,7 +14828,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14819,32 +14838,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14852,50 +14880,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14903,64 +14931,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14968,13 +14996,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14982,25 +15010,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -15008,18 +15036,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -15028,13 +15056,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -15042,20 +15070,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15063,7 +15091,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15073,11 +15101,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15085,7 +15208,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15095,18 +15218,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15115,7 +15238,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15126,42 +15249,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15170,24 +15293,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15195,28 +15318,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15227,33 +15350,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15262,89 +15385,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15354,21 +15501,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15389,7 +15536,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15476,12 +15623,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15494,17 +15641,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15514,7 +15661,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15523,12 +15670,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15543,7 +15690,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16090,17 +16237,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18108,7 +18263,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20681,7 +20836,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20693,82 +20848,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20782,7 +20947,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20791,7 +20956,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20803,44 +20968,52 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 msgid "Legacy specification" msgstr "" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20850,24 +21023,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20876,40 +21051,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20918,11 +21093,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20930,20 +21105,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20952,56 +21127,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -21009,38 +21184,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -21048,14 +21223,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -21063,7 +21238,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -21071,24 +21246,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21096,7 +21271,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21107,17 +21282,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21125,19 +21391,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21146,20 +21412,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21167,18 +21433,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21186,7 +21452,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21194,25 +21460,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22896,70 +23174,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22967,7 +23182,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22976,18 +23191,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -22995,13 +23210,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -23010,23 +23225,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23035,79 +23250,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/id/LC_MESSAGES/messages.po b/locales/id/LC_MESSAGES/messages.po index a7873be1a..dd6bc12e8 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: 2025-08-11 12:33+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" "PO-Revision-Date: 2024-10-17 21:16+0000\n" "Last-Translator: oon arfiandwi \n" "Language-Team: Indonesian `." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -4598,7 +4598,7 @@ msgid "" "src layout), so initialize the command-line interface here:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -4606,11 +4606,11 @@ msgid "" "from-source-src-layout`." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` (see :ref:" @@ -4627,70 +4627,70 @@ msgid "" "Subkey>`:" msgstr "" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 #, fuzzy #| msgid "Translations" msgid "Installing the package with ``pipx``" msgstr "Penerjemahan" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 on in existence)." msgstr "" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 "" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 #, fuzzy msgid "Conclusion" msgstr "Penerjemahan" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -5038,7 +5038,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -7469,7 +7469,7 @@ msgstr "" #: ../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/pyproject-toml`" +msgid ":doc:`pip:reference/build-system`" msgstr "" #: ../source/guides/modernize-setup-py-project.rst:74 @@ -9741,8 +9741,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "" @@ -9770,8 +9770,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -9802,7 +9802,7 @@ msgid "Dependencies and requirements" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "" @@ -9832,8 +9832,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "" @@ -9885,7 +9885,7 @@ msgid "About your project" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "" @@ -9897,7 +9897,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "" @@ -9909,8 +9909,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "" @@ -10009,7 +10009,7 @@ msgid "2.4.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" +msgid "2.2.0" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:323 @@ -10017,8 +10017,8 @@ msgid "0.7.19" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "" @@ -10056,8 +10056,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" msgstr "" @@ -10108,8 +10108,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "" @@ -10121,7 +10121,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "" @@ -10148,8 +10148,8 @@ msgid "" msgstr "" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "" @@ -10767,7 +10767,7 @@ msgid "" "maintained, and it reliably works." msgstr "" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "" @@ -12675,10 +12675,10 @@ msgstr "" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" #: ../source/overview.rst:347 @@ -12689,41 +12689,45 @@ msgid "" msgstr "" #: ../source/overview.rst:351 -msgid "`Vagrant `_" +msgid "KVM on Linux" msgstr "" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " "`" msgstr "" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "" -#: ../source/overview.rst:358 +#: ../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:362 +#: ../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:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -12731,30 +12735,30 @@ msgid "" "can call it a day." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "" -#: ../source/overview.rst:380 +#: ../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:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "" -#: ../source/overview.rst:386 +#: ../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 " @@ -12767,13 +12771,13 @@ msgid "" "both deb and RPMs from the same source." msgstr "" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." msgstr "" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -12783,24 +12787,24 @@ msgid "" "jamesabel/osnap>`_, both of which wrap virtualenvs in a self-contained way." msgstr "" -#: ../source/overview.rst:412 +#: ../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 "" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "" -#: ../source/overview.rst:419 +#: ../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:422 +#: ../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 " @@ -12811,11 +12815,11 @@ msgid "" "channel=fs&q=static+vs+dynamic+linking>`_." msgstr "" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "" -#: ../source/overview.rst:433 +#: ../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 " @@ -13594,7 +13598,7 @@ msgid "" msgstr "" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -13605,9 +13609,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -14335,7 +14339,7 @@ msgid "Core metadata specifications" msgstr "" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." +msgid "This page describes version 2.5, approved in September 2025." msgstr "" #: ../source/specifications/core-metadata.rst:11 @@ -14403,7 +14407,7 @@ msgstr "" #: ../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\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" #: ../source/specifications/core-metadata.rst:55 @@ -14425,23 +14429,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "" @@ -14525,39 +14529,54 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 "" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 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:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -14565,19 +14584,19 @@ msgid "" "field are not specified in this PEP." msgstr "" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -14585,7 +14604,7 @@ msgid "" "manual as the description." msgstr "" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -14593,7 +14612,7 @@ msgid "" "means that authors should be conservative in the markup they use." msgstr "" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -14601,31 +14620,31 @@ msgid "" "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 "" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 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:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 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:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr "" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 "" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 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 "" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 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 "" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 "" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." msgstr "" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -14739,76 +14758,76 @@ msgid "" "specification to match the de facto standard." msgstr "" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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 "" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 "" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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 "" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 "" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "" -#: ../source/specifications/core-metadata.rst:439 +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." msgstr "" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 msgid "" "As of Metadata 2.4, ``License`` and ``License-Expression`` are mutually " "exclusive. If both are specified, tools which parse metadata will disregard " @@ -14816,7 +14835,7 @@ msgid "" "org/pep-0639/#deprecate-license-field>`__." msgstr "" -#: ../source/specifications/core-metadata.rst:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -14826,32 +14845,41 @@ msgid "" "license." msgstr "" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" msgstr "" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" -#: ../source/specifications/core-metadata.rst:491 +#: ../source/specifications/core-metadata.rst:486 +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 "" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -14859,50 +14887,50 @@ msgid "" "`__." msgstr "" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -14910,64 +14938,64 @@ msgid "" "`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 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:558 +#: ../source/specifications/core-metadata.rst:574 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:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 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 "" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -14975,13 +15003,13 @@ msgid "" "to the ``distutils`` distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 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:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -14989,25 +15017,25 @@ msgid "" "correspond to the version scheme used by the external dependency." msgstr "" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 msgid "" "Starting with :pep:`753`, project metadata consumers (such as the Python " "Package Index) can use a standard normalization process to discover \"well-" @@ -15015,18 +15043,18 @@ msgid "" "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 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 "" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -15035,13 +15063,13 @@ msgid "" "guarantees unambiguity)::" msgstr "" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -15049,20 +15077,20 @@ msgid "" "added to the set of requirements for the distribution." msgstr "" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -15070,7 +15098,7 @@ msgid "" "Extra:`` entries would clash after being normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -15080,11 +15108,106 @@ msgid "" "metadata versions." msgstr "" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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 "" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +msgid "" +"If a project lists the same name in both ``Import-Name`` and ``Import-" +"Namespace``, tools MUST raise an error due to ambiguity." +msgstr "" + +#: ../source/specifications/core-metadata.rst:754 +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 "" + +#: ../source/specifications/core-metadata.rst:762 +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 "" + +#: ../source/specifications/core-metadata.rst:766 +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 "" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:790 +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 "" + +#: ../source/specifications/core-metadata.rst:806 +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 "" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -15092,7 +15215,7 @@ msgid "" "open index server such as `PyPI `__." msgstr "" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -15102,18 +15225,18 @@ msgid "" "package repository." msgstr "" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 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 "" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -15122,7 +15245,7 @@ msgid "" "distribution satisfies requirements for both ``ZODB`` and ``transaction``." msgstr "" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -15133,42 +15256,42 @@ msgid "" "them installed." msgstr "" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 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 "" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 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 "" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 "" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -15177,24 +15300,24 @@ msgid "" "used." msgstr "" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:836 +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -15202,28 +15325,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 "" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -15234,33 +15357,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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 "" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." msgstr "" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -15269,89 +15392,113 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 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 "" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 "" -#: ../source/specifications/core-metadata.rst:926 -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:928 -msgid "Added the ``License-Expression`` field." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -#: ../source/specifications/core-metadata.rst:929 -msgid "Added the ``License-File`` field." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1043 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." +#: ../source/specifications/core-metadata.rst:1045 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:935 +#: ../source/specifications/core-metadata.rst:1046 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1047 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1049 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:937 +#: ../source/specifications/core-metadata.rst:1051 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 -msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:941 -msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:942 -msgid "Added canonical method for transforming metadata to JSON." +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:943 -msgid "Restricted the grammar of the ``Name`` field." +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1062 +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 "" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." msgstr "" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1071 +msgid "" +"October 2025: Clarified that ``License-Expression`` applies to the " +"containing distribution file and not the project itself." +msgstr "" + +#: ../source/specifications/core-metadata.rst:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -15361,21 +15508,21 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" @@ -15396,7 +15543,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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." @@ -15483,12 +15630,12 @@ 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." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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." @@ -15501,17 +15648,17 @@ msgstr "" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" @@ -15521,7 +15668,7 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." @@ -15530,12 +15677,12 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:135 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " -"Dependency Groups." +"dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"Tools SHOULD NOT eagerly validate the contents of *all* dependency groups " "unless they have a need to do so." msgstr "" @@ -15550,7 +15697,7 @@ msgstr "" 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." +"contents of all dependency groups." msgstr "" #: ../source/specifications/dependency-groups.rst:157 @@ -16095,17 +16242,25 @@ msgid "" "spec` as approved through :pep:`751`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:534 +#: ../source/specifications/dependency-specifiers.rst:529 +#: ../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 "" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18115,7 +18270,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:954 +#: ../source/specifications/simple-repository-api.rst:914 msgid "Recommendations" msgstr "" @@ -20686,7 +20841,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:473 +#: ../source/specifications/pyproject-toml.rst:572 msgid "``dynamic``" msgstr "" @@ -20698,82 +20853,92 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:142 -msgid "``maintainers``" +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:480 +msgid "``import-names``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:531 +msgid "``import-namespaces``" msgstr "" #: ../source/specifications/pyproject-toml.rst:144 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:146 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:157 -#: ../source/specifications/pyproject-toml.rst:172 -#: ../source/specifications/pyproject-toml.rst:187 -#: ../source/specifications/pyproject-toml.rst:241 -#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:159 +#: ../source/specifications/pyproject-toml.rst:174 +#: ../source/specifications/pyproject-toml.rst:189 +#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:255 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:160 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:161 +#: ../source/specifications/pyproject-toml.rst:163 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:163 +#: ../source/specifications/pyproject-toml.rst:165 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:175 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:176 +#: ../source/specifications/pyproject-toml.rst:178 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:179 +#: ../source/specifications/pyproject-toml.rst:181 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/specifications/pyproject-toml.rst:190 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:193 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:200 +#: ../source/specifications/pyproject-toml.rst:202 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:201 +#: ../source/specifications/pyproject-toml.rst:203 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:205 +#: ../source/specifications/pyproject-toml.rst:207 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:207 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -20787,7 +20952,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:218 +#: ../source/specifications/pyproject-toml.rst:220 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 " @@ -20796,7 +20961,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:225 +#: ../source/specifications/pyproject-toml.rst:227 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 " @@ -20808,46 +20973,54 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:242 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:245 +#: ../source/specifications/pyproject-toml.rst:247 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:256 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-" "Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:257 +#: ../source/specifications/pyproject-toml.rst:259 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 "" -#: ../source/specifications/pyproject-toml.rst:263 +#: ../source/specifications/pyproject-toml.rst:264 +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 "" + +#: ../source/specifications/pyproject-toml.rst:271 #, fuzzy #| msgid "Specification" msgid "Legacy specification" msgstr "Spesifikasi" -#: ../source/specifications/pyproject-toml.rst:265 +#: ../source/specifications/pyproject-toml.rst:273 msgid "TOML_ type: table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:274 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:277 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 " @@ -20857,24 +21030,26 @@ msgid "" "metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:284 msgid "" "The table subkeys were deprecated by :pep:`639` in favor of the string value." msgstr "" -#: ../source/specifications/pyproject-toml.rst:283 -#: ../source/specifications/pyproject-toml.rst:366 -#: ../source/specifications/pyproject-toml.rst:378 +#: ../source/specifications/pyproject-toml.rst:291 +#: ../source/specifications/pyproject-toml.rst:374 +#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:482 +#: ../source/specifications/pyproject-toml.rst:533 msgid "TOML_ type: array of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:284 +#: ../source/specifications/pyproject-toml.rst:292 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`License-File " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:287 +#: ../source/specifications/pyproject-toml.rst:295 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 " @@ -20883,40 +21058,40 @@ msgid "" "with the package." msgstr "" -#: ../source/specifications/pyproject-toml.rst:293 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" "The strings MUST contain valid glob patterns, as specified in :doc:`/" "specifications/glob-patterns`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 +#: ../source/specifications/pyproject-toml.rst:304 msgid "" "Patterns are relative to the directory containing :file:`pyproject.toml`," msgstr "" -#: ../source/specifications/pyproject-toml.rst:298 +#: ../source/specifications/pyproject-toml.rst:306 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 "" -#: ../source/specifications/pyproject-toml.rst:301 +#: ../source/specifications/pyproject-toml.rst:309 msgid "Build tools:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:303 +#: ../source/specifications/pyproject-toml.rst:311 msgid "" "MUST include all files matched by a listed pattern in all distribution " "archives." msgstr "" -#: ../source/specifications/pyproject-toml.rst:305 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "MUST list each matched file path under a License-File field in the Core " "Metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:308 +#: ../source/specifications/pyproject-toml.rst:316 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 " @@ -20925,11 +21100,11 @@ msgid "" "or use their own logic to discover the appropriate files in the distribution." msgstr "" -#: ../source/specifications/pyproject-toml.rst:322 +#: ../source/specifications/pyproject-toml.rst:330 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:323 +#: ../source/specifications/pyproject-toml.rst:331 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -20937,20 +21112,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:329 +#: ../source/specifications/pyproject-toml.rst:337 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 "" -#: ../source/specifications/pyproject-toml.rst:334 +#: ../source/specifications/pyproject-toml.rst:342 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:337 +#: ../source/specifications/pyproject-toml.rst:345 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 " @@ -20959,56 +21134,56 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:344 +#: ../source/specifications/pyproject-toml.rst:352 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:347 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:350 +#: ../source/specifications/pyproject-toml.rst:358 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:362 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 "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:366 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:375 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:370 +#: ../source/specifications/pyproject-toml.rst:378 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:379 +#: ../source/specifications/pyproject-toml.rst:387 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:382 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:384 +#: ../source/specifications/pyproject-toml.rst:392 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 " @@ -21016,38 +21191,38 @@ msgid "" "field) and the ``License ::`` classifiers are used." msgstr "" -#: ../source/specifications/pyproject-toml.rst:396 +#: ../source/specifications/pyproject-toml.rst:404 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:397 +#: ../source/specifications/pyproject-toml.rst:405 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:408 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 "" -#: ../source/specifications/pyproject-toml.rst:410 +#: ../source/specifications/pyproject-toml.rst:418 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:412 +#: ../source/specifications/pyproject-toml.rst:420 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:414 +#: ../source/specifications/pyproject-toml.rst:422 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:416 +#: ../source/specifications/pyproject-toml.rst:424 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -21055,14 +21230,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:422 +#: ../source/specifications/pyproject-toml.rst:430 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 "" -#: ../source/specifications/pyproject-toml.rst:426 +#: ../source/specifications/pyproject-toml.rst:434 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 " @@ -21070,7 +21245,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:432 +#: ../source/specifications/pyproject-toml.rst:440 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -21078,24 +21253,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:445 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:448 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:452 +#: ../source/specifications/pyproject-toml.rst:460 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:454 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "For ``dependencies``, it is a key whose value is an array of strings. Each " "string represents a dependency of the project and MUST be formatted as a " @@ -21103,7 +21278,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:459 +#: ../source/specifications/pyproject-toml.rst:467 msgid "" "For ``optional-dependencies``, it is a table where each key specifies an " "extra and whose value is an array of strings. The strings of the arrays must " @@ -21114,17 +21289,108 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:475 +#: ../source/specifications/pyproject-toml.rst:483 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-Name " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:486 +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 "" + +#: ../source/specifications/pyproject-toml.rst:491 +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 "" + +#: ../source/specifications/pyproject-toml.rst:503 +#: ../source/specifications/pyproject-toml.rst:552 +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 "" + +#: ../source/specifications/pyproject-toml.rst:506 +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 "" + +#: ../source/specifications/pyproject-toml.rst:510 +#: ../source/specifications/pyproject-toml.rst:555 +msgid "" +"Build back-ends MAY support dynamically calculating the value if the user " +"declares the key in ``project.dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:513 +msgid "Examples:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:534 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Import-" +"Namespace `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:537 +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 "" + +#: ../source/specifications/pyproject-toml.rst:543 +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 "" + +#: ../source/specifications/pyproject-toml.rst:548 +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 "" + +#: ../source/specifications/pyproject-toml.rst:558 +msgid "Example:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:574 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:476 +#: ../source/specifications/pyproject-toml.rst:575 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:578 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -21132,19 +21398,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:485 +#: ../source/specifications/pyproject-toml.rst:584 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:487 +#: ../source/specifications/pyproject-toml.rst:586 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:489 +#: ../source/specifications/pyproject-toml.rst:588 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -21153,20 +21419,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:494 +#: ../source/specifications/pyproject-toml.rst:593 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 "" -#: ../source/specifications/pyproject-toml.rst:498 +#: ../source/specifications/pyproject-toml.rst:597 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:500 +#: ../source/specifications/pyproject-toml.rst:599 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. " @@ -21174,18 +21440,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:504 +#: ../source/specifications/pyproject-toml.rst:603 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 "" -#: ../source/specifications/pyproject-toml.rst:514 +#: ../source/specifications/pyproject-toml.rst:613 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:516 +#: ../source/specifications/pyproject-toml.rst:615 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 " @@ -21193,7 +21459,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:522 +#: ../source/specifications/pyproject-toml.rst:621 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 " @@ -21201,25 +21467,37 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:533 +#: ../source/specifications/pyproject-toml.rst:632 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 "" -#: ../source/specifications/pyproject-toml.rst:537 +#: ../source/specifications/pyproject-toml.rst:636 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" -#: ../source/specifications/pyproject-toml.rst:540 +#: ../source/specifications/pyproject-toml.rst:639 msgid "" "December 2024: The ``license`` key was redefined, the ``license-files`` key " "was added and ``License::`` classifiers were deprecated through :pep:`639`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:642 +msgid "" +"September 2025: Clarity that the ``license`` key applies to all distribution " +"files generated from the :file:`pyproject.toml` file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:645 +msgid "" +"October 2025: The ``import-names`` and ``import-namespaces`` keys were added " +"through :pep:`794`." +msgstr "" + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -22901,70 +23179,7 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:915 -msgid "TUF Support - PEP 458" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:917 -msgid "" -":pep:`458` requires that all API responses are hashable and that they can be " -"uniquely identified by a path relative to the repository root. For a Simple " -"API repository, the target path is the Root of our API (e.g. ``/simple/`` on " -"PyPI). This creates challenges when accessing the API using a TUF client " -"instead of directly using a standard HTTP client, as the TUF client cannot " -"handle the fact that a target could have multiple different representations " -"that all hash differently." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:924 -msgid "" -":pep:`458` does not specify what the target path should be for the Simple " -"API, but TUF requires that the target paths be \"file-like\", in other " -"words, a path like ``simple/PROJECT/`` is not acceptable, because it " -"technically points to a directory." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"The saving grace is that the target path does not *have* to actually match " -"the URL being fetched from the Simple API, and it can just be a sigil that " -"the fetching code knows how to transform into the actual URL that needs to " -"be fetched. This same thing can hold true for other aspects of the actual " -"HTTP request, such as the ``Accept`` header." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:935 -msgid "" -"Ultimately figuring out how to map a directory to a filename is out of scope " -"for this spec (but it would be in scope for :pep:`458`), and this spec " -"defers making a decision about how exactly to represent this inside of :pep:" -"`458` metadata." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:939 -msgid "" -"However, it appears that the current WIP branch against pip that attempts to " -"implement :pep:`458` is using a target path like ``simple/PROJECT/index." -"html``. This could be modified to include the API version and serialization " -"format using something like ``simple/PROJECT/vnd.pypi.simple.vN.FORMAT``. So " -"the v1 HTML format would be ``simple/PROJECT/vnd.pypi.simple.v1.html`` and " -"the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:946 -msgid "" -"In this case, since ``text/html`` is an alias to ``application/vnd.pypi." -"simple.v1+html`` when interacting through TUF, it likely will make the most " -"sense to normalize to the more explicit name." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "" -"Likewise the ``latest`` metaversion should not be included in the targets, " -"only explicitly declared versions should be supported." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:956 +#: ../source/specifications/simple-repository-api.rst:916 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -22972,7 +23187,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:960 +#: ../source/specifications/simple-repository-api.rst:920 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 " @@ -22981,18 +23196,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:965 +#: ../source/specifications/simple-repository-api.rst:925 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:967 +#: ../source/specifications/simple-repository-api.rst:927 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 "" -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:931 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 " @@ -23000,13 +23215,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:976 +#: ../source/specifications/simple-repository-api.rst:936 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 "" -#: ../source/specifications/simple-repository-api.rst:979 +#: ../source/specifications/simple-repository-api.rst:939 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -23015,23 +23230,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:985 +#: ../source/specifications/simple-repository-api.rst:945 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:987 +#: ../source/specifications/simple-repository-api.rst:947 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:950 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:953 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23040,79 +23255,79 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:959 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 "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:963 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1006 +#: ../source/specifications/simple-repository-api.rst:966 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:1014 +#: ../source/specifications/simple-repository-api.rst:974 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1015 +#: ../source/specifications/simple-repository-api.rst:975 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1016 +#: ../source/specifications/simple-repository-api.rst:976 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1017 +#: ../source/specifications/simple-repository-api.rst:977 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1019 +#: ../source/specifications/simple-repository-api.rst:979 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1021 +#: ../source/specifications/simple-repository-api.rst:981 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 "" -#: ../source/specifications/simple-repository-api.rst:1023 +#: ../source/specifications/simple-repository-api.rst:983 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1025 +#: ../source/specifications/simple-repository-api.rst:985 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1027 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1028 +#: ../source/specifications/simple-repository-api.rst:988 msgid "" "July 2025: project status markers in the HTML and JSON formats, in :pep:`792`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1029 +#: ../source/specifications/simple-repository-api.rst:989 msgid "" "July 2025: layout changes (dedicated page for file yanking, introduce " "concepts before API details)" diff --git a/locales/ja/LC_MESSAGES/messages.po b/locales/ja/LC_MESSAGES/messages.po index 355fc375e..2aa317d12 100644 --- a/locales/ja/LC_MESSAGES/messages.po +++ b/locales/ja/LC_MESSAGES/messages.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-08-11 12:33+0000\n" -"PO-Revision-Date: 2025-08-14 11:02+0000\n" +"POT-Creation-Date: 2025-10-28 17:17+0000\n" +"PO-Revision-Date: 2025-11-04 09:51+0000\n" "Last-Translator: moto kawasaki \n" "Language-Team: Japanese \n" @@ -21,7 +21,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 5.13-dev\n" +"X-Generator: Weblate 5.14.1-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -5368,7 +5368,7 @@ msgid "Column" msgstr "カラム" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 -#: ../source/specifications/core-metadata.rst:196 +#: ../source/specifications/core-metadata.rst:206 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" msgstr "説明" @@ -5780,7 +5780,7 @@ msgstr "" "できます。" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:532 +#: ../source/specifications/dependency-specifiers.rst:535 msgid "References" msgstr "参考文献" @@ -6084,7 +6084,7 @@ msgstr "" "ツールの機能性に責任のある実際のソースコードは、メインのモジュールの名称から" "命名された :file:`greet.py` の中に保存されるでしょう。" -#: ../source/guides/creating-command-line-tools.rst:73 +#: ../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 " @@ -6094,7 +6094,7 @@ msgstr "" "ワード引数を受け取ります。さて、同様にそれを準備するためのコマンドラインイン" "タフェースを :file:`cli.py` の中に構築しましょう:" -#: ../source/guides/creating-command-line-tools.rst:91 +#: ../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 " @@ -6115,7 +6115,7 @@ msgstr "" "す; 熟練ユーザには、 click_ (``typer`` はこれを基礎として使っています) の使用" "をお勧めします。" -#: ../source/guides/creating-command-line-tools.rst:97 +#: ../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 `." @@ -6123,7 +6123,7 @@ msgstr "" "さて、プロジェクトを通常の :term:`インポートパッケージ ` とし" "て定義するために、空の :file:`__init__.py` ファイルを追加しましょう。" -#: ../source/guides/creating-command-line-tools.rst:99 +#: ../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 " @@ -6136,7 +6136,7 @@ msgstr "" "のメインのエントリポイントを提示するものですので、コマンドラインインタフェー" "スをここで初期化しましょう:" -#: ../source/guides/creating-command-line-tools.rst:111 +#: ../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``, " @@ -6148,11 +6148,11 @@ msgstr "" "うにするためには、このファイルの中にそれなりのハックが置かれていることでしょ" "う; もっと読みたければ :ref:`running-cli-from-source-src-layout` をどうぞ。" -#: ../source/guides/creating-command-line-tools.rst:117 +#: ../source/guides/creating-command-line-tools.rst:106 msgid "``pyproject.toml``" msgstr "``pyproject.toml``" -#: ../source/guides/creating-command-line-tools.rst:119 +#: ../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 ` や " "``[build-system]`` テーブルに値が埋め込まれます。" -#: ../source/guides/creating-command-line-tools.rst:122 +#: ../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:" @@ -6178,7 +6178,7 @@ msgstr "" "`console_scripts`をご覧ください) が :term:`サブキー ` として追加されている必要があります:" -#: ../source/guides/creating-command-line-tools.rst:129 +#: ../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." @@ -6186,11 +6186,11 @@ msgstr "" "これで、プロジェクトのソースコードツリーが、インストールすることができる :" "term:`配布パッケージ ` へと変換される準備ができました。" -#: ../source/guides/creating-command-line-tools.rst:134 +#: ../source/guides/creating-command-line-tools.rst:123 msgid "Installing the package with ``pipx``" msgstr "``pipx`` を使ってパッケージをインストールする" -#: ../source/guides/creating-command-line-tools.rst:136 +#: ../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:" @@ -6198,7 +6198,7 @@ msgstr "" ":ref:`installing-stand-alone-command-line-tools` に記述されているように " "``pipx`` をインストールした後に、プロジェクトをインストールしましょう:" -#: ../source/guides/creating-command-line-tools.rst:143 +#: ../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:" @@ -6206,7 +6206,7 @@ msgstr "" "これによって、エントリポイントとして定義した実行可能なスクリプトを露出し、コ" "マンド ``greet`` を利用可能にします。試してみましょう:" -#: ../source/guides/creating-command-line-tools.rst:155 +#: ../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 " @@ -6216,7 +6216,7 @@ msgstr "" "び出すことでプログラムの使用方法の概要を得たり、 ``--install-completion`` オ" "プション経由でコマンドライン補完を得ることができるでしょう。" -#: ../source/guides/creating-command-line-tools.rst:158 +#: ../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:" @@ -6225,7 +6225,7 @@ msgstr "" "は、一時的な (しかしキャッシュされる) 仮想環境を作ってくれる ``pipx run`` を" "使いましょう。" -#: ../source/guides/creating-command-line-tools.rst:165 +#: ../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 " @@ -6236,7 +6236,7 @@ msgstr "" "スクリプトがないとしても) 明示的にどの実行スクリプトを走らせるのかを述べる必" "要があります。" -#: ../source/guides/creating-command-line-tools.rst:168 +#: ../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 " @@ -6246,7 +6246,7 @@ msgstr "" "リポイントを指定する形式があります。以下に述べる :file:`pyproject.toml` 内で" "定義することで同様のことができるのです:" -#: ../source/guides/creating-command-line-tools.rst:177 +#: ../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 " @@ -6256,11 +6256,11 @@ msgstr "" "のおかげで、 ``pipx`` は実行可能なスクリプトをデフォルトのものとして選択しそ" "れを走らせるでしょう、そして、それはこのコマンドを実現可能にします:" -#: ../source/guides/creating-command-line-tools.rst:185 +#: ../source/guides/creating-command-line-tools.rst:176 msgid "Conclusion" msgstr "結論" -#: ../source/guides/creating-command-line-tools.rst:187 +#: ../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 " @@ -6756,7 +6756,7 @@ msgstr "" "ん。" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:149 msgid "``scripts``" msgstr "" @@ -9121,18 +9121,21 @@ msgstr "" 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:147 msgid "If our project used :file:`setup.cfg`, we could define this in :" -msgstr ":file:`setup.cfg` " -"をプロジェクトで使っているなら、こんなふうに定義することができます:" +msgstr "" +":file:`setup.cfg` をプロジェクトで使っているなら、こんなふうに定義することが" +"できます:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:159 msgid "" "With either approach, the output Core Metadata in the distribution would be:" -msgstr "どちらのアプローチでも、配布物内のコアとなるメタデータの出力はこんな風になる" +msgstr "" +"どちらのアプローチでも、配布物内のコアとなるメタデータの出力はこんな風になる" "でしょう:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:170 @@ -9141,11 +9144,10 @@ 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}`` " -"をコアとなるメタデータの中で指定された Setuptools " -"のバージョン番号として、ライセンスファイル群が次のようなパスに配置されるでし" -"ょう:" +"結果として生成される sdist の中には、 :file:`/` をアーカイブのルートディレク" +"トリとし、 ``{VERSION}`` をコアとなるメタデータの中で指定された Setuptools の" +"バージョン番号として、ライセンスファイル群が次のようなパスに配置されるでしょ" +"う:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:181 msgid "" @@ -9161,10 +9163,9 @@ msgid "" "site dir and ``{VERSION}`` as the previous, the license files would be " "installed to:" msgstr "" -"最後に、インストールされたプロジェクトでは、 :file:`site-packages/` " -"をサイトディレクトリとし、 ``{VERSION}`` " -"を先述の通りとして、ライセンスファイル群は次の場所にインストールされるでしょ" -"う:" +"最後に、インストールされたプロジェクトでは、 :file:`site-packages/` をサイト" +"ディレクトリとし、 ``{VERSION}`` を先述の通りとして、ライセンスファイル群は次" +"の場所にインストールされるでしょう:" #: ../source/guides/licensing-examples-and-user-scenarios.rst:203 msgid "Expression examples" @@ -9187,11 +9188,10 @@ msgid "" "for their situation." msgstr "" "以下では、それぞれにガイダンスを提供しながら、ユーザ視点からのよくあるユース" -"ケースをカバーします。" -"以下に述べることを法律上の推奨事項であると見做すべきでは **ない** " -"ことを銘記するとともに、読者は、それぞれの状況に応じた細部について確信を持て" -"ないならば、それを法律上の管轄範囲とするライセンスを持った法律実務家に相談す" -"るべきす。" +"ケースをカバーします。以下に述べることを法律上の推奨事項であると見做すべきで" +"は **ない** ことを銘記するとともに、読者は、それぞれの状況に応じた細部につい" +"て確信を持てないならば、それを法律上の管轄範囲とするライセンスを持った法律実" +"務家に相談するべきす。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:230 msgid "I have a private package that won't be distributed" @@ -9204,9 +9204,8 @@ msgid "" "a formal license, so you wouldn't necessarily have to do anything extra here." msgstr "" "そのパッケージが、例えば会社や組織あるいは家庭の外に公開・共有されていないな" -"ら、 *通常は* 厳格に公式のライセンス (ファイル) " -"を含める必要があるわけではありませんし、だからここで何か追加の作業をする必要" -"があるわけではないでしょう。" +"ら、 *通常は* 厳格に公式のライセンス (ファイル) を含める必要があるわけではあ" +"りませんし、だからここで何か追加の作業をする必要があるわけではないでしょう。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:236 msgid "" @@ -9216,11 +9215,10 @@ msgid "" "your project directory, which will be automatically included by packaging " "tools." msgstr "" -"しかしながら、それでも、" -"パッケージングツール群によって自動的に取り込まれるであろうプロジェクトのルー" -"トディレクトリの :file:`LICENSE.txt` ファイルの中に、" -"パッケージの設定の中にライセンス条項として ``LicenseRef-Proprietary`` " -"や著作権情報やその他の法的通知を含めておくことは良い考えです。" +"しかしながら、それでも、パッケージングツール群によって自動的に取り込まれるで" +"あろうプロジェクトのルートディレクトリの :file:`LICENSE.txt` ファイルの中に、" +"パッケージの設定の中にライセンス条項として ``LicenseRef-Proprietary`` や著作" +"権情報やその他の法的通知を含めておくことは良い考えです。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:244 msgid "I just want to share my own work without legal restrictions" @@ -9237,11 +9235,10 @@ msgid "" msgstr "" "ライセンスを含めておくように要求されてはいない一方で、含めておかなければ皆が " "`その作品のダウンロード、使用、または改良の許可なし `__ " -"の状態になりますが、それは多分、作者が実際に望んでいることとは *真逆* " -"のことでしょう。 `MIT ライセンス `__ は、" -"簡明で広く使われており作品に対して誰でも " -"(多分作者も望まないでしょうが、作者相手に訴訟を起こす以外の) " -"どんなことでも許容するので、その代替として偉大な選択肢です。" +"の状態になりますが、それは多分、作者が実際に望んでいることとは *真逆* のこと" +"でしょう。 `MIT ライセンス `__ は、簡明で広く使われており" +"作品に対して誰でも (多分作者も望まないでしょうが、作者相手に訴訟を起こす以外" +"の) どんなことでも許容するので、その代替として偉大な選択肢です。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:253 msgid "" @@ -9251,10 +9248,16 @@ 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` と名付けられたファイルに `テキスト `__ を貼り付け" +"て、年とあなたの名前をコピーライトの行に追加して下さい。それから、パッケージ" +"ングツールがサポートしている場合は ``license = \"MIT\"`` を :file:`pyproject." +"toml` の中の ``[project]`` の下か、あるいは、設定ファイル・節の中に追加してく" +"ださい。これで出来上がりです!" #: ../source/guides/licensing-examples-and-user-scenarios.rst:261 msgid "I want to distribute my project under a specific license" -msgstr "" +msgstr "プロジェクトを特定のライセンスの下で配布したい" #: ../source/guides/licensing-examples-and-user-scenarios.rst:263 msgid "" @@ -9266,16 +9269,27 @@ msgid "" "``LICENSE-ID`` and copyable license text on sites like `ChooseALicense " "`__ or `SPDX `__." msgstr "" +"特定のライセンスを使用するには、もし :file:`LICENSE` または :file:`COPYING` " +"で始まるファイルを既に置いているのでなければ、単にリポジトリのルートディレク" +"トリにある :file:`LICENSE.txt` ファイルの中にそのテキストを貼り付けて、 使っ" +"ているパッケージングツールがサポートしているなら :file:`pyproject.toml` の中" +"の ``[project]`` の下に ``license = \"LICENSE-ID\"`` を追加するか、そうでなけ" +"れば設定ファイルの中に追加すれば良いだけです。 `ChooseALicense " +"`__ や `SPDX `__ のようなサイトに行けば、 " +"``LICENSE-ID`` とコピー可能なライセンス条項を見つけることができるでしょう。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:272 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:277 msgid "I maintain an existing package that's already licensed" -msgstr "" +msgstr "既にライセンスが付与された既存パッケージを維持管理しています" #: ../source/guides/licensing-examples-and-user-scenarios.rst:279 msgid "" @@ -9283,6 +9297,8 @@ msgid "" "only need to make a couple of tweaks to take advantage of the new " "functionality." msgstr "" +"ライセンスファイルやプロジェクト内のメタデータが既に存在しているなら、新機能" +"の利点を得るためには2,3の捻りを加えるだけで良いはずです。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:283 msgid "" @@ -9294,6 +9310,14 @@ msgid "" "otherwise, check the `SPDX license list `__ for the identifier " "that matches the license used in your project." 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:292 msgid "" @@ -9301,6 +9325,9 @@ 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:296 msgid "" @@ -9312,10 +9339,18 @@ 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:306 msgid "My package includes other code under different licenses" -msgstr "" +msgstr "私のパッケージには異なるライセンスの他のソースコードが含まれています" #: ../source/guides/licensing-examples-and-user-scenarios.rst:308 msgid "" @@ -9324,6 +9359,10 @@ 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:314 msgid "" @@ -9334,6 +9373,13 @@ msgid "" "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 "" @@ -9342,6 +9388,10 @@ msgid "" "packaging tool, and make sure to remove any legacy ``license`` table subkeys " "or ``License ::`` classifiers." msgstr "" +"プロジェクトの設定ファイルで、 (:file:`pyproject.toml` の ``[project]`` テー" +"ブルの) ``license`` の下にライセンス表現を入れるか、または、使用しているパッ" +"ケージングツールの同等物を入れるか、いずれかを行なって、旧来の ``license`` " +"テーブルサブキーや ``License::`` 分類子を削除するのを忘れないでください。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:328 msgid "" @@ -9351,6 +9401,11 @@ msgid "" "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 "" @@ -9364,6 +9419,17 @@ msgid "" "``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-BSD." "txt\"]`` as literal file paths." msgstr "" +"例として、もしプロジェクトが MIT ライセンスを適用していて、しかし、他所から提" +"供された依存関係 (ここでは ``packaging`` としましょう) が Apache 2.0 もしく" +"は 2条項 BSD でライセンスされているなら、ライセンス表現は ``MIT AND " +"(Apache-2.0 OR BSD-2-Clause)`` のようになるでしょう。すべてのライセンス全文を" +"リポジトリに入れておくために、リポジトリのルートディレクトリに :file:" +"`LICENSE.txt` を置き、 :file:`_vendor/` サブディレクトリの下に :file:" +"`LICENSE-APACHE.txt` と :file:`LICENSE-BSD.txt` を置くでしょうし、 glob パ" +"ターンとして ``[\"LICENSE.txt\", \"_vendor/packaging/LICENSE*\"]`` のように指" +"定するか、あるいは、リテラルのファイルパスとして ``[\"LICENSE.txt\", " +"\"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-BSD.txt\"]`` のように指定す" +"ることでしょう。" #: ../source/guides/licensing-examples-and-user-scenarios.rst:345 msgid "" @@ -9372,6 +9438,10 @@ 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" @@ -9912,8 +9982,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 -msgid ":doc:`pip:reference/build-system/pyproject-toml`" -msgstr ":doc:`pip:reference/build-system/pyproject-toml`" +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?" @@ -10950,7 +11020,7 @@ msgstr "" #: ../source/guides/packaging-binary-extensions.rst:408 msgid "Additional considerations for binary wheels" -msgstr "" +msgstr "バイナリの wheel に関する追加的な考慮" #: ../source/guides/packaging-binary-extensions.rst:410 msgid "" @@ -10959,6 +11029,11 @@ 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 "" @@ -10966,6 +11041,9 @@ 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" @@ -11334,21 +11412,10 @@ msgstr "" "`cibuildwheel` にある GitHub Action の例を調べてみてください。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:25 -#, fuzzy -#| msgid "Configuring trusted publishing" msgid "Configuring Trusted Publishing" -msgstr "信頼された出版 を設定する" +msgstr "信頼された出版 を設定する" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:27 -#, fuzzy -#| 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." msgid "" "This guide relies on PyPI's `Trusted Publishing`_ implementation to connect " "to `GitHub Actions CI/CD`_. This is recommended for security reasons, since " @@ -11358,22 +11425,15 @@ msgid "" "doc:`devpi `, you may need to provide a username/password " "combination." msgstr "" -"このガイド文書は、`GitHub Actions CI/CD`_ に接続するために PyPI の `信頼ある" -"出版`_ の実装に依存しています。これは、生成されるトークンが各プロジェクトでそ" -"れぞれ独立に作成されて自動的に期限切れになるというセキュリティ上の理由から推" -"奨されています。さもなければ、 PyPI と TestPyPI の両方について `API トークン" -"`_ を生成する必要があるでしょう。:doc:`devpi ` のような第三者" -"パーティのインデックス向けに出版 する場合には、ユーザ名とパスワード" -"の組み合わせを提供する必要があるかもしれません。" +"このガイド文書は、`GitHub Actions CI/CD`_ に接続するために PyPI の `Trusted " +"Publishing`_ の実装に依存しています。これは、生成されるトークンが各プロジェク" +"トでそれぞれ独立に作成されて自動的に期限切れになるというセキュリティ上の理由" +"から推奨されています。さもなければ、 PyPI と TestPyPI の両方について `API " +"トークン`_ を生成する必要があるでしょう。:doc:`devpi ` のような" +"第三者パーティのインデックス向けに出版 する場合には、ユーザ名とパス" +"ワードの組み合わせを提供する必要があるかもしれません。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:35 -#, fuzzy -#| 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." 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 " @@ -11383,10 +11443,10 @@ msgid "" msgstr "" "このガイドではPyPIとTestPyPIの両方へのアップロードを実証しますので、ふたつの" "信頼あるパブリッシャが設定されていることが必要になるでしょう。以下に示すス" -"テップによって、新しい :term:`PyPI プロジェクト ` 用の \" ペンディン" -"グされた\" パブリッシャ群を作成する手順を一通りお見せします。しかしながら、あ" -"なたが所有者であるならば、任意の既存プロジェクトに `信頼ある出版`_ を追加する" -"ことが可能でもあります。" +"テップによって、新しい :term:`PyPI project ` 用の \" ペンディングさ" +"れた\" パブリッシャ群を作成する手順を一通りお見せします。しかしながら、あなた" +"が所有者であるならば、任意の既存プロジェクトに `Trusted Publishing`_ を追加す" +"ることが可能でもあります。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:44 msgid "" @@ -11456,22 +11516,16 @@ msgstr "" "通常の 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 "" -"セキュリティ上の理由から、``pypi`` 環境での実行の度に、 `手動での承認 " -"`_ を要求しなければなりません。" +"セキュリティ上の理由から、``pypi`` 環境の実行の度に、 `手動での承認 `_ を要求しなければなりません。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 msgid "Creating a workflow definition" @@ -11541,15 +11595,6 @@ msgid "Defining a workflow job environment" msgstr "ワークフローのジョブ環境を定義する" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:130 -#, fuzzy -#| 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." 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, " @@ -11603,6 +11648,10 @@ msgid "" "and uploads :pep:`740`-compatible attestations for each distribution by " "default. No additional manual signing steps are required." msgstr "" +"バージョン `v1.11.0 `_ 以降、 `pypa/gh-action-pypi-publish`_ は、デフォルトで各配布物" +"に対する :pep:`740` 互換の証明書を生成しアップロードするようになりました。手" +"動の署名手順はもはや必要ありません。" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:172 msgid "Separate workflow for publishing to TestPyPI" @@ -11693,18 +11742,18 @@ 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 -#, fuzzy -#| msgid "Single-sourcing the package version" msgid "Redirecting stale single-source package version link..." -msgstr "パッケージのバージョンを1箇所で管理する" +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" @@ -12745,44 +12794,40 @@ msgid "Uploading to PyPI" msgstr "PyPIにアップロードする" #: ../source/guides/tool-recommendations.rst:142 -#, fuzzy -#| msgid "" -#| "For projects hosted on GitHub, it is recommended to use the :ref:`trusted " -#| "publishing `, which allows the package to be securely " -#| "uploaded to PyPI from a GitHub Actions job. (This is not yet supported on " -#| "software forges other than GitHub.)" 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 "" -"GitHubにホストされているプロジェクト向けには、GitHub Actions のジョブからパッ" -"ケージを安全に PyPIへアップロードすることができる :ref:`信頼ある出版 " -"` を使うことを推奨します。(これは、GitHub 以外のソフトウ" -"エア集積所ではまだサポートされていません。)" +"サポート対象の CI/CD プラットフォームにホストされている、もしくは、そこから公" +"開されているプロジェクトに関しては、手動で設定された API トークンなしで CI/" +"CD ワークフローから PyPI へとパッケージを安全にアップロードすることができる :" +"ref:`Trusted Publishing ` を使うことが推奨されています。" #: ../source/guides/tool-recommendations.rst:147 msgid "" "As of November 2024, PyPI supports the following platforms as Trusted " "Publishing providers:" msgstr "" +"2024 年 11 月の時点では、 PyPI は以下のプラットフォームを 信頼ある公開 " +" プロバイダとしてサポートしています:" #: ../source/guides/tool-recommendations.rst:150 msgid "GitHub Actions (on ``https://github.com``)" -msgstr "" +msgstr "(``https://github.com`` における) GitHub Actions" #: ../source/guides/tool-recommendations.rst:151 msgid "GitLab CI/CD (on ``https://gitlab.com``)" -msgstr "" +msgstr "(``https://gitlab.com`` における) GitLab CI/CD" #: ../source/guides/tool-recommendations.rst:152 msgid "ActiveState" -msgstr "" +msgstr "ActiveState" #: ../source/guides/tool-recommendations.rst:153 msgid "Google Cloud" -msgstr "" +msgstr "Google Cloud" #: ../source/guides/tool-recommendations.rst:155 msgid "" @@ -13008,12 +13053,17 @@ 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 "" @@ -13023,28 +13073,22 @@ 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.peotry]`` テーブルを使って" +"いました。バージョン 2.0 では、両方をサポートしています。また、 setuptools_ " +"のビルドバックエンドは、 ``[project]`` テーブルと、 ``setup.cfg`` ないし " +"``setup.py`` の中のより古い書き方の両方をサポートしています。" #: ../source/guides/writing-pyproject-toml.rst:38 -#, fuzzy -#| msgid "" -#| "Also, the setuptools_ build backend supports both the ``[project]`` " -#| "table, and the older format in ``setup.cfg`` or ``setup.py``. For new " -#| "projects, it is recommended to 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`." 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 "" -"また、setuptools_ のビルドバックエンドは、 ``[project]`` テーブルと ``setup." -"cfg`` ないし ``setup.py`` の中のより古い形の両方をサポートしています。新しく" -"始めるプロジェクトでは ``[project]`` テーブルを使用し、 (C 言語拡張をビルドす" -"る場合のような) 何かプログラム面での設定が必要とされる場合に限って ``setup." -"py`` を使い続けることが推奨されていますが、依然として ``setup.cfg`` と " -"``setup.py`` の形式は正当なものです。 :ref:`setup-py-deprecated` をご覧くださ" +"``setup.cfg`` と ``setup.py`` は依然として正当な書式ですが、新しいプロジェク" +"トでは ``[project]`` テーブルを使い、何かプログラム上の設定が必要である場合に" +"限って ``setup.py`` を維持しましょう。 :ref:`setup-py-deprecated` をみて下さ" "い。" #: ../source/guides/writing-pyproject-toml.rst:47 @@ -13123,8 +13167,8 @@ msgstr "基本的な情報" #: ../source/guides/writing-pyproject-toml.rst:93 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:143 -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:157 msgid "``name``" msgstr "``名称``" @@ -13137,19 +13181,14 @@ msgstr "" "的であるとマークできない唯一のフィールドです。" #: ../source/guides/writing-pyproject-toml.rst:103 -#, fuzzy -#| msgid "" -#| "The project name must consists of ASCII letters, digits, underscores " -#| "\"``_``\", hyphens \"``-``\" and periods \"``.``\". It must not start or " -#| "end with an underscore, hyphen or period." 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 "" @@ -13168,8 +13207,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:115 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:149 -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:151 +#: ../source/specifications/pyproject-toml.rst:172 msgid "``version``" msgstr "" @@ -13194,26 +13233,21 @@ msgstr "" "ものです" #: ../source/guides/writing-pyproject-toml.rst:135 -#, fuzzy -#| msgid "" -#| "This allows use cases such as filling the version from a ``__version__`` " -#| "attribute or a Git tag. Consult :ref:`Single sourcing the version` for " -#| "more details." 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 のタグからバージョンを取得するよう" -"な使い方が可能になります。 :ref:`バージョンを1箇所で管理する ` を見てみてください。" +"これによって、 ``__version__`` 要素や Git のタグからバージョンを充当するよう" +"な使い方が可能になります。もっと詳しいことは、 :ref:`single-source-version` " +"の議論を見てみてください。" #: ../source/guides/writing-pyproject-toml.rst:141 msgid "Dependencies and requirements" msgstr "依存関係と要求事項" #: ../source/guides/writing-pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:443 +#: ../source/specifications/pyproject-toml.rst:451 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies``/``optional-dependencies``" @@ -13251,8 +13285,8 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:183 #: ../source/specifications/pylock-toml.rst:95 -#: ../source/specifications/pyproject-toml.rst:146 -#: ../source/specifications/pyproject-toml.rst:239 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:241 msgid "``requires-python``" msgstr "``requires-python``" @@ -13261,7 +13295,7 @@ msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -"これによってサポートされている Python の上限のバージョンを宣言することができ" +"これによってサポートされている Python の下限のバージョンを宣言することができ" "ます [#requires-python-upper-bounds]_ 。" #: ../source/guides/writing-pyproject-toml.rst:197 @@ -13277,19 +13311,14 @@ msgstr "" "scripts]`` テーブルで宣言してください。" #: ../source/guides/writing-pyproject-toml.rst:207 -#, fuzzy -#| msgid "" -#| "In this example, after installing your project, a ``spam-cli`` command " -#| "will be available. Executing this command will do the equivalent of " -#| "``from spam import main_cli; main_cli()``." 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`` コマンドが利用で" -"きるようになるでしょう。このコマンドを実行することで、 ``from spam import " -"main_cli; main_cli()`` と同等のことを行うでしょう。" +"きるようになるでしょう。このコマンドを実行することで、 ``import sys; from " +"spam import main_cli; sys.exit(main_cli())`` と同等のことを行うでしょう。" #: ../source/guides/writing-pyproject-toml.rst:211 msgid "" @@ -13325,7 +13354,7 @@ msgid "About your project" msgstr "あなたのプロジェクトについて" #: ../source/guides/writing-pyproject-toml.rst:233 -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:328 msgid "``authors``/``maintainers``" msgstr "``authors``/``maintainers``" @@ -13339,7 +13368,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:255 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:185 +#: ../source/specifications/pyproject-toml.rst:187 msgid "``description``" msgstr "``説明 ``" @@ -13354,8 +13383,8 @@ msgstr "" "のなので、1行でプロジェクトの説明をしたものであるべきです。" #: ../source/guides/writing-pyproject-toml.rst:268 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:198 +#: ../source/specifications/pyproject-toml.rst:147 +#: ../source/specifications/pyproject-toml.rst:200 msgid "``readme``" msgstr "``readme``" @@ -13389,24 +13418,26 @@ msgid "You can also specify the format explicitly, like this:" msgstr "次のようにしてフォーマットを明示的に指定することもできます:" #: ../source/guides/writing-pyproject-toml.rst:297 -#, fuzzy -#| msgid "``license``" msgid "``license`` and ``license-files``" -msgstr "``ライセンス``" +msgstr "``license`` と ``license-files``" #: ../source/guides/writing-pyproject-toml.rst:299 msgid "As per :pep:`639` licenses should be declared with two fields:" msgstr "" +":pep:`639` によれば、ライセンスはふたつのフィールドで宣言されるべきです:" #: ../source/guides/writing-pyproject-toml.rst:301 msgid "" "``license`` is an :term:`SPDX license expression ` " "consisting of one or more :term:`license identifiers `." msgstr "" +"``license`` は、ひとつかより多くの :term:`license identifiers ` から構成される :term:`SPDX license expression ` です。" #: ../source/guides/writing-pyproject-toml.rst:303 msgid "``license-files`` is a list of license file glob patterns." -msgstr "" +msgstr "``license-files`` は、ライセンスファイルの glob パターンのリストです。" #: ../source/guides/writing-pyproject-toml.rst:305 msgid "" @@ -13415,72 +13446,66 @@ msgid "" "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:309 msgid "build backend versions that introduced :pep:`639` support" -msgstr "" +msgstr ":pep:`639` のサポートを導入したビルドバックエンドのバージョン" #: ../source/guides/writing-pyproject-toml.rst:312 -#, fuzzy -#| msgid "hatch" msgid "hatchling" -msgstr "hatch" +msgstr "hatchling" #: ../source/guides/writing-pyproject-toml.rst:313 -#, fuzzy -#| msgid "Setuptools" msgid "setuptools" -msgstr "Setuptools" +msgstr "setuptools" #: ../source/guides/writing-pyproject-toml.rst:314 msgid "flit-core [#flit-core-pep639]_" -msgstr "" +msgstr "flit-core [#flit-core-pep639]_" #: ../source/guides/writing-pyproject-toml.rst:315 -#, fuzzy -#| msgid "Build backends" msgid "pdm-backend" -msgstr "ビルドバックエンド" +msgstr "pdm-backend" #: ../source/guides/writing-pyproject-toml.rst:316 -#, fuzzy -#| msgid "poetry" msgid "poetry-core" -msgstr "poetry" +msgstr "poetry-core" #: ../source/guides/writing-pyproject-toml.rst:317 -#, fuzzy -#| msgid "build" msgid "uv-build" -msgstr "ビルド" +msgstr "uv-build" #: ../source/guides/writing-pyproject-toml.rst:318 msgid "1.27.0" -msgstr "" +msgstr "1.27.0" #: ../source/guides/writing-pyproject-toml.rst:319 msgid "77.0.3" -msgstr "" +msgstr "77.0.3" #: ../source/guides/writing-pyproject-toml.rst:320 msgid "3.12" -msgstr "" +msgstr "3.12" #: ../source/guides/writing-pyproject-toml.rst:321 msgid "2.4.0" -msgstr "" +msgstr "2.4.0" #: ../source/guides/writing-pyproject-toml.rst:322 -msgid "`not yet `_" -msgstr "" +msgid "2.2.0" +msgstr "2.2.0" #: ../source/guides/writing-pyproject-toml.rst:323 msgid "0.7.19" -msgstr "" +msgstr "0.7.19" #: ../source/guides/writing-pyproject-toml.rst:329 -#: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:251 +#: ../source/specifications/pyproject-toml.rst:142 +#: ../source/specifications/pyproject-toml.rst:253 msgid "``license``" msgstr "``ライセンス``" @@ -13492,6 +13517,11 @@ msgid "" "license list page `_. The supported list version is 3.17 " "or any later compatible one." msgstr "" +"``licanse`` のための新書式は、ひとつもしくはそれ以上の :term:`ライセンス識別" +"子` から構成される正当な :term:`SPDX ライセンス表現 ` で" +"す。ライセンスの完全なリストは、 `SPDX ライセンスリストページ " +"`_ で利用可能です。サポートされているリストバージョンは " +"3.17 かそれ以降の互換性のあるものです。" #: ../source/guides/writing-pyproject-toml.rst:344 msgid "" @@ -13500,26 +13530,21 @@ msgid "" "and-license-files_>`_ for more context. The now deprecated format is " "`described in PEP 621 `__." msgstr "" +"``license`` が辞書かテーブルであるべきだとのビルドエラーを受け取るようなら、" +"そのビルドバックエンドは、まだ、新書式をサポートしていません。さらなる文脈的" +"理解のためには、 `above section `_ を見て下さい。" +"今では非推奨となった書式は、 `PEP 621 に述べられています `__ 。" #: ../source/guides/writing-pyproject-toml.rst:349 -#, fuzzy -#| msgid "" -#| "If you are using a standard, well-known license, it is not necessary to " -#| "use this field. Instead, you should one of the :ref:`classifiers` " -#| "starting with ``License ::``. (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.)" 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 "" -"標準的でよく知られたライセンスを使うのであれば、このフィールドを使う必要はあ" -"りません。代わりに、 ``License::`` で始まる :ref:`分類子 ` のう" -"ちのひとつを書いておけば良いでしょう。 (一般的な規則としては標準的でよく知ら" -"れたライセンスを使うことは良い考えです、というのは、混乱を避けるとことにもな" -"るし、中には内部で認可済みのライセンスでなければソフトウェアを使えない組織も" -"あるからです。)" +"一般的な規則としては、標準的でよく知られたライセンスを使うことは良い考えで" +"す、というのは、混乱を避けることにもなるし、中には内部で認可済みのライセンス" +"でなければソフトウェアを使えない組織もあるからです。" #: ../source/guides/writing-pyproject-toml.rst:353 msgid "" @@ -13529,64 +13554,75 @@ msgid "" "`clause 10.1 `_ of the version 2.2 or any later compatible " "one." msgstr "" +"プロジェクトが使っているライセンスが既存の SPDX 識別子を持っていない時は、 " +"``LicenseRef-[idstring]`` の書式で作成することができます。カスタムの識別子" +"は、バージョン 2.2 かそれより新しい互換のバージョンの `clause 10.1 " +"`_ という SPDX 仕様に従わなければなりません。" #: ../source/guides/writing-pyproject-toml.rst:367 -#: ../source/specifications/pyproject-toml.rst:141 -#: ../source/specifications/pyproject-toml.rst:281 -#, fuzzy -#| msgid "``license``" +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:289 msgid "``license-files``" -msgstr "``ライセンス``" +msgstr "``license-files``" #: ../source/guides/writing-pyproject-toml.rst:369 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:377 msgid "The glob patterns must follow the specification:" -msgstr "" +msgstr "glob パターンは、次の仕様に従わなければなりません:" #: ../source/guides/writing-pyproject-toml.rst:379 msgid "" "Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." "``) will be matched verbatim." msgstr "" +"英数字・アンダースコア (``_``) ・ハイフン (``-``) ・ドット (``.``) が文字通り" +"に合致するでしょう。" #: ../source/guides/writing-pyproject-toml.rst:381 msgid "" "Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " "supported." msgstr "" +"特殊文字: ``*`` ・ ``?`` ・ ``**`` と文字の帯域: [] がサポートされています。" #: ../source/guides/writing-pyproject-toml.rst:382 msgid "Path delimiters must be the forward slash character (``/``)." -msgstr "" +msgstr "パスデリミタは、正スラッシュ (``/``) でなければなりません。" #: ../source/guides/writing-pyproject-toml.rst:383 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:385 msgid "Parent directory indicators (``..``) must not be used." -msgstr "" +msgstr "親ディレクトリ表示子 (``..``) を使用してはなりません。" #: ../source/guides/writing-pyproject-toml.rst:386 msgid "Each glob must match at least one file." -msgstr "" +msgstr "各 glob は、少なくとも一つのファイルにマッチしなければなりません。" #: ../source/guides/writing-pyproject-toml.rst:388 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:394 -#: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:364 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:372 msgid "``keywords``" msgstr "``keywords``" @@ -13600,7 +13636,7 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:408 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:376 +#: ../source/specifications/pyproject-toml.rst:384 msgid "``classifiers``" msgstr "``分類詞 ``" @@ -13638,8 +13674,8 @@ msgstr "" "ケージを PyPI は常に拒否します。" #: ../source/guides/writing-pyproject-toml.rst:446 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:150 +#: ../source/specifications/pyproject-toml.rst:402 msgid "``urls``" msgstr "``urls``" @@ -13658,19 +13694,18 @@ msgid "" "`_ for PyPI-specific " "URL processing." msgstr "" +"PyPI やその他のパッケージングツールがそれぞれどのラベルを認識するかについての" +"リストを見たければ :ref:`well-known-labels` を、 PyPI に特有の URL 処理につい" +"て見たければ `PyPI のプロジェクトメタデータ説明文書 `_ を見て下さい。" #: ../source/guides/writing-pyproject-toml.rst:467 -#, fuzzy -#| msgid "" -#| "Note that if the key contains spaces, it needs to be quoted, e.g., " -#| "``Website = \"https://example.com\"`` but ``\"Official Website\" = " -#| "\"https://example.com\"``." 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." +"もしラベルが空白文字を含んでいるなら、例えば ``Website = \"https://example." "com\"`` ではなくて ``\"Official Website\" = \"https://example.com\"`` のよう" "に引用符で囲む必要があります。" @@ -13680,6 +13715,9 @@ 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:475 msgid "" @@ -13687,6 +13725,9 @@ msgid "" "``\"Download Link\"`` is a well-known label, so they will be rendered " "verbatim:" msgstr "" +"後続するメタデータの中での例としては、 ``MyHomepage`` も ``\"Download " +"Link\"`` のいずれもよく知られたラベルではなく、従って、これらは文字通りに展開" +"されます:" #: ../source/guides/writing-pyproject-toml.rst:485 msgid "" @@ -13695,6 +13736,10 @@ 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:497 msgid "Advanced plugins" @@ -13735,6 +13780,8 @@ msgid "" "flit-core `does not yet `_ support WITH in SPDX license " "expressions." msgstr "" +"flit-core は、 `まだ `_ 、 SPDX ライセンス表現の WITH をサ" +"ポートしていません。" #: ../source/index.rst:-1 msgid "" @@ -13866,16 +13913,12 @@ msgid "Explanations and Discussions" msgstr "説明と議論" #: ../source/index.rst:82 -#, fuzzy -#| msgid "" -#| "The :doc:`discussions/index` section for in-depth explanations and " -#| "discussion about topics, such as:" msgid "" "The :doc:`discussions/index` section provides in-depth explanations and " "discussion about topics, such as:" msgstr "" -"以下に述べるような話題に関する詳細に渡る説明と議論のための :doc:`議論 " -"` の節:" +":doc:`議論 ` の節は、以下に述べるような話題に関する詳細に" +"渡る説明と議論を提供します:" #: ../source/index.rst:85 msgid ":doc:`discussions/deploying-python-applications`" @@ -14490,7 +14533,7 @@ msgstr "" "らであり、動作が速く安全であるからであり、保守されているからであり、動作が信" "頼できるからです。" -#: ../source/key_projects.rst:331 ../source/overview.rst:401 +#: ../source/key_projects.rst:331 ../source/overview.rst:405 msgid "virtualenv" msgstr "virtualenv" @@ -14633,14 +14676,15 @@ 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. が出している Python 配布物である " +"`Anaconda `__ の基礎として使われていま" +"す。元々は科学計算コミュニティを目標にしたものですが、しかし、それ自身や :" +"doc:`miniconda `" #: ../source/key_projects.rst:416 -#, fuzzy -#| msgid "" -#| "Conda is a completely separate tool from :ref:`pip`, virtualenv and " -#| "wheel, but provides many of their combined features in terms of package " -#| "management, virtual environment management and deployment of binary " -#| "extensions." msgid "" "Conda is a completely separate tool from :ref:`pip`, virtualenv and wheel, " "but provides many of their combined features, such as package management, " @@ -14648,8 +14692,8 @@ msgid "" "binary code." msgstr "" "Conda は、 :ref:`pip` や virtualenv や wheel とは全く別のツールですが、パッ" -"ケージ管理・仮想環境管理・バイナリ拡張のデプロイメントの観点ではこれらのツー" -"ルを合わせたような機能を提供します。" +"ケージ管理・仮想環境管理・バイナリ拡張のデプロイメントなどの、これらのツール" +"を合わせたような機能を提供します。" #: ../source/key_projects.rst:420 msgid "" @@ -14661,19 +14705,15 @@ msgid "" "are a wide variety of packages from the community supported `conda-forge " "project `__" msgstr "" +"Conda は、 PyPI あらパッケージをインストールすることはしません -- `anaconda." +"org `__ もしくは (例えば イントラネットのような) ローカ" +"ルのパッケージサーバのような \"conda channel\" から利用可能な、特に conda 用" +"にビルドされたパッケージを管理することができるだけです。 `Anaconda, Inc. " +"`__ が維持管理する \"default\" チャンネルに加え" +"て、コミュニティがサポートする `conda-forge project `__ にも広範囲にわたるパッケージがあります。" #: ../source/key_projects.rst:426 -#, fuzzy -#| msgid "" -#| "Conda does not install packages from PyPI and can install only from the " -#| "official Anaconda repositories, or anaconda.org (a place for user-" -#| "contributed *conda* packages), or a local (e.g. intranet) package " -#| "server. However, note that :ref:`pip` can be installed into, and work " -#| "side-by-side with conda for managing :term:`distributions ` from PyPI. Also, `conda skeleton `__ is a tool to make Python packages installable by conda by first " -#| "fetching them from PyPI and modifying their metadata." msgid "" "Note that :ref:`pip` can be installed into, and work side-by-side with conda " "for managing :term:`distributions ` from PyPI. It is " @@ -14682,15 +14722,13 @@ msgid "" "latest/user-guide/tutorials/build-pkgs-skeleton.html>`__: a tool to " "automatically make conda packages from Python packages available on PyPI." msgstr "" -"Conda は PyPI からパッケージをインストールすることはなく、公式の Anaconda リ" -"ポジトリか、anaconda.org (ユーザが貢献した *conda* パッケージの置き場所) か、" -"または、ローカル (例えばイントラネット) にあるパッケージサーバからのみインス" -"トールすることができます。しかしながら、:ref:`pip` をインストールすることは可" -"能で、PyPI からの :term:`配布物 ` の管理という点では " -"conda と平行して動作することができます。また、 `conda skeleton `__ は、 PyPI から持ってきた Python パッケージのメタデータを修" -"正することで conda がインストールできるものにするためのツールです。" +"PyPI からの :term:`distributions ` を維持管理するため" +"に、 conda と並列に :ref:`pip` をインストールすることが可能で、並列に動作する" +"ということを覚えておいて下さい。また、 `conda skeleton `__ 、これは PyPI 上で利用可能な Python パッケージから conda パッケージ" +"を自動的に作成するツールですが、そのようなツールを使って、 conda パッケージ群" +"を Python ソースコードパッケージからビルドすることもできます。" #: ../source/key_projects.rst:435 msgid "devpi" @@ -16948,16 +16986,16 @@ msgstr "自分自身のカーネルを持ち込む" #: ../source/overview.rst:342 msgid "" -"Most 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." +"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 "" -"ほとんどのオペレーティングシステムでは、何らかの形であるオペレーティングシス" -"テム全体を内包するイメージの形にパッケージされたアプリケーションを動作させる" -"ことができるような、古典的な仮想化がサポートされています。このような仮想マシ" -"ンもしくは VM を動作させることは枯れた方法論で、データセンタ環境に広く普及し" -"ています。" +"ほとんどのデスクトップオペレーティングシステムでは、何らかの形であるオペレー" +"ティングシステム全体を内包するイメージの形にパッケージされたアプリケーション" +"を動作させることができるような、古典的な仮想化がサポートされています。このよ" +"うな仮想マシンもしくは VM を動作させることは枯れた方法論で、データセンタ環境" +"に広く普及しています。" #: ../source/overview.rst:347 msgid "" @@ -16971,10 +17009,14 @@ msgstr "" "く、次のものを含みます:" #: ../source/overview.rst:351 -msgid "`Vagrant `_" -msgstr "`Vagrant `_" +msgid "KVM on Linux" +msgstr "Linux 上の KVM" #: ../source/overview.rst:352 +msgid "Hyper-V on Windows" +msgstr "Windows 上の Hyper-V" + +#: ../source/overview.rst:353 msgid "" "`VHD `_, `AMI `_, and :doc:`other formats " @@ -16984,19 +17026,19 @@ msgstr "" "wikipedia.org/wiki/Amazon_Machine_Image>`_ や :doc:`他のフォーマット " "`" -#: ../source/overview.rst:353 +#: ../source/overview.rst:356 msgid "" "`OpenStack `_ - A cloud " -"management system in Python, with extensive VM support" +"management system written in Python, with extensive VM support" msgstr "" "`OpenStack `_ - 大規模な VM サ" -"ポート機能がついていて Python で書かれたクラウド管理システム" +"ポート機能が付いていて Python で書かれたクラウド管理システム" -#: ../source/overview.rst:356 +#: ../source/overview.rst:360 msgid "Bringing your own hardware" msgstr "自分自身のハードウェアを持ち込む" -#: ../source/overview.rst:358 +#: ../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 " @@ -17006,7 +17048,7 @@ msgstr "" "ンストールして出荷することです。この方法では、あなたのソフトウェアのユーザは" "電力供給しか要求されません。" -#: ../source/overview.rst:362 +#: ../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 " @@ -17016,7 +17058,7 @@ msgstr "" "によるアプライアンス機器は最先端のデータセンタから最も若い子供たちまでの誰に" "でも使えます。" -#: ../source/overview.rst:366 +#: ../source/overview.rst:370 msgid "" "Embed your code on an :gh:`Adafruit `, `MicroPython " "`_, or more-powerful hardware running Python, then " @@ -17029,21 +17071,21 @@ msgstr "" "しょう。彼らはプラグアンドプレイで使うし、あなたはその日の仕事を終わりにでき" "るでしょう。" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "A summary of technologies used to package Python applications." msgstr "Python アプリケーションをパッケージするのに使われる技術の概要。" -#: ../source/overview.rst:375 +#: ../source/overview.rst:379 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" "Python アプリケーションをパッケージするのに使われる技術の単純化された全体像。" -#: ../source/overview.rst:378 +#: ../source/overview.rst:382 msgid "What about..." msgstr "これは何..." -#: ../source/overview.rst:380 +#: ../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." @@ -17051,11 +17093,11 @@ msgstr "" "上記の節ではかなり要約して書いているので、飛躍している点が目につくかもしれま" "せん。" -#: ../source/overview.rst:384 +#: ../source/overview.rst:388 msgid "Operating system packages" msgstr "オペレーティングシステムレベルのパッケージ" -#: ../source/overview.rst:386 +#: ../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 " @@ -17078,7 +17120,7 @@ msgstr "" "latest/cli-reference.html#virtualenv>`_ を使えば、同じソースコードから deb " "と RPM の両方を生成することさえ可能です。" -#: ../source/overview.rst:397 +#: ../source/overview.rst:401 msgid "" "In most deployment pipelines, the OS package manager is just one piece of " "the puzzle." @@ -17086,7 +17128,7 @@ msgstr "" "ほとんどの配置パイプラインでは、 OS パッケージ管理機構は全体から見ればほんの" "一部です。" -#: ../source/overview.rst:403 +#: ../source/overview.rst:407 msgid "" ":doc:`Virtualenvs ` have been an indispensable " "tool for multiple generations of Python developer, but are slowly fading " @@ -17102,7 +17144,7 @@ msgstr "" "`the dh-virtualenv tool ` や `osnap `_ では virtualenvs はプリミティブとして使われています。" -#: ../source/overview.rst:412 +#: ../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 " @@ -17112,11 +17154,11 @@ msgstr "" "virtualenv への ``python -m pip install`` を走らせることに信用をおいてはなり" "ません。上に述べた概要には、より良い解決策がたくさんあります。" -#: ../source/overview.rst:417 +#: ../source/overview.rst:421 msgid "Security" msgstr "セキュリティ" -#: ../source/overview.rst:419 +#: ../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." @@ -17125,7 +17167,7 @@ msgstr "" "に困難なものになるでしょう。あらゆるものがより緊密に互いに固着しているので" "す。" -#: ../source/overview.rst:422 +#: ../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 " @@ -17143,11 +17185,11 @@ msgstr "" "がまだ決着のついていない `静的リンク対動的リンク `_ ということになります。" -#: ../source/overview.rst:431 +#: ../source/overview.rst:435 msgid "Wrap up" msgstr "まとめ" -#: ../source/overview.rst:433 +#: ../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 " @@ -17568,11 +17610,6 @@ msgid "File contents" msgstr "ファイルの内容" #: ../source/specifications/binary-distribution-format.rst:177 -#, fuzzy -#| msgid "" -#| "The contents of a wheel file, where {distribution} is replaced with the " -#| "name of the package, e.g. ``beaglevote`` and {version} is replaced with " -#| "its version, e.g. ``1.0.0``, consist of:" msgid "" "The contents of a wheel file, where {distribution} is replaced with the :ref:" "`normalized name ` of the package, e.g. ``beaglevote`` " @@ -17580,9 +17617,12 @@ msgid "" "specifiers-normalization>`, e.g. ``1.0.0``, (with dash/``-`` characters " "replaced with underscore/``_`` characters in both fields) consist of:" msgstr "" -"{distribution} の部分を例えば ``beaglevote`` のようなパッケージ名で置き換" -"え、 {version} の部分を例えば `1.0.0`` のようなバージョン番号で置き換えた " -"wheel ファイルの内容は次のもので構成されています:" +"{distribution} の部分を例えば ``beaglevote`` のようなパッケージの :ref:" +"`normalized name ` で置き換え、 {version} を例えば " +"``1.0.0`` のような :ref:`normalized version ` で置き換えた時 (両方のフィールドでダッシュ文字/``-`` をアン" +"ダースコア文字/``_`` で置換) 、 wheel ファイルの内容は、以下の要素から構成さ" +"れます:" #: ../source/specifications/binary-distribution-format.rst:184 msgid "" @@ -17600,11 +17640,11 @@ msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "``{distribution}-{version}.dist-info/`` はメタデータを含んでいます。" #: ../source/specifications/binary-distribution-format.rst:188 -#, fuzzy -#| msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgid "" ":file:`{distribution}-{version}.dist-info/licenses/` contains license files." -msgstr "``{distribution}-{version}.dist-info/`` はメタデータを含んでいます。" +msgstr "" +":file:`{distribution}-{version}.dist-info/licenses/` はライセンスファイル群を" +"含んでいます。" #: ../source/specifications/binary-distribution-format.rst:189 msgid "" @@ -17620,11 +17660,6 @@ msgstr "" "みます。" #: ../source/specifications/binary-distribution-format.rst:193 -#, fuzzy -#| 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." msgid "" "Python scripts must appear in ``scripts`` and begin with exactly ``b'#!" "python'`` in order to enjoy script wrapper generation and ``#!python`` " @@ -17633,7 +17668,8 @@ msgid "" msgstr "" "Python スクリプトは ``scripts`` ディレクトリに置かなければならず、また、イン" "ストール時のスクリプトラッパの生成や ``#!python`` 書き換えといった利点を活用" -"するために、正確に ``b'#!python'`` で始まっていなければなりません。" +"するために、正確に ``b'#!python'`` で始まっていなければなりません。 " +"``scripts`` ディレクトリには、通常ファイルしか置けません。" #: ../source/specifications/binary-distribution-format.rst:197 msgid "" @@ -17795,7 +17831,7 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:257 msgid "Subdirectories in :file:`.dist-info/`" -msgstr "" +msgstr ":file:`.dist-info/` 内のサブディレクトリ群" #: ../source/specifications/binary-distribution-format.rst:259 msgid "" @@ -17803,61 +17839,50 @@ 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:263 -#, fuzzy -#| msgid "Project name" msgid "Subdirectory name" -msgstr "プロジェクト名" +msgstr "サブディレクトリ名" #: ../source/specifications/binary-distribution-format.rst:263 msgid "PEP / Standard" -msgstr "" +msgstr "PEP / Standard" #: ../source/specifications/binary-distribution-format.rst:265 -#, fuzzy -#| msgid "``license``" msgid "``licenses``" -msgstr "``ライセンス``" +msgstr "``licenses``" #: ../source/specifications/binary-distribution-format.rst:265 #: ../source/specifications/binary-distribution-format.rst:266 -#, fuzzy -#| msgid ":pep:`600`" msgid ":pep:`639`" -msgstr ":pep:`600`" +msgstr ":pep:`639`" #: ../source/specifications/binary-distribution-format.rst:266 -#, fuzzy -#| msgid "``license``" msgid "``license_files``" -msgstr "``ライセンス``" +msgstr "``license_files``" #: ../source/specifications/binary-distribution-format.rst:267 -#, fuzzy -#| msgid "``LIB``" msgid "``LICENSES``" -msgstr "``LIB``" +msgstr "``LICENSES``" #: ../source/specifications/binary-distribution-format.rst:267 msgid "`REUSE licensing framework `__" -msgstr "" +msgstr "`REUSE ライセンシングフレームワーク `__" #: ../source/specifications/binary-distribution-format.rst:268 msgid "``sboms``" -msgstr "" +msgstr "``sboms``" #: ../source/specifications/binary-distribution-format.rst:268 -#, fuzzy -#| msgid ":pep:`571`" msgid ":pep:`770`" -msgstr ":pep:`571`" +msgstr ":pep:`770`" #: ../source/specifications/binary-distribution-format.rst:272 -#, fuzzy -#| msgid "The .dist-info directory" msgid "The :file:`.dist-info/licenses/` directory" -msgstr ".dist-info ディレクトリ" +msgstr ":file:`.dist-info/licenses/` ディレクトリ" #: ../source/specifications/binary-distribution-format.rst:274 msgid "" @@ -17867,12 +17892,15 @@ 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:281 -#, fuzzy -#| msgid "The .dist-info directory" msgid "The :file:`.dist-info/sboms/` directory" -msgstr ".dist-info ディレクトリ" +msgstr "The :file:`.dist-info/sboms/` ディレクトリ" #: ../source/specifications/binary-distribution-format.rst:283 msgid "" @@ -17880,6 +17908,9 @@ 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:288 msgid "The .data directory" @@ -18207,7 +18238,7 @@ msgstr "" "状態で再現するように要求されるであろうということを認識しておいてください。" #: ../source/specifications/binary-distribution-format.rst:455 -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:1035 #: ../source/specifications/dependency-groups.rst:250 #: ../source/specifications/dependency-specifiers.rst:516 #: ../source/specifications/direct-url-data-structure.rst:292 @@ -18218,9 +18249,9 @@ msgstr "" #: ../source/specifications/name-normalization.rst:50 #: ../source/specifications/platform-compatibility-tags.rst:434 #: ../source/specifications/pylock-toml.rst:826 -#: ../source/specifications/pyproject-toml.rst:531 +#: ../source/specifications/pyproject-toml.rst:630 #: ../source/specifications/recording-installed-packages.rst:278 -#: ../source/specifications/simple-repository-api.rst:1012 +#: ../source/specifications/simple-repository-api.rst:972 #: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1269 #: ../source/specifications/virtual-environments.rst:54 @@ -18246,24 +18277,28 @@ 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:464 #: ../source/specifications/recording-installed-packages.rst:288 -#, fuzzy -#| msgid "" -#| "September 2022: The filename of a source distribution was standardized " -#| "through :pep:`625`." msgid "" "December 2024: The :file:`.dist-info/licenses/` directory was specified " "through :pep:`639`." msgstr "" -"2022年9月: :pep:`625` を通じて、ソースコード配布物のファイル名を標準化した。" +"2022年12月: :pep:`639` を通じて、 :file:`.dist-info/licenses/` ディレクトリが" +"仕様化された。" #: ../source/specifications/binary-distribution-format.rst:466 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:471 msgid "Appendix" @@ -18276,11 +18311,11 @@ 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 "" @@ -18289,6 +18324,9 @@ msgid "" "extension ABI details, and other information that is specific to that " "particular build of Python." msgstr "" +"``build-details.json`` ファイルは、バージョン番号や拡張 ABI の詳細その他 " +"Python をビルドすることに特に関係する情報のような Python のインストール関係の" +"ビルドに特化した情報を提供する標準化されたファイルフォーマットです。" #: ../source/specifications/build-details/index.rst:18 msgid "" @@ -18296,12 +18334,16 @@ msgid "" "platform-independent standard library directory (``stdlib``, e.g. ``/usr/lib/" "python3.14/build-details.json``)." msgstr "" +"Python 3.14 以降、 ``build-details.json`` ファイルは、プラットフォーム非依存" +"の標準ライブラリディレクトリ (``stdlib`` 、例えば ``/usr/lib/python3.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 @@ -18311,10 +18353,8 @@ msgid "Example" msgstr "例" #: ../source/specifications/build-details/index.rst:35 -#, fuzzy -#| msgid "Changes" msgid "Changelog" -msgstr "変更点" +msgstr "Changelog" #: ../source/specifications/build-details/index.rst:45 #: ../source/specifications/build-details/v1.0.rst:9 @@ -18332,13 +18372,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 -#, fuzzy -#| msgid "JSON Schema" msgid "Schema" -msgstr "JSON スキーマ" +msgstr "スキーマ" #: ../source/specifications/build-details/index.rst:49 #: ../source/specifications/build-details/v1.0.rst:12 @@ -18346,44 +18384,44 @@ 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 "" +"*build-details.json -- Python インストール状態のビルドの詳細を伴った静的な記" +"述ファイル*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "type" -msgstr "" +msgstr "型" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Project" msgid "*object*" -msgstr "プロジェクト" +msgstr "*オブジェクト*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "properties" -msgstr "" +msgstr "プロパティ" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**schema\\_version**" -msgstr "" +msgstr "**schema\\_version**" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Semantic versioning" msgid "Schema version." -msgstr "セマンティックバージョニング" +msgstr "スキーマバージョン" #: ../source/specifications/build-details/v1.0.rst:12 msgid "" @@ -18392,12 +18430,18 @@ msgid "" "**minor** components of the version. Versions may be arithmetically compared " "by intrepreting the version string as a decimal number." msgstr "" +"これは、```` と ```` がパディングされていない番号でバージョン番" +"号の **メジャー** 部分と **マイナー** 部分を表現するものとして、 ``." +"`` フォーマットに続く文字列です。バージョン番号は、バージョン文字列を" +"10進数の数として解釈することによって、算術的に比較しても構いません。" #: ../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 "" @@ -18410,239 +18454,228 @@ msgid "" "the older specification, with the exception of additional properties (errors " "caused by ``additionalProperties``)." msgstr "" +"スキーマの将来のバージョン番号は、より大きなバージョン番号を使わなければ **な" +"りません** 。このスキーマの将来のバージョン番号は、その仕様が後方互換性を尊重" +"しているのでなければ、他のスキーマバージョンと同じ **メジャー** バージョン部" +"分を使っては **なりません** -- 現在の仕様のどの一部分であってもデータの解釈が" +"異なる意味になるようなやり方や、追加のプロパティ (``additionalProperties`` に" +"よって引き起こされたエラー) を例外として新仕様の下で正当なデータが旧仕様の下" +"では不当なものになるようなやり方で、変更したり拡張したりすることはできませ" +"ん。" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*string*" -msgstr "" +msgstr "*文字列 *" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "enscons" msgid "const" -msgstr "enscons" +msgstr "定数 " #: ../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 -#, fuzzy -#| msgid "Examples" msgid "examples" 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 "" +"実行可能なインタープリタがインストールされているなら、このフィールドが **存在" +"しなければなりません** 。" #: ../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 -#, fuzzy -#| msgid "python" msgid "bin/python" -msgstr "python" +msgstr "bin/python" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "platform tag" msgid "**platform**" -msgstr "プラットフォームタグ" +msgstr "**platform**" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "platform tag" 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 "" +"このフィールドは、 ``sysconfig.get_platform()`` と **同等であるべきです** 。" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "linux_x86_64" msgid "linux-x86\\_64" -msgstr "linux_x86_64" +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 -#, fuzzy -#| msgid "Versions" msgid "**version**" -msgstr "バージョン指定子" +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 "" +msgstr "3.14" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Versioning" msgid "version\\_info" -msgstr "バージョニング" +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 "メジャー" #: ../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 "マイナー" #: ../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 "マイクロ" #: ../source/specifications/build-details/v1.0.rst:12 msgid "1" -msgstr "" +msgstr "1" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Release" msgid "releaselevel" -msgstr "リリース" +msgstr "リリースレベル" #: ../source/specifications/build-details/v1.0.rst:12 msgid "final" -msgstr "" +msgstr "ファイナル" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Mercurial" msgid "serial" -msgstr "Mercurial" +msgstr "シリアル" #: ../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 "**メジャー**" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "**Numbers**" msgid "*number*" -msgstr "**数値の書き方**" +msgstr "*数*" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**minor**" -msgstr "" +msgstr "**マイナー**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**micro**" -msgstr "" +msgstr "**マイクロ**" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**releaselevel**" -msgstr "" +msgstr "**リリースレベル**" #: ../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 "アルファ・ベータ・候補・最終" #: ../source/specifications/build-details/v1.0.rst:12 msgid "**serial**" -msgstr "" +msgstr "**シリアル**" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Additional notes" msgid "additionalProperties" -msgstr "補遺" +msgstr "additionalProperties" #: ../source/specifications/build-details/v1.0.rst:12 msgid "False" -msgstr "" +msgstr "偽" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "Implementation Notes" msgid "**implementation**" -msgstr "実装に関する覚書" +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 "" @@ -18651,125 +18684,133 @@ 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 "**名称**" #: ../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 -#, fuzzy -#| msgid "python" msgid "cpython" -msgstr "python" +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 "" +"実装のバージョン番号を含んだ、 :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 -#, fuzzy -#| msgid "abi tag" msgid "abi" -msgstr "abi タグ" +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 -#, fuzzy -#| msgid "**Headings**" msgid "**flags**" -msgstr "**見出しの付け方**" +msgstr "**flags**" #: ../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 "" +"フラグは、拡張のサフィックスに出現する順序に従って定義されなければ **なりませ" +"ん** 。" #: ../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 "" +"現在の実装のバージョン番号に対してビルドされた拡張に使われるサフィックス。" #: ../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 "" +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 "" @@ -18777,6 +18818,9 @@ 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 "" @@ -18784,92 +18828,96 @@ 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 -#, fuzzy -#| msgid "Versions" msgid "extensions" -msgstr "バージョン指定子" +msgstr "extensions" #: ../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 -#, fuzzy -#| msgid "python" msgid "libpython" -msgstr "python" +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 -#, fuzzy -#| msgid "``dynamic``" msgid "dynamic" -msgstr "``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 "" +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 "" @@ -18877,118 +18925,125 @@ 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 "" +"このキーが存在するなら、 ``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 -#, fuzzy -#| msgid "Building binary extensions" 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 "" +"拡張は、動的な ``libpython`` がリンクするようにビルドされているべきですか?" #: ../source/specifications/build-details/v1.0.rst:12 msgid "*boolean*" -msgstr "" +msgstr "*boolean*" #: ../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 "" +"Python 実装が C API を提供しているなら、このフィールドは存在していなければ **" +"ならず** 、そうでなければ欠けていることでしょう。" #: ../source/specifications/build-details/v1.0.rst:12 -#, fuzzy -#| msgid "**Numbers**" msgid "**headers**" -msgstr "**数値の書き方**" +msgstr "**headers**" #: ../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 -#, fuzzy -#| msgid "Arbitrary equality" 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 "" @@ -18996,14 +19051,17 @@ 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 "コアとなるメタデータの仕様" #: ../source/specifications/core-metadata.rst:9 -msgid "This page describes version 2.4, approved in August 2024." -msgstr "" +msgid "This page describes version 2.5, approved in September 2025." +msgstr "このページは、 2025年9月に承認されたバージョン 2.5 を記述しています。" #: ../source/specifications/core-metadata.rst:11 msgid "" @@ -19092,16 +19150,12 @@ msgid "Metadata-Version" msgstr "Metadata-Version" #: ../source/specifications/core-metadata.rst:52 -#, fuzzy -#| msgid "" -#| "Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " -#| "\"2.1\", \"2.2\", and \"2.3\"." msgid "" "Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " -"\"2.1\", \"2.2\", \"2.3\", and \"2.4\"." +"\"2.1\", \"2.2\", \"2.3\", \"2.4\", and \"2.5\"." msgstr "" -"ファイルフォーマットのバージョン; 正しいものは \"1.0\", \"1.1\", \"1.2\", " -"\"2.1\", \"2.2\", と \"2.3\"。" +"ファイルフォーマットのバージョン番号; 合法な値は次のとおり\"1.0\", \"1.1\", " +"\"1.2\", \"2.1\", \"2.2\", \"2.3\", \"2.4\" および \"2.5\"。" #: ../source/specifications/core-metadata.rst:55 msgid "" @@ -19131,23 +19185,23 @@ msgstr "" #: ../source/specifications/core-metadata.rst:66 #: ../source/specifications/core-metadata.rst:84 #: ../source/specifications/core-metadata.rst:101 -#: ../source/specifications/core-metadata.rst:166 -#: ../source/specifications/core-metadata.rst:181 -#: ../source/specifications/core-metadata.rst:219 -#: ../source/specifications/core-metadata.rst:291 -#: ../source/specifications/core-metadata.rst:295 -#: ../source/specifications/core-metadata.rst:299 -#: ../source/specifications/core-metadata.rst:303 -#: ../source/specifications/core-metadata.rst:335 -#: ../source/specifications/core-metadata.rst:357 -#: ../source/specifications/core-metadata.rst:375 -#: ../source/specifications/core-metadata.rst:400 -#: ../source/specifications/core-metadata.rst:422 -#: ../source/specifications/core-metadata.rst:642 -#: ../source/specifications/core-metadata.rst:677 -#: ../source/specifications/core-metadata.rst:687 -#: ../source/specifications/core-metadata.rst:821 -#: ../source/specifications/core-metadata.rst:918 +#: ../source/specifications/core-metadata.rst:176 +#: ../source/specifications/core-metadata.rst:191 +#: ../source/specifications/core-metadata.rst:229 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:305 +#: ../source/specifications/core-metadata.rst:309 +#: ../source/specifications/core-metadata.rst:313 +#: ../source/specifications/core-metadata.rst:345 +#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:385 +#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:432 +#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:693 +#: ../source/specifications/core-metadata.rst:703 +#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:1029 msgid "Example::" msgstr "例::" @@ -19256,14 +19310,36 @@ msgstr "" #: ../source/specifications/core-metadata.rst:136 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 を持っているなら、一部の wheel は sdist から直接にビルド" +"されるわけではなく、既存の wheel (例えば、 ``auditwheel`` ツールはこれをやり" +"ますし、 PyPI 用に wheel をビルドするときには一般的に使われます)から変換して" +"作られるので、 ``動的 `` とマークされていないフィールドが他の wheel " +"でも同じ値を持つであろうということを、特に覚えておいてください。このような変" +"換には、 (動的ではないメタデータであってさえも) メタデータの変更をも含む *か" +"もしれません* 。同様に、 sdis と、自分でその sdist から ビルドしたわけではな" +"い wheel が手元にある時、 ``動的`` とマークされていないフィールドであってさえ" +"も、 wheel のメタデータが sdist のそれと一致すると仮定することはできません。" + +#: ../source/specifications/core-metadata.rst:146 +msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "``Dynamic`` の詳細かつ完全な意味は :pep:`643` に記述されています。" -#: ../source/specifications/core-metadata.rst:141 +#: ../source/specifications/core-metadata.rst:151 msgid "Platform (multiple use)" msgstr "Platform (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:145 +#: ../source/specifications/core-metadata.rst:155 msgid "" "A Platform specification describing an operating system supported by the " "distribution which is not listed in the \"Operating System\" Trove " @@ -19273,25 +19349,27 @@ msgstr "" "もので、 \"Operating System\" Trove 分類子には記載されていないもの。後述の " "\"分類子 \" を見てください。" -#: ../source/specifications/core-metadata.rst:149 -#: ../source/specifications/core-metadata.rst:455 -#: ../source/specifications/core-metadata.rst:476 -#: ../source/specifications/core-metadata.rst:499 -#: ../source/specifications/core-metadata.rst:528 -#: ../source/specifications/core-metadata.rst:569 -#: ../source/specifications/core-metadata.rst:625 -#: ../source/specifications/core-metadata.rst:762 -#: ../source/specifications/core-metadata.rst:792 -#: ../source/specifications/core-metadata.rst:872 -#: ../source/specifications/core-metadata.rst:894 +#: ../source/specifications/core-metadata.rst:159 +#: ../source/specifications/core-metadata.rst:465 +#: ../source/specifications/core-metadata.rst:492 +#: ../source/specifications/core-metadata.rst:515 +#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:585 +#: ../source/specifications/core-metadata.rst:641 +#: ../source/specifications/core-metadata.rst:775 +#: ../source/specifications/core-metadata.rst:816 +#: ../source/specifications/core-metadata.rst:873 +#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:983 +#: ../source/specifications/core-metadata.rst:1005 msgid "Examples::" msgstr "例::" -#: ../source/specifications/core-metadata.rst:157 +#: ../source/specifications/core-metadata.rst:167 msgid "Supported-Platform (multiple use)" msgstr "Supported-Platform (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:161 +#: ../source/specifications/core-metadata.rst:171 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 " @@ -19303,19 +19381,19 @@ msgstr "" "ルされたかを指定することになるでしょう。 Supported-Platform フィールドのセマ" "ンティクスは PEP には定義されたものがありません。" -#: ../source/specifications/core-metadata.rst:175 +#: ../source/specifications/core-metadata.rst:185 msgid "Summary" msgstr "Summary" -#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:189 msgid "A one-line summary of what the distribution does." msgstr "その配布物が何をするものかを1行で記述した要約。" -#: ../source/specifications/core-metadata.rst:199 +#: ../source/specifications/core-metadata.rst:209 msgid "This field may be specified in the message body instead." msgstr "このフィールドの代わりにメッセージ本体で指定しても構いません。" -#: ../source/specifications/core-metadata.rst:202 +#: ../source/specifications/core-metadata.rst:212 msgid "" "A longer description of the distribution that can run to several " "paragraphs. Software that deals with metadata should not assume any maximum " @@ -19326,7 +19404,7 @@ msgstr "" "書並みの記述をするべきではありませんが、メタデータを扱うソフトウェアはこの" "フィールドに最大長さがあるものと仮定すべきではありません。" -#: ../source/specifications/core-metadata.rst:207 +#: ../source/specifications/core-metadata.rst:217 msgid "" "The contents of this field can be written using reStructuredText markup " "[1]_. For programs that work with the metadata, supporting markup is " @@ -19339,7 +19417,7 @@ msgstr "" "示することも可能です。つまり、作者の側は、自分が採用するマークアップ言語につ" "いては保守的であるべきだということになります。" -#: ../source/specifications/core-metadata.rst:213 +#: ../source/specifications/core-metadata.rst:223 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 " @@ -19351,7 +19429,7 @@ msgstr "" "りません。その結果として、Description フィールドが RFC 822 構文解析器 [2]_ で" "解析可能な形の改行可能なフィールドにエンコードされます。" -#: ../source/specifications/core-metadata.rst:230 +#: ../source/specifications/core-metadata.rst:240 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 " @@ -19361,7 +19439,7 @@ msgstr "" "み取り器で読み取る時には、CRLF と7個の空白文字とそれに引き続くパイプ文字が出" "現するたびにそれを単独の CRLF に置き換えなければならないということです。" -#: ../source/specifications/core-metadata.rst:234 +#: ../source/specifications/core-metadata.rst:244 msgid "" "Alternatively, the distribution's description may instead be provided in the " "message body (i.e., after a completely blank line following the headers, " @@ -19371,11 +19449,11 @@ msgstr "" "下げやその他の特別なフォーマットを使わずに、ヘッダの並びの後の完全な空行に続" "けて書く) こともできます。" -#: ../source/specifications/core-metadata.rst:243 +#: ../source/specifications/core-metadata.rst:253 msgid "Description-Content-Type" msgstr "Description-Content-Type" -#: ../source/specifications/core-metadata.rst:247 +#: ../source/specifications/core-metadata.rst:257 msgid "" "A string stating the markup syntax (if any) used in the distribution's " "description, so that tools can intelligently render the description." @@ -19383,7 +19461,7 @@ msgstr "" "配布物の説明で使われるマークアップ構文 (もしあれば) を述べる文字列で、ツール" "の側が頭の良いやり方で説明を表示することができます。" -#: ../source/specifications/core-metadata.rst:250 +#: ../source/specifications/core-metadata.rst:260 msgid "" "Historically, PyPI supported descriptions in plain text and " "`reStructuredText (reST) `" msgstr "``GFM`` すなわち :rfc:`Github 流の Markdown <7764#section-3.2>`" -#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:299 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" msgstr ":rfc:`CommonMark <7764#section-3.5>` を指定する ``CommonMark``" -#: ../source/specifications/core-metadata.rst:307 +#: ../source/specifications/core-metadata.rst:317 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 " @@ -19485,7 +19563,7 @@ msgstr "" "ては、まず ``text/x-rst; charset=UTF-8`` として表示を試み、正当な rst ではな" "い場合に ``text/plain`` にフォールバックするべきです。" -#: ../source/specifications/core-metadata.rst:311 +#: ../source/specifications/core-metadata.rst:321 msgid "" "If a ``Description-Content-Type`` is an unrecognized value, then the assumed " "content type is ``text/plain`` (Although PyPI will probably reject anything " @@ -19495,7 +19573,7 @@ msgstr "" "``text/plain`` であるものと仮定します (とはいえ、認識できない値であれば何で" "あっても PyPI が拒否することになるでしょう) 。" -#: ../source/specifications/core-metadata.rst:315 +#: ../source/specifications/core-metadata.rst:325 msgid "" "If the ``Description-Content-Type`` is ``text/markdown`` and ``variant`` is " "not specified or is set to an unrecognized value, then the assumed " @@ -19505,7 +19583,7 @@ msgstr "" "ない場合や認識できない値が指定された場合には、 ``variant`` が ``GFM`` である" "ものと仮定されます。" -#: ../source/specifications/core-metadata.rst:319 +#: ../source/specifications/core-metadata.rst:329 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 " @@ -19515,11 +19593,11 @@ msgstr "" "``variant`` はデフォルトでは ``GFM`` ですので、それ以前の例と同等であるという" "ことになります。" -#: ../source/specifications/core-metadata.rst:328 +#: ../source/specifications/core-metadata.rst:338 msgid "Keywords" msgstr "キーワード" -#: ../source/specifications/core-metadata.rst:332 +#: ../source/specifications/core-metadata.rst:342 msgid "" "A list of additional keywords, separated by commas, to be used to assist " "searching for the distribution in a larger catalog." @@ -19527,7 +19605,7 @@ msgstr "" "より大きなカタログで配布物を検索する助けとなるべく使用される、コンマで区切ら" "れた追加のキーワードのリスト。" -#: ../source/specifications/core-metadata.rst:341 +#: ../source/specifications/core-metadata.rst:351 msgid "" "The specification previously showed keywords separated by spaces, but " "distutils and setuptools implemented it with commas. These tools have been " @@ -19539,22 +19617,22 @@ msgstr "" "常に広く使われていますので、仕様をデファクト標準に合わせる形で更新する方が簡" "単でした。" -#: ../source/specifications/core-metadata.rst:350 +#: ../source/specifications/core-metadata.rst:360 msgid "Author" msgstr "Author" -#: ../source/specifications/core-metadata.rst:354 +#: ../source/specifications/core-metadata.rst:364 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" "少なくとも作者の名前を含む文字列で、連絡先となる情報を追加しても構いません。" -#: ../source/specifications/core-metadata.rst:367 +#: ../source/specifications/core-metadata.rst:377 msgid "Author-email" msgstr "Author-email" -#: ../source/specifications/core-metadata.rst:371 +#: ../source/specifications/core-metadata.rst:381 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." @@ -19562,8 +19640,8 @@ msgstr "" "作者の電子メールアドレスを含む文字列。 RFC-822 の ``From:`` ヘッダの記述形式" "として正当な形で名前と電子メールアドレスを含んでいても構いません。" -#: ../source/specifications/core-metadata.rst:379 -#: ../source/specifications/core-metadata.rst:426 +#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:436 msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" @@ -19571,11 +19649,11 @@ msgstr "" "RFC-822 によれば、このフィールドは、複数の電子メールアドレスをコンマで区切っ" "て記述しても構いません::" -#: ../source/specifications/core-metadata.rst:389 +#: ../source/specifications/core-metadata.rst:399 msgid "Maintainer" msgstr "メンテナ" -#: ../source/specifications/core-metadata.rst:393 +#: ../source/specifications/core-metadata.rst:403 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." @@ -19583,7 +19661,7 @@ msgstr "" "少なくともメンテナの名前を含む文字列で、連絡先となる情報を追加しても構いませ" "ん。" -#: ../source/specifications/core-metadata.rst:396 +#: ../source/specifications/core-metadata.rst:406 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 " @@ -19593,11 +19671,11 @@ msgstr "" "フィールドを使うことを想定しているということを覚えておいてください: もし " "``Author`` と同一人物であれば、このフィールドを省略するべきです。" -#: ../source/specifications/core-metadata.rst:410 +#: ../source/specifications/core-metadata.rst:420 msgid "Maintainer-email" msgstr "Maintainer-email" -#: ../source/specifications/core-metadata.rst:414 +#: ../source/specifications/core-metadata.rst:424 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." @@ -19605,7 +19683,7 @@ msgstr "" "メンテナの電子メールアドレスを含む文字列。 RFC-822 の ``From:`` ヘッダの記述" "形式として正当な形で名前と電子メールアドレスを含んでいても構いません。" -#: ../source/specifications/core-metadata.rst:418 +#: ../source/specifications/core-metadata.rst:428 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 " @@ -19615,25 +19693,28 @@ msgstr "" "フィールドを使うことを想定しているということを覚えておいてください: もし " "``Author-email`` と同一であれば、このフィールドを省略するべきです。" -#: ../source/specifications/core-metadata.rst:436 +#: ../source/specifications/core-metadata.rst:446 msgid "License" msgstr "License" -#: ../source/specifications/core-metadata.rst:439 -#, fuzzy -#| msgid "in favour of ``Requires-Dist``" +#: ../source/specifications/core-metadata.rst:449 msgid "in favour of ``License-Expression``." -msgstr "``Requires-Dist`` に従って" +msgstr "``License-Expression`` に従って。" -#: ../source/specifications/core-metadata.rst:443 +#: ../source/specifications/core-metadata.rst:453 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:448 +#: ../source/specifications/core-metadata.rst:458 msgid "" "Text indicating the license covering the distribution where the license is " "not a selection from the \"License\" Trove classifiers. See :ref:" @@ -19648,34 +19729,51 @@ msgstr "" "由して名指しされたライセンスの特定のバージョンを指定したり、そのようなライセ" "ンスに対する変種や例外事項を示したりするのに使っても構いません。" -#: ../source/specifications/core-metadata.rst:468 +#: ../source/specifications/core-metadata.rst:478 msgid "License-Expression" -msgstr "" +msgstr "License-Expression" -#: ../source/specifications/core-metadata.rst:472 +#: ../source/specifications/core-metadata.rst:482 msgid "" "Text string that is a valid SPDX :term:`license expression `, as specified in :doc:`/specifications/license-expression`." msgstr "" +":doc:`/specifications/license-expression` で指定された、正当な SPDX :term:`ラ" +"イセンス表現 ` であるテキスト文字列。" -#: ../source/specifications/core-metadata.rst:491 -#, fuzzy -#| msgid "Requires-Dist (multiple use)" +#: ../source/specifications/core-metadata.rst:486 +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:`ソースコード配布物 " +"` や :term:`Wheel`) を伴うメタデータを含" +"む :term:`配布物アーカイブ ` にだけ適用されるのであっ" +"て、プロジェクト全体やプロジェクトに関係する (他の配布物アーカイブを含む) 他" +"のファイルことに注意してください。" + +#: ../source/specifications/core-metadata.rst:507 msgid "License-File (multiple use)" -msgstr "Requires-Dist (複数回の使用可)" +msgstr "License-File (複数回使用)" -#: ../source/specifications/core-metadata.rst:495 +#: ../source/specifications/core-metadata.rst:511 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 "" +"各エントリは、ライセンス関連のファイルのパスの文字列表現です。パスは、プロ" +"ジェクトのソースコードツリー内に位置していて、プロジェクトのルートディレクト" +"リからの相対ぱすです。詳細については、 :pep:`639` をみてください。" -#: ../source/specifications/core-metadata.rst:512 +#: ../source/specifications/core-metadata.rst:528 msgid "Classifier (multiple use)" msgstr "Classifier (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:516 +#: ../source/specifications/core-metadata.rst:532 msgid "" "Each entry is a string giving a single classification value for the " "distribution. Classifiers are described in :pep:`301`, and the Python " @@ -19687,28 +19785,31 @@ msgstr "" "されている分類子 `__ という動的なリストを公開" "しています。" -#: ../source/specifications/core-metadata.rst:522 +#: ../source/specifications/core-metadata.rst:538 msgid "" "The use of ``License ::`` classifiers is deprecated as of Metadata 2.4, use " "``License-Expression`` instead. See `PEP 639 `_." msgstr "" +"``License::`` 分類子の使用は Metadata 2.4 の時点で非推奨になっており、代わり" +"に ``License-Expression`` を使ってください。 `PEP 639 `__ を見てください。" -#: ../source/specifications/core-metadata.rst:526 -#: ../source/specifications/core-metadata.rst:616 -#: ../source/specifications/core-metadata.rst:760 -#: ../source/specifications/core-metadata.rst:785 +#: ../source/specifications/core-metadata.rst:542 +#: ../source/specifications/core-metadata.rst:632 +#: ../source/specifications/core-metadata.rst:871 +#: ../source/specifications/core-metadata.rst:896 msgid "This field may be followed by an environment marker after a semicolon." msgstr "このフィールドでは、セミコロンの後に環境指標を続けても構いません。" -#: ../source/specifications/core-metadata.rst:537 +#: ../source/specifications/core-metadata.rst:553 msgid "Requires-Dist (multiple use)" msgstr "Requires-Dist (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:540 -#: ../source/specifications/core-metadata.rst:603 -#: ../source/specifications/core-metadata.rst:732 -#: ../source/specifications/core-metadata.rst:774 +#: ../source/specifications/core-metadata.rst:556 +#: ../source/specifications/core-metadata.rst:619 +#: ../source/specifications/core-metadata.rst:843 +#: ../source/specifications/core-metadata.rst:885 msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." @@ -19716,7 +19817,7 @@ msgstr "" "フィールドの仕様は、人気のある公開ツール群が用いる構文を許容するように緩めら" "れました。" -#: ../source/specifications/core-metadata.rst:544 +#: ../source/specifications/core-metadata.rst:560 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." @@ -19724,11 +19825,11 @@ msgstr "" "それぞれのエントリは、この配布物が要求する他の distutils のプロジェクトを名指" "しする文字列を含みます。" -#: ../source/specifications/core-metadata.rst:547 +#: ../source/specifications/core-metadata.rst:563 msgid "The format of a requirement string contains from one to four parts:" msgstr "要求事項を示す文字列のフォーマットは、1個から4個の部分を含みます:" -#: ../source/specifications/core-metadata.rst:549 +#: ../source/specifications/core-metadata.rst:565 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." @@ -19736,7 +19837,7 @@ msgstr "" "``Name:`` フィールドと同じフォーマットのプロジェクト名。これだけが必須部分で" "す。" -#: ../source/specifications/core-metadata.rst:551 +#: ../source/specifications/core-metadata.rst:567 msgid "" "A comma-separated list of 'extra' names. These are defined by the required " "project, referring to specific features which may need extra dependencies. " @@ -19748,7 +19849,7 @@ msgstr "" "``Provides-Extra:`` フィールドで指定された制約事項に従うものでなければなりま" "せん。" -#: ../source/specifications/core-metadata.rst:555 +#: ../source/specifications/core-metadata.rst:571 msgid "" "A version specifier. Tools parsing the format should accept optional " "parentheses around this, but tools generating it should not use parentheses." @@ -19756,7 +19857,7 @@ msgstr "" "バージョン指定子。この部分をパースするツールはバージョンを囲む括弧を許容しな" "ければならないが、生成する際には括弧を使ってはなりません。" -#: ../source/specifications/core-metadata.rst:558 +#: ../source/specifications/core-metadata.rst:574 msgid "" "An environment marker after a semicolon. This means that the requirement is " "only needed in the specified conditions." @@ -19764,11 +19865,11 @@ msgstr "" "セミコロンの後ろに環境マーカ。要求事項が必要となるのが指定された条件の時のみ" "であることを示します。" -#: ../source/specifications/core-metadata.rst:561 +#: ../source/specifications/core-metadata.rst:577 msgid "See :pep:`508` for full details of the allowed format." msgstr "許容されるフォーマットの詳細については :pep:`508` を見てください。" -#: ../source/specifications/core-metadata.rst:563 +#: ../source/specifications/core-metadata.rst:579 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." @@ -19776,7 +19877,7 @@ msgstr "" "プロジェクト名は、 `Python パッケージインデックス `_ に" "出現する名前に対応していなければなりません。" -#: ../source/specifications/core-metadata.rst:566 +#: ../source/specifications/core-metadata.rst:582 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." @@ -19784,11 +19885,11 @@ msgstr "" "バージョン指定子は :doc:`version-specifiers` に記述された規則に従っていなけれ" "ばなりません。" -#: ../source/specifications/core-metadata.rst:580 +#: ../source/specifications/core-metadata.rst:596 msgid "Requires-Python" msgstr "" -#: ../source/specifications/core-metadata.rst:584 +#: ../source/specifications/core-metadata.rst:600 msgid "" "This field specifies the Python version(s) that the distribution is " "compatible with. Installation tools may look at this when picking which " @@ -19798,13 +19899,13 @@ msgstr "" "ます。インストールツールは、プロジェクトのインストールするべきバージョンを選" "択する時にこのフィールドを参照しても構いません。" -#: ../source/specifications/core-metadata.rst:588 +#: ../source/specifications/core-metadata.rst:604 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" "値は、 :doc:`version-specifiers` で指定されたフォーマットでなければなりませ" "ん。" -#: ../source/specifications/core-metadata.rst:590 +#: ../source/specifications/core-metadata.rst:606 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" @@ -19813,15 +19914,15 @@ msgstr "" "次のように指定することで Python < 3.6 上にインストールするのを抑止してもかま" "いません::" -#: ../source/specifications/core-metadata.rst:595 +#: ../source/specifications/core-metadata.rst:611 msgid "This field cannot be followed by an environment marker." msgstr "このフィールドでは、環境マーカを後ろに付けることはできません。" -#: ../source/specifications/core-metadata.rst:600 +#: ../source/specifications/core-metadata.rst:616 msgid "Requires-External (multiple use)" msgstr "Requires-External (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:607 +#: ../source/specifications/core-metadata.rst:623 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 " @@ -19833,7 +19934,7 @@ msgstr "" "担当者向けにヒントを提供することを意図しており、 ``distutils`` 配布物にとって" "は何ら意味を持ちません。" -#: ../source/specifications/core-metadata.rst:612 +#: ../source/specifications/core-metadata.rst:628 msgid "" "The format of a requirement string is a name of an external dependency, " "optionally followed by a version declaration within parentheses." @@ -19841,7 +19942,7 @@ msgstr "" "要求事項の文字列のフォーマットは外部の依存先の名前で、必須ではありませんが括" "弧に入れたバージョンの宣言を後ろにつけても構いません。" -#: ../source/specifications/core-metadata.rst:618 +#: ../source/specifications/core-metadata.rst:634 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:" @@ -19853,38 +19954,43 @@ msgstr "" "定されたフォーマットに適合することを **要求されていません** : それらは、外部" "依存関係によって使われるバージョンスキームに対応するべきです。" -#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:639 msgid "Notice that there is no particular rule on the strings to be used." msgstr "使用される文字列に対して特に規則がないという点に注意してください。" -#: ../source/specifications/core-metadata.rst:635 +#: ../source/specifications/core-metadata.rst:651 msgid "Project-URL (multiple-use)" msgstr "Project-URL (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:639 +#: ../source/specifications/core-metadata.rst:655 msgid "" "A string containing a browsable URL for the project and a label for it, " "separated by a comma." msgstr "" "そのプロジェクトの閲覧可能な URL とラベルを含む文字列をコンマで区切ったもの。" -#: ../source/specifications/core-metadata.rst:646 +#: ../source/specifications/core-metadata.rst:662 msgid "The label is free text limited to 32 characters." msgstr "このラベルは32 文字以内のフリーテキストです。" -#: ../source/specifications/core-metadata.rst:648 +#: ../source/specifications/core-metadata.rst:664 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` に始まって、プロジェクトメタデータの消費者 (the Python Package " +"Index など) は、 \"well-known\" なラベル、それは人間による消費のために展開さ" +"れる時には特定の特別な表現方法を与えることができますが、それを探索するために" +"標準標準化プロセスを使うことができます。 :ref:`well-known-project-urls` を見" +"てください。" -#: ../source/specifications/core-metadata.rst:658 +#: ../source/specifications/core-metadata.rst:674 msgid "Provides-Extra (multiple use)" msgstr "Provides-Extra (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:661 +#: ../source/specifications/core-metadata.rst:677 msgid "" ":pep:`685` restricted valid values to be unambiguous (i.e. no normalization " "required). For older metadata versions, value restrictions were brought into " @@ -19894,7 +20000,7 @@ msgstr "" "れた正当な値を。古めのメタデータのバージョンでは、 ``Name:`` を伴う行で値に制" "限が導入され、正規化規則も導入されました。" -#: ../source/specifications/core-metadata.rst:666 +#: ../source/specifications/core-metadata.rst:682 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 " @@ -19907,7 +20013,7 @@ msgstr "" "フンは連続してはいけません。名前は次の正規表現にマッチしなければなりません " "(そうすることで曖昧さを排除します)::" -#: ../source/specifications/core-metadata.rst:674 +#: ../source/specifications/core-metadata.rst:690 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." @@ -19915,7 +20021,7 @@ msgstr "" "指定された名前は、追加的な機能が要求されたか否かに応じて依存関係を構築するた" "めに使われます。" -#: ../source/specifications/core-metadata.rst:682 +#: ../source/specifications/core-metadata.rst:698 msgid "" "A second distribution requires an optional dependency by placing it inside " "square brackets, and can request multiple features by separating them with a " @@ -19926,7 +20032,7 @@ msgstr "" "切ることで複数の機能を要求することができます。要求事項は、要求されたそれぞれ" "の機能について評価され、配布物の要求する依存関係の組に追加されます。" -#: ../source/specifications/core-metadata.rst:692 +#: ../source/specifications/core-metadata.rst:708 msgid "" "Two feature names ``test`` and ``doc`` are reserved to mark dependencies " "that are needed for running automated tests and generating documentation, " @@ -19935,7 +20041,7 @@ msgstr "" "``test`` と ``doc`` という二つの名前は、順に自動化されたテストと説明文書の生" "成のために必要な依存先として予約されています。" -#: ../source/specifications/core-metadata.rst:696 +#: ../source/specifications/core-metadata.rst:712 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." @@ -19943,7 +20049,7 @@ msgstr "" "``Requires-Diet:`` のどこからも参照されていなくても、 ``Provides-Extra:`` を" "指定しても構いません。" -#: ../source/specifications/core-metadata.rst:699 +#: ../source/specifications/core-metadata.rst:715 msgid "" "When writing data for older metadata versions, names MUST be normalized " "following the same rules used for the ``Name:`` field when performing " @@ -19955,7 +20061,7 @@ msgstr "" "の ``Provides-Extra:`` エントリが正規化後に衝突する場合には、メタデータを書き" "込むツールはエラーを発生させなければなりません。" -#: ../source/specifications/core-metadata.rst:704 +#: ../source/specifications/core-metadata.rst:720 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 " @@ -19971,11 +20077,158 @@ msgstr "" "古めのメタデータバージョンとして不当な名前を読み取った場合には、ツールはエ" "ラーを発出することを選択しても構いません。" -#: ../source/specifications/core-metadata.rst:712 +#: ../source/specifications/core-metadata.rst:730 +msgid "Import-Name (multiple use)" +msgstr "Import-Name (複数回の使用可)" + +#: ../source/specifications/core-metadata.rst:734 +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 "" +"インストール時にプロジェクトが排他的に提供するインポートネームを含む文字列。" +"指定されたインポートネームは、正当な Python 識別子でなければなりませんが、空" +"でも構いません。このフィールドに列挙されたインポートネームは、プロジェクトが" +"プロジェクトの同じバージョン用の *幾つかの* プラットフォームにインストールさ" +"れる時にインポート可能でなければなりません。これは、プロジェクトのあるリリー" +"スのすべての sdist と wheel を通じて、メタデータが守備一貫していなければなら" +"ないと言うことを意味します。" + +#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:796 +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 "" +"インポートネームは、セミコロンの前後には空白文字がいくつあっても構わない形" +"で、 (例えば ``; private`` のように) セミコロンと \"private\" と言う用語を" +"伴っても構いません。これによって、ツール類に対して、インポートネームがプロ" +"ジェクトの公開の API の一部では無いことを伝えます。" + +#: ../source/specifications/core-metadata.rst:746 +#: ../source/specifications/core-metadata.rst:801 +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 "" +"プロジェクトは、そのプロジェクトによって独占的に提供される、最短インポートネ" +"ームをすべて列挙するべきです。最短ネームがドットで区切られたネームであるなら" +"、そのネームからトップレベルのネームに至る中間のネームもまた、 ``Import-" +"Name`` および/または ``Import-Namespace`` に適切に列挙されるべきです。" + +#: ../source/specifications/core-metadata.rst:751 +#: ../source/specifications/core-metadata.rst:811 +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:754 +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`` エントリと重複する時には、エラーを発生させるべきです。これは、プ" +"ロジェクトが意図せずもう一つのプロジェクトのソースコードを覆い隠してしまうこ" +"とを避けるためです。ツール類は、\n" +"既にインストールされているプロジェクトとの間でインポートネームの重複が起きる" +"ような既存環境にプロジェクトをインストールする時には、警告するかエラーを発生" +"させて構いません。" + +#: ../source/specifications/core-metadata.rst:762 +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 "" +"プロジェクトは、プロジェクトがインポートネームを持っていないこと (すなわち、" +"配布物のファイルの中にはどんな種類の Python モジュールも存在しないこと) を表" +"現するために、そのメタデータ内に空の ``Import-Name`` フィールドを持っても構い" +"ません。" + +#: ../source/specifications/core-metadata.rst:766 +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 "" +"(プロジェクトが古いメタデータバージョンを使っているために、もしくは、一つも指" +"定していないために) プロジェクトが ``Import-Name`` メタデータを持たなくても構" +"わないので、ツール類は、そのプロジェクトがどんなネームを提供するのかについて" +"何も情報を持ちません。しかしながら、実際には、プロジェクトの大多数は、それら" +"のインポートネームであろうものと一致するようなプロジェクト名を持っています。" +"そういうことですので、何らかの答えが必要とされるなら、何らかの形で (例えば " +"``packaging.utils.canonicalize_name(name, validate=True).replace(\"-\", " +"\"_\")`` のように) インポート名を標準化したプロジェクト名を使うことが可能で" +"す。" + +#: ../source/specifications/core-metadata.rst:786 +msgid "Import-Namespace (multiple use)" +msgstr "Import-Namespace (複数回の使用可)" + +#: ../source/specifications/core-metadata.rst:790 +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 の正当" +"な識別子でなければなりません。このフィールドは、複数のプロジェクトが同じイン" +"ポート名前空間に貢献することができるように、名前空間パッケージ用に用いられま" +"す。同じインポートネームを ``Import-Namespace`` に列挙するプロジェクト群は、" +"互いに隠蔽してしまうことなく一緒にインストールすることができます。" + +#: ../source/specifications/core-metadata.rst:806 +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 "" +"このフィールドに列挙されたインポートネームは、同じバージョンのプロジェクト用" +"の *いくつかの* プラットフォームにプロジェクトがインストールされる時に、イン" +"ポート可能でなければなりません。これは、プロジェクトのリリースのすべての " +"sdist や wheel でメタデータが整合していなければならないということを意味してい" +"ます。" + +#: ../source/specifications/core-metadata.rst:814 +msgid "Note that ``Import-Namespace`` CANNOT be empty like ``Import-Name``." +msgstr "" +"``Import-Name`` では空値が許されますが、 ``Import-Namespace`` は空値であるこ" +"とはできないことに留意してください。" + +#: ../source/specifications/core-metadata.rst:823 msgid "Rarely Used Fields" msgstr "稀に使われるフィールド" -#: ../source/specifications/core-metadata.rst:714 +#: ../source/specifications/core-metadata.rst:825 msgid "" "The fields in this section are currently rarely used, as their design was " "inspired by comparable mechanisms in Linux package management systems, and " @@ -19987,7 +20240,7 @@ msgstr "" "クスサーバの文脈でツールがどのように翻案するべきかが全く明らかではないので、" "現在ではほとんど使われません。" -#: ../source/specifications/core-metadata.rst:719 +#: ../source/specifications/core-metadata.rst:830 msgid "" "As a result, popular installation tools ignore them completely, which in " "turn means there is little incentive for package publishers to set them " @@ -20003,11 +20256,11 @@ msgstr "" "トリと組み合わせれば本来意図された目的に用いることができることから、メタデー" "タの仕様には残されています。" -#: ../source/specifications/core-metadata.rst:729 +#: ../source/specifications/core-metadata.rst:840 msgid "Provides-Dist (multiple use)" msgstr "Provides-Dist (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:736 +#: ../source/specifications/core-metadata.rst:847 msgid "" "Each entry contains a string naming a Distutils project which is contained " "within this distribution. This field *must* include the project identified " @@ -20017,7 +20270,7 @@ msgstr "" "文字列で含みます。このフィールドは、プロジェクトを特定する ``Name`` フィール" "ドと後続するバージョンを *含んでいなければなりません*: Name (Version) 。" -#: ../source/specifications/core-metadata.rst:741 +#: ../source/specifications/core-metadata.rst:852 msgid "" "A distribution may provide additional names, e.g. to indicate that multiple " "projects have been bundled together. For instance, source distributions of " @@ -20031,7 +20284,7 @@ msgstr "" "の配布物として利用可能です。そのようなソースコード配布物をインストールする" "と、 ``ZODB`` と ``transaction`` の両方の要求事項を満たします。" -#: ../source/specifications/core-metadata.rst:748 +#: ../source/specifications/core-metadata.rst:859 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 " @@ -20049,7 +20302,7 @@ msgstr "" "にはそのうちの高々1個だけがインストールされていれば十分な ``ORM-bindings`` " "を提供すると宣言していても構わないのです。" -#: ../source/specifications/core-metadata.rst:756 +#: ../source/specifications/core-metadata.rst:867 msgid "" "A version declaration may be supplied and must follow the rules described " "in :doc:`version-specifiers`. The distribution's version number will be " @@ -20059,11 +20312,11 @@ msgstr "" "specifiers>` に記述された規則に従ったものでなければなりません。もし指定されて" "いなければ、配布物のバージョン番号が暗黙理に使われます。" -#: ../source/specifications/core-metadata.rst:771 +#: ../source/specifications/core-metadata.rst:882 msgid "Obsoletes-Dist (multiple use)" msgstr "Obsoletes-Dist (複数回の使用可)" -#: ../source/specifications/core-metadata.rst:778 +#: ../source/specifications/core-metadata.rst:889 msgid "" "Each entry contains a string describing a distutils project's distribution " "which this distribution renders obsolete, meaning that the two projects " @@ -20073,7 +20326,7 @@ msgstr "" "プロジェクトが同時にインストールされるべきではない distutils プロジェクトの配" "布物を記述する文字列を含みます。" -#: ../source/specifications/core-metadata.rst:782 +#: ../source/specifications/core-metadata.rst:893 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." @@ -20081,7 +20334,7 @@ msgstr "" "バージョンの宣言があっても構いません。バージョン番号は :doc:`バージョン指定" "子 ` で指定されたフォーマットでなければなりません。" -#: ../source/specifications/core-metadata.rst:787 +#: ../source/specifications/core-metadata.rst:898 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 " @@ -20092,11 +20345,11 @@ msgstr "" "しょう。 Torqued Python をインストールするなら、 Gorgon 配布物は削除されるべ" "きです。" -#: ../source/specifications/core-metadata.rst:800 +#: ../source/specifications/core-metadata.rst:911 msgid "Deprecated Fields" msgstr "非推奨となったフィールド" -#: ../source/specifications/core-metadata.rst:802 +#: ../source/specifications/core-metadata.rst:913 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 " @@ -20104,31 +20357,33 @@ msgid "" "prior to the removal). Tools SHOULD warn users when deprecated fields are " "used." msgstr "" +"非推奨となったフィールドは避けられるべきですが、しかし、まだ正当なメタデータ" +"フィールドです。それらは、将来のコアとなるメタデータ標準 (その時点では、取り" +"除くのに先立って、メタデータのバージョン番号を指定したファイル内でのみ正当で" +"あるという状態になることでしょう) のバージョンで取り除かれるかもしれません。" +"ツールの側では、ユーザに対して非推奨のフィールドが使われていることを警告する" +"べきです。" -#: ../source/specifications/core-metadata.rst:811 +#: ../source/specifications/core-metadata.rst:922 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:817 -#: ../source/specifications/core-metadata.rst:834 +#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:945 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" +":pep:`753` に従って、代わりに :ref:`core-metadata-project-url` を使ってくださ" +"い。" -#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:930 msgid "A string containing the URL for the distribution's home page." msgstr "配布物のホームページを示す URL を含んだ文字列。" -#: ../source/specifications/core-metadata.rst:828 +#: ../source/specifications/core-metadata.rst:939 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:836 -#, fuzzy -#| 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\".)" +#: ../source/specifications/core-metadata.rst:947 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 \"``.../" @@ -20136,19 +20391,19 @@ msgid "" "tgz``\".)" msgstr "" "そこからこのバージョンの配布物をダウンロードすることができる URL を含んだ文字" -"列。 (これが意味するところは、 URL は何か \".../BeagleVote-latest.tgz\" のよ" -"うなものでは駄目で、 \".../BeagleVote-0.45.tgz\" のようにバージョンを含むもの" -"でなければならないということです。)" +"列。 (これが意味するところは、 URL は何か \"``.../BeagleVote-latest.tgz``\" " +"のようなものでは駄目で、 \"``.../BeagleVote-0.45.tgz``\" のようにバージョンを" +"含むものでなければならないということです。)" -#: ../source/specifications/core-metadata.rst:842 +#: ../source/specifications/core-metadata.rst:953 msgid "Requires" msgstr "要求事項" -#: ../source/specifications/core-metadata.rst:845 +#: ../source/specifications/core-metadata.rst:956 msgid "in favour of ``Requires-Dist``" msgstr "``Requires-Dist`` に従って" -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:959 msgid "" "Each entry contains a string describing some other module or package " "required by this package." @@ -20156,7 +20411,7 @@ msgstr "" "それぞれのエントリは、このパッケージが必要とする他のモジュールやパッケージを" "記述した文字列を含みます。" -#: ../source/specifications/core-metadata.rst:851 +#: ../source/specifications/core-metadata.rst:962 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 " @@ -20166,7 +20421,7 @@ msgstr "" "るモジュールやパッケージの名前のフォーマットと同一のもので、オプションとして" "カッコ内に入れたバージョン宣言を伴うことがあります。" -#: ../source/specifications/core-metadata.rst:855 +#: ../source/specifications/core-metadata.rst:966 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -20183,7 +20438,7 @@ msgstr "" "ドットで区切ったものです。バージョン番号の例としては、 \"1.0\" や \"2.3a2\" " "や \"1.3.99\" 、" -#: ../source/specifications/core-metadata.rst:863 +#: ../source/specifications/core-metadata.rst:974 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." @@ -20191,7 +20446,7 @@ msgstr "" "例えば \">1.0, !=1.3.4, <2.0\" という文字列が正当なバージョン宣言であるよう" "に、比較演算子はいくつでも指定することができます。" -#: ../source/specifications/core-metadata.rst:866 +#: ../source/specifications/core-metadata.rst:977 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." @@ -20199,7 +20454,7 @@ msgstr "" "次に示すすべての要求仕様文字列 は実際に可能なものです: " "\"rfc822\", \"zlib (>=1.1.4)\", \"zope\"。" -#: ../source/specifications/core-metadata.rst:869 +#: ../source/specifications/core-metadata.rst:980 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." @@ -20208,15 +20463,15 @@ msgstr "" "ありません; 独自の標準を選択することが Python コミュニティに委ねられていま" "す。" -#: ../source/specifications/core-metadata.rst:882 +#: ../source/specifications/core-metadata.rst:993 msgid "Provides" msgstr "提供する" -#: ../source/specifications/core-metadata.rst:885 +#: ../source/specifications/core-metadata.rst:996 msgid "in favour of ``Provides-Dist``" msgstr "``Provides-Dist`` を支持して " -#: ../source/specifications/core-metadata.rst:888 +#: ../source/specifications/core-metadata.rst:999 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 " @@ -20230,15 +20485,15 @@ msgstr "" "子なしなら) バージョン宣言もあっても構いません; もしバージョン宣言がなけれ" "ば、そのパッケージのバージョン番号を援用します。" -#: ../source/specifications/core-metadata.rst:904 +#: ../source/specifications/core-metadata.rst:1015 msgid "Obsoletes" msgstr "古くなった " -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:1018 msgid "in favour of ``Obsoletes-Dist``" msgstr "``Obsoletes-Dist`` に従って" -#: ../source/specifications/core-metadata.rst:910 +#: ../source/specifications/core-metadata.rst:1021 msgid "" "Each entry contains a string describing a package or module that this " "package renders obsolete, meaning that the two packages should not be " @@ -20249,7 +20504,7 @@ msgstr "" "これら二つのパッケージは同時にはインストールされるべきではないことを示す、そ" "のような文字列が含まれます。バージョン宣言を書いておくことができます。" -#: ../source/specifications/core-metadata.rst:914 +#: ../source/specifications/core-metadata.rst:1025 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 " @@ -20260,131 +20515,167 @@ msgstr "" "しょう。 Torqued Python をインストールするなら、 Gorgon パッケージは削除され" "るべきです。" -#: ../source/specifications/core-metadata.rst:926 -#, fuzzy -#| msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." -msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +#: ../source/specifications/core-metadata.rst:1037 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -"2020年10月: :pep:`643` を通じてコアとなるメタデータ 2.2 が承認されました。" - -#: ../source/specifications/core-metadata.rst:928 -#, fuzzy -#| msgid "Added the ``Dynamic`` field." -msgid "Added the ``License-Expression`` field." -msgstr "``Dynamic`` フィールドを追加しました。" - -#: ../source/specifications/core-metadata.rst:929 -#, fuzzy -#| msgid "Added the ``Dynamic`` field." -msgid "Added the ``License-File`` field." -msgstr "``Dynamic`` フィールドを追加しました。" +"2001年3月: :pep:`241` を通じてコアとなるメタデータ 1.0 が承認されました。" -#: ../source/specifications/core-metadata.rst:931 -msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +#: ../source/specifications/core-metadata.rst:1039 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`." msgstr "" -"2022年3月: :pep:`685` を通じてコアとなるメタデータ 2.3 が承認されました。" - -#: ../source/specifications/core-metadata.rst:933 -msgid "Restricted extra names to be normalized." -msgstr "その他の名称 の標準化に制限を加えました。" +"2003年4月: :pep:`314` を通じてコアとなるメタデータ 1.1 が承認されました。" -#: ../source/specifications/core-metadata.rst:935 -msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." +#: ../source/specifications/core-metadata.rst:1041 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -"2020年10月: :pep:`643` を通じてコアとなるメタデータ 2.2 が承認されました。" - -#: ../source/specifications/core-metadata.rst:937 -msgid "Added the ``Dynamic`` field." -msgstr "``Dynamic`` フィールドを追加しました。" +"2010年2月: :pep:`345` を通じてコアとなるメタデータ 1.2 が承認されました。" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:1043 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" "2018年2月: :pep:`566` を通じてコアとなるメタデータ 2.1 が承認されました。" -#: ../source/specifications/core-metadata.rst:941 +#: ../source/specifications/core-metadata.rst:1045 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "``Description-Content-Type`` と ``Provides-Extra`` を追加しました。" -#: ../source/specifications/core-metadata.rst:942 +#: ../source/specifications/core-metadata.rst:1046 msgid "Added canonical method for transforming metadata to JSON." msgstr "メタデータを JSON に変換する正規化された方法を追加しました。" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:1047 msgid "Restricted the grammar of the ``Name`` field." msgstr "``Name`` フィールドの文法に制限を加えました。" -#: ../source/specifications/core-metadata.rst:945 -msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +#: ../source/specifications/core-metadata.rst:1049 +msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -"2010年2月: :pep:`345` を通じてコアとなるメタデータ 1.2 が承認されました。" +"2020年10月: :pep:`643` を通じてコアとなるメタデータ 2.2 が承認されました。" -#: ../source/specifications/core-metadata.rst:947 -msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +#: ../source/specifications/core-metadata.rst:1051 +msgid "Added the ``Dynamic`` field." +msgstr "``Dynamic`` フィールドを追加しました。" + +#: ../source/specifications/core-metadata.rst:1053 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -"2003年4月: :pep:`314` を通じてコアとなるメタデータ 1.1 が承認されました:" +"2022年3月: :pep:`685` を通じてコアとなるメタデータ 2.3 が承認されました。" -#: ../source/specifications/core-metadata.rst:949 -msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +#: ../source/specifications/core-metadata.rst:1055 +msgid "Restricted extra names to be normalized." +msgstr "その他の名称 の標準化に制限を加えました。" + +#: ../source/specifications/core-metadata.rst:1057 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -"2001年3月: :pep:`241` を通じてコアとなるメタデータ 1.0 が承認されました。" +"2024年8月: :pep:`639` を通じて、コアとなるメタデータ 2.4 が承認されました。" -#: ../source/specifications/core-metadata.rst:953 +#: ../source/specifications/core-metadata.rst:1059 +msgid "Added the ``License-Expression`` field." +msgstr "``License-Expression`` フィールドを追加しました。" + +#: ../source/specifications/core-metadata.rst:1060 +msgid "Added the ``License-File`` field." +msgstr "``License-File`` フィールドを追加しました。" + +#: ../source/specifications/core-metadata.rst:1062 +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月: ``動的 `` 指定がそのフィールドの取り扱いに影響を与えるの" +"は、 sdist から wheel をビルドする時だけであって、 wheel を変換するするときに" +"は影響を与えないのだということが明確化された。" + +#: ../source/specifications/core-metadata.rst:1066 +msgid "September 2025: Core metadata 2.5 was approved through :pep:`794`." +msgstr "" +"2025年9月: :pep:`794` を通じてコアとなるメタデータ 2.5 が承認されました。" + +#: ../source/specifications/core-metadata.rst:1068 +msgid "Added the ``Import-Name`` field." +msgstr "``Import-Name`` フィールドを追加しました。" + +#: ../source/specifications/core-metadata.rst:1069 +msgid "Added the ``Import-Namespace`` field." +msgstr "``Import-Namespace`` フィールドを追加しました。" + +#: ../source/specifications/core-metadata.rst:1071 +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:1076 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "reStructuredText マークアップ言語: https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:958 +#: ../source/specifications/core-metadata.rst:1081 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "RFC 822 長形式ヘッダフィールド: :rfc:`822#section-3.1.1`" #: ../source/specifications/dependency-groups.rst:5 -#, fuzzy -#| msgid "Dependency Overrides" msgid "Dependency Groups" -msgstr "依存関係を上書きする" +msgstr "依存関係グループ" #: ../source/specifications/dependency-groups.rst:7 msgid "" -"This specification defines Dependency Groups, a mechanism for storing " +"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 "" +"この仕様では、ビルド時にプロジェクトメタデータに含まれなかったパッケージ要求" +"事項を ``pyproject.toml`` 内に保存するための機構であるところの、依存関係グ" +"ループ を定義しています。" #: ../source/specifications/dependency-groups.rst:11 msgid "" -"Dependency Groups are suitable for internal development use-cases like " +"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 "" +"依存関係グループは、関連するスクリプトの集合のような配布物作成のためにビルド" +"されたのではないプロジェクト向けと同様に、静的解析ツール (lint) や試験用ツー" +"ルのような内部開発でのユースケース向けに適切です。" #: ../source/specifications/dependency-groups.rst:15 msgid "" -"Fundamentally, Dependency Groups should be thought of as being a " +"Fundamentally, dependency groups should be thought of as being a " "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" +"基本的に、依存関係グループは、(``pip`` に特有の) ``requirements.txt`` ファイ" +"ルできることを標準化したサブセットであるものと考えるべきです。" #: ../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 "" +msgstr "``[dependency-groups]`` テーブル" #: ../source/specifications/dependency-groups.rst:41 msgid "" -"Dependency Groups are defined as a table in ``pyproject.toml`` named " +"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`` という名" +"前のテーブルとして定義されています。 ``dependency-groups`` テーブルには、任意" +"の数のユーザが定義したキーを含み、そのそれぞれが要求事項をその値に取ります。" #: ../source/specifications/dependency-groups.rst:46 msgid "" @@ -20393,6 +20684,10 @@ msgid "" "Dependency Groups MUST :ref:`normalize ` these names " "before comparisons." msgstr "" +"``[dependency-groups]`` キーは、ある時には \"group names\" とも呼ばれます" +"が、 :ref:`正当な非標準化名称 ` でなければなりません。依存関係グ" +"ループ を取り扱うツール類は、比較の前にこのような名称を :" +"ref:`標準化 ` しなければなりません。" #: ../source/specifications/dependency-groups.rst:51 msgid "" @@ -20400,6 +20695,8 @@ msgid "" "and if duplicate names are detected after normalization, tools SHOULD emit " "an error." msgstr "" +"ツール類は、オリジナルの非標準化名称をユーザに表示することを選好するべきで、" +"標準化後に名称の重複が検出された場合にはツール類はエラーを発するべきです。" #: ../source/specifications/dependency-groups.rst:55 msgid "" @@ -20408,24 +20705,30 @@ msgid "" "Strings must be valid :ref:`dependency specifiers `, " "and tables must be valid Dependency Group Includes." msgstr "" +"要求事項リスト、つまり ``[dependency-groups]`` 内の値は、文字列やテーブル " +"(Python の ``dict``) やその混合物を含んでいても構いません。文字列は正当な :" +"ref:`依存関係指定子 ` でなければならず、テーブルは正当" +"な Dependency Group Includes でなければなりません。" #: ../source/specifications/dependency-groups.rst:61 -#, fuzzy -#| msgid "Dependency Overrides" msgid "Dependency Group Include" -msgstr "依存関係を上書きする" +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 "" @@ -20436,6 +20739,12 @@ msgid "" "evaluate to ``[\"c\", \"a\", \"b\", \"d\"]`` when Dependency Group Includes " "are expanded." msgstr "" +"Include は指定された依存関係グループの内容と厳密に同等になるように定義されて" +"いて、それが現在のグループの include の位置に挿入されます。例えば、 ``foo = " +"[\"a\", \"b\"]`` がひとつのグループで ``bar = [\"c\", {include-group = " +"\"foo\"}, \"d\"]`` がもうひとつのグループであるなら、依存関係グループが転換さ" +"れた時には、 ``bar`` は ``[\"c\", \"a\", \"b\", \"d\"]`` と評価されるべきで" +"す。" #: ../source/specifications/dependency-groups.rst:75 msgid "" @@ -20443,6 +20752,10 @@ 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 "" @@ -20451,6 +20764,10 @@ 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 "" @@ -20459,77 +20776,101 @@ 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 -#, fuzzy -#| msgid "Package upload" msgid "Package Building" -msgstr "パッケージアップロード" +msgstr "パッケージビルディング" #: ../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." +"dependency groups." msgstr "" +"ビルドバックエンドは、ビルドした配布物の中の依存関係グループのデータを、パッ" +"ケージのメタデータとして含めてはなりません。これが意味するところは、 sdist " +"の ``PKG-INFO`` や wheel の ``METADATA`` ファイルが依存関係グループを含む参照" +"可能なフィールドを含んでいてはならないということです。" #: ../source/specifications/dependency-groups.rst:108 msgid "" -"It is, however, valid to use Dependency Groups in the evaluation of dynamic " +"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 "" +"しかしながら、動的なメタデータの評価で依存関係グループを使うことは正当なこと" +"であり、 sdist に含まれる ``pyproject.toml`` ファイルは依然として ``[dynamic-" +"groups]`` を含んでいることでしょう。しかしながら、このテーブルの内容は、ビル" +"ドされたパッケージのインタフェースの一部分ではありません。" #: ../source/specifications/dependency-groups.rst:114 -#, fuzzy -#| msgid "Installing Setuptools \"Extras\"" msgid "Installing Dependency Groups & Extras" -msgstr "Setuptools の \"Extras\" をインストールする" +msgstr "" +"依存関係グループ と追加物 をインストールする" #: ../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 " +"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 " +"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 " +"dependency groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" +"ツール類は、依存関係グループとの相互作用を行うためのインタフェースとして、追" +"加物 を管理する時と同一またはよく似たものを提供することを選択しても" +"構いません。ツール類の作者には、依存関係グループと名前が一致する追加物を持つ" +"ことを仕様は禁じていない、と助言しておきます。これとは別に、ユーザには、追加" +"物の名前と一致する依存関係グループを作成しないように、そのような一致があると" +"ツール類がエラーとして取り扱うかもしれませんよ、と助言しておきます。" #: ../source/specifications/dependency-groups.rst:128 -#, fuzzy -#| msgid "Backwards Compatibility" msgid "Validation and Compatibility" -msgstr "後方互換性" +msgstr "正当性検証と互換性" #: ../source/specifications/dependency-groups.rst:130 msgid "" -"Tools supporting Dependency Groups may want to validate data before using " +"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." +"dependency groups." msgstr "" +"ツール類は、依存関係グループ内で認識できないデータを評価または処理しようとし" +"た時にはエラーを発するべきです。" #: ../source/specifications/dependency-groups.rst:138 msgid "" -"Tools SHOULD NOT eagerly validate the contents of *all* Dependency Groups " +"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 "" @@ -20537,13 +20878,19 @@ 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 "" "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." +"contents of all dependency groups." msgstr "" +"ツールがより厳密に取り扱う良い理由のあるケースがいくつか知られています。静的" +"解析ツール や正当性確認ツール はひとつの例で、その目的" +"がすべての依存関係グループの内容の正当性を検証することだからです。" #: ../source/specifications/dependency-groups.rst:157 #: ../source/specifications/inline-script-metadata.rst:123 @@ -20556,12 +20903,12 @@ msgid "" "Group to stdout, newline delimited. The output is therefore valid " "``requirements.txt`` data." msgstr "" +"次に示す参照実装は依存関係グループの内容を改行で区切って標準出力に書き出しま" +"す。その出力は、従って、正当な ``requiurements.txt`` データです。" #: ../source/specifications/dependency-groups.rst:252 -#, fuzzy -#| msgid "November 2015: This specification was approved through :pep:`508`." msgid "October 2024: This specification was approved through :pep:`735`." -msgstr "2015年11月: :pep:`508` を通じてこの仕様が承認されました。" +msgstr "2024年10月: :pep:`735` を通じてこの仕様が承認されました。" #: ../source/specifications/dependency-specifiers.rst:7 msgid "Dependency specifiers" @@ -20843,17 +21190,6 @@ msgstr "" "`426` に記述されたデザインに見られるいくつかの問題点を修正しています。" #: ../source/specifications/dependency-specifiers.rst:199 -#, fuzzy -#| msgid "" -#| "Comparisons in marker expressions are typed by the comparison operator. " -#| "The operators that are not in perform the same " -#| "as they do for strings in Python. The operators use the " -#| "version comparison rules of the :ref:`Version specifier specification " -#| "` when those are defined (that is when both sides " -#| "have a valid version specifier). If there is no defined behaviour of this " -#| "specification and the operator exists in Python, then the operator falls " -#| "back to the Python behaviour. Otherwise an error should be raised. e.g. " -#| "the following will result in errors::" msgid "" "Comparisons in marker expressions are typed by the comparison operator and " "the type of the marker value. The operators that are not in " @@ -20867,14 +21203,16 @@ msgid "" "involved. Otherwise an error should be raised. e.g. the following will " "result in errors::" msgstr "" -"マーカ表現の比較は比較演算子によって分類されます。 の中に入って" -"いない 演算子は、 Python における文字列でのそれと同様に動作しま" -"す。 演算子は、定義されている場合 (つまり両側に正当はバージョン" -"指定子を伴う場合) には、 :ref:`バージョン指定子仕様 ` の" -"バージョン比較規則を採用しています。演算子の動作がこの仕様で定義されておら" -"ず、かつ、その演算子が Python に存在する場合には、当該演算子は Python での動" -"作にフォールバックします。そうでない場合にはエラーを発生させるべきです。例え" -"ば、次の表現はエラーを発生させる結果となるでしょう::" +"マーカ表現の比較は比較演算子とマーカ値の型によって分類されます。 " +" の中に入っていない 演算子は、マーカ値それ自身が文字" +"列であるか集合であるかに基づいて、 Python における文字列または集合 で" +"のそれと同様に動作します。 演算子は、定義されている場合 (つまり" +"両側に正当はバージョン指定子を伴う場合) には、 :ref:`バージョン指定子仕様 " +"` のバージョン比較規則を採用しています。演算子の動作がこ" +"の仕様で定義されておらず、かつ、その演算子が Python に存在する場合には、当該" +"演算子は該当する型の Python での動作にフォールバックします。そうでない場合に" +"はエラーを発生させるべきです。例えば、次の表現はエラーを発生させる結果となる" +"でしょう::" #: ../source/specifications/dependency-specifiers.rst:213 msgid "" @@ -20947,6 +21285,11 @@ msgid "" "installing from a lock file. Outside of the context of lock files, these two " "variables should result in an error like all other unknown variables." msgstr "" +"変数の \"extras\" と \"dependency_groups\" もまた特別なものです。これらは、" +"ロックファイル からインストールする際に、要求される追加物 " +" や依存関係グループ を指定するために使われます。" +"ロックファイルの文脈の範囲の外では、他のすべての未知変数と同様に、これら2個" +"の変数はエラーになるべきです。" #: ../source/specifications/dependency-specifiers.rst:247 msgid "Marker" @@ -20958,7 +21301,7 @@ msgstr "Python 同等物" #: ../source/specifications/dependency-specifiers.rst:249 msgid "Type" -msgstr "" +msgstr "種類" #: ../source/specifications/dependency-specifiers.rst:250 msgid "Sample values" @@ -20982,7 +21325,7 @@ msgstr ":py:data:`os.name`" #: ../source/specifications/dependency-specifiers.rst:292 #: ../source/specifications/dependency-specifiers.rst:301 msgid "String" -msgstr "" +msgstr "文字列" #: ../source/specifications/dependency-specifiers.rst:254 msgid "``posix``, ``java``" @@ -21082,10 +21425,8 @@ msgstr "``'.'.join(platform.python_version_tuple()[:2])``" #: ../source/specifications/dependency-specifiers.rst:284 #: ../source/specifications/dependency-specifiers.rst:288 #: ../source/specifications/dependency-specifiers.rst:296 -#, fuzzy -#| msgid "Version specifiers" msgid ":ref:`Version `" -msgstr "バージョン指定子" +msgstr ":ref:`バージョン `" #: ../source/specifications/dependency-specifiers.rst:285 msgid "``3.4``, ``2.7``" @@ -21136,38 +21477,30 @@ msgid "" msgstr "仕様を通訳する文脈で定義された場合を除くエラー。" #: ../source/specifications/dependency-specifiers.rst:302 -#, fuzzy -#| msgid "pyproject.toml" msgid "``toml``" -msgstr "pyproject.toml" +msgstr "``toml``" #: ../source/specifications/dependency-specifiers.rst:303 #: ../source/specifications/pylock-toml.rst:108 -#, fuzzy -#| msgid "``extra``" msgid "``extras``" -msgstr "``extra``" +msgstr "``extras``" #: ../source/specifications/dependency-specifiers.rst:306 #: ../source/specifications/dependency-specifiers.rst:311 msgid "Set of strings" -msgstr "" +msgstr "文字列の集合" #: ../source/specifications/dependency-specifiers.rst:307 msgid "``{\"toml\"}``" -msgstr "" +msgstr "``{\"toml\"}``" #: ../source/specifications/dependency-specifiers.rst:308 -#, fuzzy -#| msgid "``dependencies``" msgid "``dependency_groups``" -msgstr "``依存関係 を許容していた)" + +#: ../source/specifications/dependency-specifiers.rst:537 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" @@ -21235,11 +21583,11 @@ msgstr "" "Python のパッケージをインストールする際に推奨されるツールである pip (http://" "pip.readthedocs.org/en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:537 +#: ../source/specifications/dependency-specifiers.rst:540 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:540 +#: ../source/specifications/dependency-specifiers.rst:543 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -21448,7 +21796,7 @@ msgstr "" #: ../source/specifications/direct-url-data-structure.rst:35 msgid "Security Considerations" -msgstr "" +msgstr "セキュリティ上の配慮" #: ../source/specifications/direct-url-data-structure.rst:37 msgid "" @@ -21467,11 +21815,6 @@ msgstr "" "で、環境変数から構成しても構いません:" #: ../source/specifications/direct-url-data-structure.rst:48 -#, fuzzy -#| 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 an URL such as ``ssh://git@gitlab.com/user/repo``." 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 " @@ -22616,20 +22959,19 @@ msgstr "" "使うべきです。" #: ../source/specifications/externally-managed-environments.rst:206 -#, fuzzy -#| 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 a ``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" 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 特有のものではないパッケージマネージャを持つソフトウェア配布者" +msgstr "" +"Python 特有のものではないパッケージマネージャで、 Python パッケージの ``sys." +"path`` 内にあるライブラリを管理するものを持っているソフトウェア配布者は、一般" +"的に、標準ライブラリのディレクトリに ``EXTERNALLY-MANAGED`` ファイルを置いた" +"状態で出荷するべきです。例えば、 Debian では、次に示すような何かで構成された " +"``/usr/lib/python3.9/EXTERNALLY-MANAGED`` ファイルを同梱して出荷しても構いま" +"せん。" #: ../source/specifications/externally-managed-environments.rst:230 msgid "" @@ -23104,14 +23446,11 @@ msgstr "2022年6月: :pep:`668` を通じてこの仕様が承認されました #: ../source/specifications/file-yanking.rst:5 msgid "File Yanking" -msgstr "" +msgstr "ファイルのヤンク " #: ../source/specifications/file-yanking.rst:9 -#, fuzzy -#| msgid "" -#| "This specification was originally defined in :pep:`518` and :pep:`621`." msgid "This specification was originally defined in :pep:`592`." -msgstr "この仕様は、元々は :pep:`518` 及び :pep:`621` で定義されました。" +msgstr "この仕様は、元々は :pep:`592` で定義されました。" #: ../source/specifications/file-yanking.rst:14 msgid "" @@ -23120,6 +23459,10 @@ msgid "" "Project Detail ` and :ref:`JSON - " "Project Detail `." msgstr "" +":pep:`592` は、 HTML と JSON のインデックス API への変更を含んでいます。これ" +"らの変更は、 :ref:`HTML - プロジェクトの詳細 ` と :ref:`JSON - プロジェクトの詳細 ` の下で :ref:`simple-repository-api` で文書化されています。" #: ../source/specifications/file-yanking.rst:22 msgid "" @@ -23284,7 +23627,7 @@ msgstr "" #: ../source/specifications/glob-patterns.rst:3 msgid "``glob`` patterns" -msgstr "" +msgstr "``glob`` のパターン" #: ../source/specifications/glob-patterns.rst:5 msgid "" @@ -23294,22 +23637,31 @@ 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, underscores (``_``), hyphens (``-``) and dots (``." "``) MUST be matched verbatim." msgstr "" +"英数字、アンダースコア (``_``) 、ハイフン (``-``) およびドット (``.``) は、文" +"字通りにマッチされなければなりません。" #: ../source/specifications/glob-patterns.rst:21 msgid "" @@ -23319,10 +23671,16 @@ msgid "" "based on Unicode code points). Hyphens at the start or end are matched " "literally." msgstr "" +"glob の特殊文字: ``*`` 、 ``?`` 、 ``**`` 、および、文字範囲: 文字通りにマッ" +"チさせる文字を含む ``[]`` がサポートされていなければなりません。 ``[...]`` の" +"中では、ハイフンは、ロケールに依存しない範囲 (例えば、 Unicode のコードポイン" +"トに基づく順序を備えた ``a-z``) を示します。先頭または末尾のハイフンは文字通" +"りにマッチします。" #: ../source/specifications/glob-patterns.rst:27 msgid "Path delimiters MUST be the forward slash character (``/``)." msgstr "" +"パスの区切り文字は、フォワードスラッシュ文字 (``/``) でなければなりません。" #: ../source/specifications/glob-patterns.rst:29 msgid "" @@ -23330,10 +23688,13 @@ msgid "" "`pyproject.toml`, patterns should always be relative to the 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 "" @@ -23341,42 +23702,49 @@ 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 "" +"リテラルのパス (例えば :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 "" +"それぞれの値を 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 "" +msgstr "正当な glob パターンの例:" #: ../source/specifications/glob-patterns.rst:61 msgid "Examples of invalid glob patterns:" -msgstr "" +msgstr "不当な glob パターンの例:" #: ../source/specifications/glob-patterns.rst:74 -#, fuzzy -#| msgid "Reference Implementation" msgid "Reference implementation in Python" -msgstr "参照実装" +msgstr "Python における参照実装" #: ../source/specifications/glob-patterns.rst:76 msgid "" @@ -23384,10 +23752,13 @@ 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/index.rst:4 msgid "PyPA specifications" @@ -23407,7 +23778,7 @@ msgstr "" #: ../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`." @@ -23419,10 +23790,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-base` の下の :ref:`simple-" +"repository-api` や :ref:`json-serialization` の中で文書化されています。" #: ../source/specifications/index-hosted-attestations.rst:22 msgid "Upload endpoint changes" -msgstr "" +msgstr "エンドポイントの変更をアップロードする" #: ../source/specifications/index-hosted-attestations.rst:26 msgid "" @@ -23430,12 +23804,13 @@ msgid "" "documentation `_ for how attestations are " "uploaded." msgstr "" +"\"レガシー \" なアップロード API は標準化されていません。どのように証" +"明がアップロードされるのかについては、 `PyPI のアップロード API に関するド" +"キュメント `_ を見てください。" #: ../source/specifications/index-hosted-attestations.rst:33 -#, fuzzy -#| msgid "Existing projects" msgid "Attestation objects" -msgstr "既存のプロジェクト" +msgstr "証明オブジェクト" #: ../source/specifications/index-hosted-attestations.rst:35 msgid "" @@ -23444,6 +23819,10 @@ 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 "" @@ -23453,6 +23832,12 @@ msgid "" "sources of signed time (such as an :rfc:`3161` Time Stamping Authority or a " "`Roughtime `__ server)." msgstr "" +"``transparency_entries`` 内の各オブジェクト向けの完全なデータモデルは、 :ref:" +"`付属書 ` で提供されています。証明書 オブジェクトは、" +"一つ以上の透明ログエントリを含む **べき** であり、 (:rfc:`3161` タイムスタン" +"プ局