diff --git a/locales/ar/LC_MESSAGES/messages.po b/locales/ar/LC_MESSAGES/messages.po index 8242217ac..84d021925 100644 --- a/locales/ar/LC_MESSAGES/messages.po +++ b/locales/ar/LC_MESSAGES/messages.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the Python Packaging User Guide package. # Monzer Ghannam , 2022. # Youcef Guenaoua , 2024. +# Mohamed Brahimi , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-01-18 07:31+0000\n" -"Last-Translator: Youcef Guenaoua \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-01-19 01:44+0000\n" +"Last-Translator: Mohamed Brahimi \n" "Language-Team: Arabic \n" "Language: ar\n" @@ -18,7 +19,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 5.4-dev\n" +"X-Generator: Weblate 5.10-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -484,6 +485,7 @@ 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 @@ -501,9 +503,10 @@ msgstr "" #: ../source/guides/installing-using-linux-tools.rst:7 #: ../source/guides/packaging-binary-extensions.rst:7 msgid "Incomplete" -msgstr "" +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 @@ -588,6 +591,7 @@ msgid "" msgstr "" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -763,6 +767,701 @@ msgid "" "library/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 " @@ -1889,7 +2588,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2683,49 +3382,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2734,7 +3475,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2742,7 +3483,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2750,32 +3491,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2785,21 +3526,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2808,31 +3549,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2842,48 +3583,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2891,11 +3632,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2904,11 +3645,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2916,49 +3657,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2967,21 +3728,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2990,11 +3751,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3002,15 +3763,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3018,21 +3779,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3184,7 +3945,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3541,7 +4302,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4229,7 +4990,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5909,6 +6670,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8561,13 +9647,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8575,11 +9662,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8589,29 +9676,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8619,37 +9706,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8658,98 +9745,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8757,93 +9844,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8852,31 +9981,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8885,26 +10075,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8912,28 +10102,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8941,26 +10131,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11876,23 +13066,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11900,7 +13097,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11908,64 +13105,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11973,28 +13170,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12003,22 +13200,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12026,29 +13223,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12058,7 +13268,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12066,7 +13276,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12074,17 +13284,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12092,39 +13302,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12134,11 +13344,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12147,38 +13357,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12186,7 +13396,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12194,18 +13404,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12214,7 +13424,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12225,7 +13435,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12243,7 +13453,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12252,37 +13462,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12290,11 +13500,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12404,8 +13627,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12512,8 +13735,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13133,24 +14356,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13158,28 +14390,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13190,33 +14422,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13225,89 +14457,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13652,11 +14884,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13668,11 +14900,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13680,7 +14912,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13688,17 +14920,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13709,11 +14940,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13722,13 +14953,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13737,7 +14968,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13750,7 +14981,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13760,7 +14991,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13768,20 +14999,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13791,194 +15022,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13986,24 +15218,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14030,7 +15262,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14183,17 +15415,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14202,7 +15434,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14210,7 +15442,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14218,34 +15450,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14254,13 +15486,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14268,7 +15500,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14276,24 +15508,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14301,22 +15533,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14327,65 +15559,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14393,106 +15625,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15714,7 +16946,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15779,7 +17011,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16067,12 +17299,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16126,90 +17358,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16217,7 +17650,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16228,14 +17661,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16244,69 +17677,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16317,11 +17750,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16331,7 +17764,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16339,11 +17772,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16351,13 +17784,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16368,23 +17801,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16392,11 +17825,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16406,33 +17839,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16440,13 +17873,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16455,34 +17888,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16723,7 +18164,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16735,81 +18176,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16823,7 +18265,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16832,7 +18274,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16844,41 +18286,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16886,20 +18432,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16908,92 +18454,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17001,14 +18550,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17016,7 +18565,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17024,24 +18573,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17049,7 +18598,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17060,17 +18609,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17078,19 +18627,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17099,20 +18648,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17120,18 +18669,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17139,7 +18688,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17147,19 +18696,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17257,7 +18812,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17265,7 +18830,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17273,58 +18838,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17332,7 +18897,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17341,13 +18906,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17356,7 +18921,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17365,18 +18930,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17384,7 +18949,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17394,11 +18959,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17406,15 +18971,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17422,11 +18987,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17434,29 +18999,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17465,11 +19044,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17477,14 +19056,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17493,28 +19072,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17542,15 +19121,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17558,23 +19145,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17590,44 +19177,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17635,7 +19222,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17644,7 +19231,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17652,22 +19273,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17676,17 +19297,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17696,11 +19321,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17710,7 +19335,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17718,7 +19343,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17726,11 +19351,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17740,7 +19365,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17750,14 +19375,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17767,7 +19392,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17775,7 +19400,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17784,71 +19409,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17857,7 +19482,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17867,48 +19492,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17917,7 +19565,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17929,7 +19577,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17939,18 +19587,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17958,11 +19606,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17970,7 +19618,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17980,7 +19628,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17990,7 +19638,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17998,28 +19646,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18028,37 +19676,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18066,19 +19714,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18131,7 +19785,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18188,14 +19871,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18205,7 +19888,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18213,44 +19896,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18259,7 +19960,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18270,7 +19971,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18278,7 +20009,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18341,11 +20076,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18354,65 +20089,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18420,7 +20155,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18431,7 +20166,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18440,33 +20175,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18476,7 +20211,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18486,7 +20221,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18494,7 +20229,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18505,22 +20240,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18529,25 +20264,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18555,13 +20290,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18571,18 +20306,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18590,7 +20325,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18600,7 +20335,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18608,11 +20343,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18623,7 +20358,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18631,7 +20366,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18640,7 +20375,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18648,7 +20383,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18658,20 +20393,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18679,7 +20414,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18688,18 +20423,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18707,13 +20442,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18722,23 +20457,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18747,216 +20482,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18989,11 +20576,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19003,11 +20590,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19016,20 +20603,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19037,29 +20624,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19067,21 +20663,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19089,7 +20685,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19099,11 +20695,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19111,113 +20707,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21865,7 +23467,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22122,7 +23724,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22131,24 +23733,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22157,31 +23759,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22189,21 +23803,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22212,57 +23826,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22360,23 +23977,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22384,28 +24001,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22413,44 +24030,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages `, 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 " @@ -1884,7 +2582,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2678,49 +3376,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2729,7 +3469,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2737,7 +3477,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2745,32 +3485,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2780,21 +3520,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2803,31 +3543,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2837,48 +3577,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2886,11 +3626,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2899,11 +3639,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2911,49 +3651,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2962,21 +3722,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2985,11 +3745,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -2997,15 +3757,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3013,21 +3773,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3179,7 +3939,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3536,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4224,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5904,6 +6664,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8556,13 +9641,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8570,11 +9656,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8584,29 +9670,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8614,37 +9700,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8653,98 +9739,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8752,93 +9838,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +9975,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8880,26 +10069,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8907,28 +10096,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8936,26 +10125,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11871,23 +13060,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11895,7 +13091,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11903,64 +13099,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11968,28 +13164,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -11998,22 +13194,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12021,29 +13217,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12053,7 +13262,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12061,7 +13270,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12069,17 +13278,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12087,39 +13296,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12129,11 +13338,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12142,38 +13351,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12181,7 +13390,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12189,18 +13398,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12209,7 +13418,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12220,7 +13429,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12238,7 +13447,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12247,37 +13456,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12285,11 +13494,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12399,8 +13621,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12507,8 +13729,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13128,24 +14350,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13153,28 +14384,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13185,33 +14416,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13220,89 +14451,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13647,11 +14878,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13663,11 +14894,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13675,7 +14906,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13683,17 +14914,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13704,11 +14934,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13717,13 +14947,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13732,7 +14962,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13745,7 +14975,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13755,7 +14985,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13763,20 +14993,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13786,194 +15016,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13981,24 +15212,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14025,7 +15256,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14178,17 +15409,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14197,7 +15428,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14205,7 +15436,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14213,34 +15444,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14249,13 +15480,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14263,7 +15494,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14271,24 +15502,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14296,22 +15527,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14322,65 +15553,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14388,106 +15619,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15709,7 +16940,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15774,7 +17005,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16062,12 +17293,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16121,90 +17352,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16212,7 +17644,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16223,14 +17655,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16239,69 +17671,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16312,11 +17744,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16326,7 +17758,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16334,11 +17766,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16346,13 +17778,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16363,23 +17795,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16387,11 +17819,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16401,33 +17833,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16435,13 +17867,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16450,34 +17882,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16718,7 +18158,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16730,81 +18170,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16818,7 +18259,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16827,7 +18268,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16839,41 +18280,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16881,20 +18426,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16903,92 +18448,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16996,14 +18544,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17011,7 +18559,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17019,24 +18567,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17044,7 +18592,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17055,17 +18603,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17073,19 +18621,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17094,20 +18642,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17115,18 +18663,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17134,7 +18682,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17142,19 +18690,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17252,7 +18806,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17260,7 +18824,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17268,58 +18832,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17327,7 +18891,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17336,13 +18900,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17351,7 +18915,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17360,18 +18924,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17379,7 +18943,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17389,11 +18953,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17401,15 +18965,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17417,11 +18981,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17429,29 +18993,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17460,11 +19038,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17472,14 +19050,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17488,28 +19066,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17537,15 +19115,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17553,23 +19139,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17585,44 +19171,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17630,7 +19216,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17639,7 +19225,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17647,22 +19267,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17671,17 +19291,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17691,11 +19315,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17705,7 +19329,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17713,7 +19337,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17721,11 +19345,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17735,7 +19359,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17745,14 +19369,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17762,7 +19386,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17770,7 +19394,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17779,71 +19403,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17852,7 +19476,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17862,48 +19486,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17912,7 +19559,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17924,7 +19571,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17934,18 +19581,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17953,11 +19600,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17965,7 +19612,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17975,7 +19622,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17985,7 +19632,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17993,28 +19640,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18023,37 +19670,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18061,19 +19708,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18126,7 +19779,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18183,14 +19865,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18200,7 +19882,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18208,44 +19890,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18254,7 +19954,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18265,7 +19965,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18273,7 +20003,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18336,11 +20070,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18349,65 +20083,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18415,7 +20149,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18426,7 +20160,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18435,33 +20169,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18471,7 +20205,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18481,7 +20215,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18489,7 +20223,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18500,22 +20234,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18524,25 +20258,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18550,13 +20284,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18566,18 +20300,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18585,7 +20319,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18595,7 +20329,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18603,11 +20337,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18618,7 +20352,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18626,7 +20360,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18635,7 +20369,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18643,7 +20377,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18653,20 +20387,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18674,7 +20408,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18683,18 +20417,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18702,13 +20436,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18717,23 +20451,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18742,216 +20476,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18984,11 +20570,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18998,11 +20584,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19011,20 +20597,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19032,29 +20618,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19062,21 +20657,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19084,7 +20679,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19094,11 +20689,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19106,113 +20701,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21860,7 +23461,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22117,7 +23718,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22126,24 +23727,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22152,31 +23753,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22184,21 +23797,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22207,57 +23820,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22355,23 +23971,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22379,28 +23995,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22408,44 +24024,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2024. # Hartmut Goebel , 2024. # Emr , 2024. +# Carsten Gerlach , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-10-17 21:16+0000\n" -"Last-Translator: Emr \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-01-17 16:00+0000\n" +"Last-Translator: Carsten Gerlach \n" "Language-Team: German \n" "Language: de\n" @@ -23,7 +24,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.8-rc\n" +"X-Generator: Weblate 5.10-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -533,6 +534,7 @@ 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 @@ -553,6 +555,7 @@ msgid "Incomplete" msgstr "Unvollständig" #: ../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 @@ -637,6 +640,7 @@ msgid "" msgstr "" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -816,6 +820,702 @@ msgid "" "library/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 +#, fuzzy +msgid "Provide complete source distributions" +msgstr "Distributionspaket" + +#: ../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 " @@ -1950,7 +2650,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2746,49 +3446,91 @@ msgid "" 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 +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 "Modul" -#: ../source/glossary.rst:152 +#: ../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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "Paketindex" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Pro Projekt Index" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2797,7 +3539,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2805,7 +3547,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2813,32 +3555,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2848,21 +3590,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Pures Modul" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2871,31 +3613,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2905,48 +3647,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2954,11 +3696,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2967,11 +3709,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2979,49 +3721,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "Quellenarchiv" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3030,21 +3792,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "Spezifikation der Version" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3053,11 +3815,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3065,16 +3827,16 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 #, fuzzy msgid "Wheel" msgstr "Wheel" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3082,23 +3844,23 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy #| msgid "Per Project Index" msgid "Wheel Project" msgstr "Pro Projekt Index" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3250,7 +4012,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3607,7 +4369,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4297,7 +5059,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5982,6 +6744,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8229,9 +9316,8 @@ msgid "" msgstr "" #: ../source/guides/tool-recommendations.rst:28 -#, fuzzy msgid "Installing packages" -msgstr "Betreuer" +msgstr "Installieren von Paketen" #: ../source/guides/tool-recommendations.rst:30 msgid "" @@ -8640,13 +9726,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8654,11 +9741,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8668,29 +9755,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8698,37 +9785,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8737,98 +9824,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8836,93 +9923,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8931,31 +10060,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8964,26 +10154,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8991,28 +10181,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9020,26 +10210,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11955,23 +13145,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11979,7 +13176,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11987,64 +13184,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12052,28 +13249,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12082,22 +13279,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12105,29 +13302,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12137,7 +13347,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12145,7 +13355,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12153,17 +13363,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12171,39 +13381,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12213,11 +13423,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12226,38 +13436,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12265,7 +13475,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12273,18 +13483,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12293,7 +13503,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12304,7 +13514,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12322,7 +13532,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12331,37 +13541,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12369,11 +13579,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12483,8 +13706,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12591,8 +13814,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13212,24 +14435,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13237,28 +14469,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13269,33 +14501,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13304,89 +14536,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13735,11 +14967,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13751,11 +14983,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13763,7 +14995,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13771,17 +15003,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13792,11 +15023,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13805,13 +15036,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13820,7 +15051,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13833,7 +15064,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13843,7 +15074,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13851,20 +15082,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13874,194 +15105,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14069,24 +15301,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14113,7 +15345,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14266,17 +15498,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14285,7 +15517,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14293,7 +15525,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14301,34 +15533,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14337,13 +15569,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14351,7 +15583,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14359,24 +15591,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14384,22 +15616,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14410,65 +15642,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14476,106 +15708,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15801,7 +17033,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15866,7 +17098,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16155,12 +17387,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16218,87 +17450,288 @@ msgstr "" msgid "``manylinux2010``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2014``" +#: ../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 +#, fuzzy +msgid "``musllinux``" +msgstr "Betreuer" + +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../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:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=1.0.0``" +#: ../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:143 -msgid "``>=2.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -#, fuzzy -msgid "``musllinux``" -msgstr "Betreuer" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:286 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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:157 +#: ../source/specifications/platform-compatibility-tags.rst:289 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:" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:188 +#: ../source/specifications/platform-compatibility-tags.rst:291 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." +"``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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16306,7 +17739,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16317,14 +17750,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16333,69 +17766,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16406,11 +17839,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16420,7 +17853,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16428,11 +17861,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16440,13 +17873,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16457,23 +17890,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16481,11 +17914,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16495,33 +17928,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16529,13 +17962,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16544,34 +17977,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16812,7 +18253,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16824,82 +18265,83 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 #, fuzzy msgid "``maintainers``" msgstr "Betreuer" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16913,7 +18355,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16922,7 +18364,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16934,41 +18376,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16976,20 +18522,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16998,92 +18544,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17091,14 +18640,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17106,7 +18655,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17114,24 +18663,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17139,7 +18688,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17150,17 +18699,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17168,19 +18717,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17189,20 +18738,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17210,18 +18759,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17229,7 +18778,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17237,19 +18786,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17347,7 +18902,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17355,7 +18920,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17363,58 +18928,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17422,7 +18987,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17431,13 +18996,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17446,7 +19011,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17455,18 +19020,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17474,7 +19039,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17484,11 +19049,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17496,15 +19061,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17512,11 +19077,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17524,29 +19089,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17555,11 +19134,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17567,14 +19146,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17583,28 +19162,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17632,15 +19211,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17648,23 +19235,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17680,44 +19267,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17725,7 +19312,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17734,7 +19321,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17742,22 +19363,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17766,17 +19387,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17786,11 +19411,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17800,7 +19425,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17808,7 +19433,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17816,12 +19441,12 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy msgid "Installers" msgstr "Betreuer" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17831,7 +19456,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17841,14 +19466,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17858,7 +19483,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17866,7 +19491,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17875,71 +19500,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17948,7 +19573,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17958,48 +19583,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18008,7 +19656,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18020,7 +19668,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18030,18 +19678,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18049,11 +19697,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18061,7 +19709,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18071,7 +19719,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18081,7 +19729,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18089,28 +19737,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18119,37 +19767,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18157,19 +19805,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18222,7 +19876,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18279,14 +19962,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18296,7 +19979,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18304,44 +19987,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18350,7 +20051,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18361,7 +20062,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18369,7 +20100,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18432,11 +20167,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18445,65 +20180,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18511,7 +20246,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18522,7 +20257,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18531,33 +20266,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18567,7 +20302,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18577,7 +20312,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18585,7 +20320,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18596,22 +20331,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18620,25 +20355,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18646,13 +20381,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18662,18 +20397,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18681,7 +20416,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18691,7 +20426,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18699,11 +20434,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18714,7 +20449,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18722,7 +20457,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18731,7 +20466,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18739,7 +20474,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18749,20 +20484,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18770,7 +20505,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18779,18 +20514,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18798,13 +20533,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18813,23 +20548,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18838,216 +20573,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19080,11 +20667,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19094,11 +20681,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19107,20 +20694,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19128,29 +20715,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19158,21 +20754,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19180,7 +20776,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19190,11 +20786,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19202,113 +20798,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21956,7 +23558,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22213,7 +23815,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22222,24 +23824,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22248,31 +23850,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22280,21 +23894,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22303,57 +23917,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22451,23 +24068,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22475,28 +24092,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22504,44 +24121,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" -"Language-Team: Esperanto \n" +"Language-Team: Esperanto \n" "Language: eo\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.10-dev\n" +"X-Generator: Weblate 5.10.3-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -591,6 +591,7 @@ msgid "Deploying Python applications" msgstr "Disponigi Python-programojn" #: ../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 @@ -611,6 +612,7 @@ msgid "Incomplete" msgstr "Nekompleta" #: ../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 @@ -717,6 +719,7 @@ msgstr "" "Public License 2.0." #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -963,6 +966,716 @@ msgstr "" "Python-identigilo, per :doc:`importlib `, tio " "estas maloftega kaj malrekomendegata." +#: ../source/discussions/downstream-packaging.rst:5 +msgid "Supporting downstream packaging" +msgstr "Subteni pakadon far malsupruloj" + +#: ../source/discussions/downstream-packaging.rst:7 +msgid "Draft" +msgstr "Malneto" + +#: ../source/discussions/downstream-packaging.rst:8 +msgid "2025-?" +msgstr "2025-?" + +#: ../source/discussions/downstream-packaging.rst:10 +msgid "" +"While PyPI and the Python packaging tools such as :ref:`pip` are the primary " +"means of distributing Python packages, they are also often made available as " +"part of other packaging ecosystems. These repackaging efforts are " +"collectively called *downstream* packaging (your own efforts are called " +"*upstream* packaging), and include such projects as Linux distributions, " +"Conda, Homebrew and MacPorts. They generally aim to provide improved support " +"for use cases that cannot be handled via Python packaging tools alone, such " +"as native integration with a specific operating system, or assured " +"compatibility with specific versions of non-Python software." +msgstr "" + +#: ../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 "Provizi plenajn fontajn distribuojn" + +#: ../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 "Kial?" + +#: ../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 "La kapablo inspekti la fontkodon de ĉiuj pakoj." + +#: ../source/discussions/downstream-packaging.rst:64 +msgid "Being able to run the test suite and build documentation." +msgstr "La kapablo ruli la testaron kaj konstrui la dokumentaron." + +#: ../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 "La kapablo konstrui sur specifa platformo ne provizita de supruloj." + +#: ../source/discussions/downstream-packaging.rst:72 +msgid "Being able to build against specific versions of system libraries." +msgstr "La kapablo bindi al specifaj versioj de sistemaj bibliotekoj." + +#: ../source/discussions/downstream-packaging.rst:74 +msgid "Having a consistent build process across all Python packages." +msgstr "Havi koheran konstruprocedon por ĉiaj Python-pakoj." + +#: ../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 "Kiel?" + +#: ../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 "Ne uzi Interreton dum konstruado" + +#: ../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 "" +"La Interreta konekto povas esti malstabila (ekz. pro malbona sendrata reto) " +"aŭ havi dumpteman problemon, kaŭzante malsukceson aŭ paraliziĝon de la " +"procezo." + +#: ../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 "La foraj resursoj povas ŝanĝiĝi, nereproduktebligante la konstruon." + +#: ../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 "Ebligi konstruadon uzante sistemajn dependecojn" + +#: ../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 "" +"Kelkaj Python-projektoj dependas de ne-Python-aj bibliotekoj en ekz. C aŭ C++" +". Uzado de sistemaj versioj de tiaj dependaĵoj en suprula pakado kaŭzas " +"multajn problemojn por uzantoj:" + +#: ../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 "" +"Eĉo por spertulo, instali kongruan version de dependaĵo povas esti " +"malfacilege. Ekzemple, la postulata versio povus manki en la uzata Linux-" +"distribuo, aŭ alia pako povus postuli nekongruan version." + +#: ../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 "" +"Statika bindado kaj kopiado kaŝas la uzon de eksteraj dependaĵoj, " +"malfaciligante inspektadon de la fonto." + +#: ../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 "Subteni testadon far malsupruloj" + +#: ../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 "Konfirmi, ke la malsuprula pakado ne kreis cimojn." + +#: ../source/discussions/downstream-packaging.rst:312 +msgid "" +"Testing on additional platforms that are not covered by upstream testing." +msgstr "Testi sur pliaj platformoj ol la suprula testaro." + +#: ../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 "" +"Trovi subtilan cimon nur troveblan per specifaj aparatoj, versioj de " +"sistemaj pakoj ktp." + +#: ../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 "" +"Testi la eldonitan pakon por versioj de dependaĵoj pli novaj (aŭ malnovaj) " +"ol tiuj de la suprulaj testoj." + +#: ../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 "Celi stabilajn eldonojn" + +#: ../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 "frue meti novan version en la stabilan kanalon," + +#: ../source/discussions/downstream-packaging.rst:433 +msgid "adding patches to the version currently published," +msgstr "fliki la aktualan eldonitan version," + +#: ../source/discussions/downstream-packaging.rst:435 +msgid "or even downgrading the stable channel to an earlier release." +msgstr "aŭ eĉ malĝisdatigi la stabilan kanalon al pli malnova eldono." + +#: ../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 " @@ -1043,6 +1756,11 @@ msgid "" "\"Concrete\") is to be determined at install time using :ref:`pip` options. " "[1]_" msgstr "" +"Fine, estas grave kompreni, ke ``install_requires`` estas listo de " +"«Abstraktaj» postuloj, t.e. nuraj nomoj kaj versiaj restriktoj, kiuj ne " +"determinas la lokon, de kiu la dependecoj estos plenumitaj (t.e. de kiu " +"indekso aŭ fonto). La kieo (t.e. kiel «Konkretigi» ilin) estas determinota " +"rultempe per la opcioj de :ref:`pip`. [1]_" #: ../source/discussions/install-requires-vs-requirements.rst:62 #: ../source/tutorials/installing-packages.rst:464 @@ -1074,6 +1792,9 @@ msgid "" "achieving :ref:`repeatable installations ` of a complete " "environment." msgstr "" +"Dum postuloj de ``install_requires`` estas minimumaj, postulo-dosiero ofte " +"enhavas plenan liston de alpinglitaj versioj por :ref:`ripeteblaj instaloj " +"` de plena medio." #: ../source/discussions/install-requires-vs-requirements.rst:76 msgid "" @@ -1083,6 +1804,10 @@ msgid "" "\"Concrete\", i.e. associated with a particular index or directory of " "packages. [1]_" msgstr "" +"Dum postuloj de ``install_requires`` estas «Abstraktaj» (ne asociitaj al iu " +"indekso), postulo-dosiero ofte enhavas pip-flagojn kiel ``--index-url`` aŭ " +"``--find-links`` por «Konkretigi» la postulojn (asocii ilin al iuj indeksoj " +"aŭ dosierujoj da pakoj). [1]_" #: ../source/discussions/install-requires-vs-requirements.rst:82 msgid "" @@ -1239,6 +1964,11 @@ msgid "" "Python interpreter (unless the :ref:`Python stable ABI ` " "is used)." msgstr "" +"Krome, dum ekzistas po unu fonta distribuo por ĉiu versio de projekto, povas " +"ekzisti multaj wheel-oj. Denove, tio plej temas pri etendaĵa modulo. La " +"tradukita kodo de etendaĵa modulo estas ligita al mastruma sistemo kaj " +"procesora arĥitekturo kaj ofte ankaŭ la versio de la Python-interpretilo (se " +"oni ne uzas la :ref:`stabilan ABI de Python `)." #: ../source/discussions/package-formats.rst:72 msgid "" @@ -1276,6 +2006,14 @@ msgid "" "along with a hash of their content, as a safety check of the download's " "integrity." msgstr "" +"Tamen, ekzistas gravaj diferencoj inter fontaj distribuo kaj wheel, eĉ por " +"pure Python-a projekto. Wheel intence enhavas nur tiom, kiom estas " +"instalota, kaj neniom pli. Specife, wheel ne inkluzivu testojn kaj " +"dokumentaron, dum fonta distribuo ja ofte inkluzivas ilin. Ankaŭ, la " +"dosierformo wheel estas pli komplika ol fonta distribuo. Ekzemple, ĝi " +"inkluzivas speciala dosieron nomitan ``RECORD`` listigantan ĉiujn dosierojn " +"en wheel kune kun haketaĵoj de la enhavoj por kontroli la integrecon de la " +"elŝutaĵo." #: ../source/discussions/package-formats.rst:91 msgid "" @@ -1325,6 +2063,11 @@ msgid "" "equivalent of ``PKG-INFO`` in sdists, as well as ``RECORD``. This can be " "useful to ensure no files are missing from your wheels." msgstr "" +"Ene de wheel troviĝas la dosieroj de la pako kaj ekstra dosierujo nomita :" +"samp:`{paknomo}-{versio}.dist-info`. Tiu dosierujo enhavas diversajn " +"dosierojn, inkluzive de dosiero ``METADATA``, kiu ekvivalentas ``PKG-INFO`` " +"en fonta dstribuo, kaj ``RECORD``. Tio utilas por certigi, ke neniu dosiero " +"mankas en wheel." #: ../source/discussions/package-formats.rst:115 msgid "" @@ -1372,7 +2115,7 @@ msgid "" "All technical details on the wheel format can be found in the :ref:`wheel " "specification `." msgstr "" -"Ĉiaj teknikaj detaloj pri la dosierformo wheel troviĝas en la :ref:`specifo " +"Ĉiaj teĥnikaj detaloj pri la dosierformo wheel troviĝas en la :ref:`specifo " "pri wheel `." #: ../source/discussions/package-formats.rst:138 @@ -1478,6 +2221,11 @@ msgid "" "backend, typically ``[project]`` in ``pyproject.toml``, and translated by " "the build backend into ``PKG-INFO``." msgstr "" +"Ĉi tiu formo estas retmesaĝo-baza. Kvankam ĝi estus neverŝajne elektita " +"hodiaŭ, ĝi restas kiel la kanona formo pro retrokongrueco. Por la uzanto, " +"tio estas plejparte nevidebla, ĉar la metadatenoj estas specifitaj de la " +"uzanto en maniero komprenita de la konstrua malfasado, ofte ``[project]`` en " +"``pyproject.toml`,` kaj tradukitaj de la konstrua malfasado al ``PKG-INFO``." #: ../source/discussions/package-formats.rst:184 msgid "" @@ -1485,6 +2233,9 @@ msgid "" "format, although :ref:`this is not officially supported at this time `." msgstr "" +"Kelkfoje, wheel povas esti uzata kiel importabla rultempa formo, kvankam :" +"ref:`aktuale tio ne estas oficiale subtenata `." #: ../source/discussions/pip-vs-easy-install.rst:6 msgid "pip vs easy_install" @@ -1662,6 +2413,11 @@ msgid "" "example (a similar practice is used by other tools like *nox* and its :file:" "`noxfile.py` configuration file, or *pytest* and :file:`conftest.py`)." msgstr "" +"Setuptools estas bone uzebla kiel :term:`konstrua malfasado ` " +"por paki Python-projektojn. Kaj :file:`setup.py` estas valida agorda dosiero " +"por :ref:`setuptools`, kiu estas verkita en Python anstataŭ *TOML* ekzemple " +"(ion similan faras aliaj iloj kiel *nox* per sia agorda dosiero :file:" +"`noxfile.py` kaj *pytest* per sia :file:`conftest.py`)." #: ../source/discussions/setup-py-deprecated.rst:18 msgid "" @@ -1735,6 +2491,10 @@ msgid "" "what ``python -m build`` does. If necessary the ``--sdist`` and ``--wheel`` " "options can be used to generate only one or the other." msgstr "" +"Tio postulas la dependaĵon :ref:`build`. Estas rekomendate ĉiam konstrui kaj " +"eldoni kaj la fontan distribuon kaj la wheel de projekto; tion faras la " +"komando ``python -m build``. Laŭbezone oni povas uzi la flagojn ``--sdist`` " +"kaj ``--wheel`` por generi nur unu aŭ la alia." #: ../source/discussions/setup-py-deprecated.rst:52 msgid "" @@ -1776,6 +2536,12 @@ msgid "" "generate only one or the other. Note that the build tool needs to be " "installed separately." msgstr "" +"Unu rekomendata kaj simpla metodo por konstrui :term:`fontan distribuon " +"` kaj :term:`wheel ` estas uzi la " +"ilon :ref:`build` kun komando kiel ``python -m build``, kiu generas ambaŭ " +"distribuajn formojn. Laŭbezone oni povas uzi la flagojn ``--sdist`` kaj ``--" +"wheel`` por nur generi unu aŭ la alian. Notu, ke la ilo ``build`` devas esti " +"aparte instalita." #: ../source/discussions/setup-py-deprecated.rst:80 msgid "" @@ -1979,6 +2745,9 @@ msgid "" "``build_py``, ``build_ext``, and ``bdist_wheel`` or add new build steps are " "not deprecated. Those will be automatically called as expected." msgstr "" +"Ne evitindaj estas propraj konstrupaŝoj, kiuj ekzemple aŭ anstataŭigas " +"ekzistantaj paŝojn kiel ``build_py``, ``build_ext`` kaj ``bdist_wheel``, aŭ " +"aldonas novajn konstrupaŝojn. Tiuj estos aŭtomate alvokitaj." #: ../source/discussions/setup-py-deprecated.rst:175 #: ../source/guides/modernize-setup-py-project.rst:21 @@ -2076,6 +2845,10 @@ msgid "" "same version specifier as :func:`importlib.metadata.version` reports for the " "distribution package (as described in :ref:`runtime-version-access`)." msgstr "" +"Ofte :term:`distribua Python-pako ` provizas unu :term:" +"`importan pakon `, kaj oni deziras, ke la rultempa atributo " +"``__version__`` de la importa pako estu sama kiel :func:`importlib.metadata." +"version` por la distribua pako (laŭ :ref:`runtime-version-access`)." #: ../source/discussions/single-source-version.rst:16 msgid "" @@ -2083,12 +2856,16 @@ msgid "" "a version control system *tag* (such as ``v1.2.3``) rather than being " "manually updated in the source code." msgstr "" +"Ofte oni deziras derivi la versian informon el versikontrolsistema *etikedo* " +"(kiel ``v1.2.3``) anstataŭ malaŭtomata ĝisdatigo en la fontkodo." #: ../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 "" +"Kelkaj projektoj povas elekti simple ignori la obligon de datenoj, kaj " +"dependi de aŭtomata testado por certigi, ke la valoroj ne diverĝas." #: ../source/discussions/single-source-version.rst:23 msgid "" @@ -2126,6 +2903,11 @@ msgid "" "attribute in a particular module, such as :file:`__init__.py`. The build " "system can then extract it from the runtime location at build time." msgstr "" +"La versio povas esti rekte metita en la fontkodon – aŭ en specialcelan " +"dosieron kiel :file:`_version.txt` (kiu devas esti parto de la fonta " +"distribua pako de la projekto) aŭ kiel atributo en modulo kiel :file:" +"`__init__.py`. Do la konstrua sistemo povas eltiri ĝin el la rultempa loko " +"ĉe konstrua tempo." #: ../source/discussions/single-source-version.rst:38 msgid "Consult your build system's documentation for their recommended method." @@ -2140,6 +2922,12 @@ msgid "" "``importlib.metadata.version(\"dist-name\")`` report the same value (note: " "for many projects, ``import_name`` and ``dist-name`` will be the same name)." msgstr "" +"Kiam oni intencas, ke distribua pako kaj ĝia asociita importa pako havu la " +"saman version, ni rekomendas, ke la projekto havu aŭtomatan testkazon " +"certigantan, ke ``nomo_de_importa_pako.__version__`` kaj ``importlib." +"metadata.version(\"nomo-de-distribua-pako\")`` estu samaj (notu: por multaj " +"projektoj, ``nomo_de_importa_pako`` kaj ``nomo-de-distribua-pako`` estos " +"samaj)." #: ../source/discussions/single-source-version.rst:50 msgid "Build System Version Handling" @@ -2228,6 +3016,10 @@ msgid "" "` is used for development and a " "regular installation is used for testing)." msgstr "" +"Tio signifas, ke la src-aranĝo necesigas ekstran paŝon en la evoluada " +"laborfluo de projekto (ofte :doc:`modifebla instalo ` uziĝas por evoluigado, kaj ordinara instalo uziĝas por " +"testado)." #: ../source/discussions/src-layout-vs-flat-layout.rst:56 msgid "" @@ -2247,6 +3039,12 @@ msgid "" "packaging tooling, which could result in files not being included in a " "distribution." msgstr "" +"Tio gravas, ĉar la Python-interpretilo inkluzivas la aktualan dosierujon " +"kiel la unuan eron de la importa dosierlokaro. Tial, se en la aktuala " +"dosierujo ekzistas importa pako, kies nomo estas sama kiel instalita importa " +"pako, do la varianto en la aktuala dosierujo estos uzata. Tio povas kaŭzi " +"subtilajn misaĵojn de la pakado, rezultigante dosierojn mankantajn en la " +"distribuo." #: ../source/discussions/src-layout-vs-flat-layout.rst:66 msgid "" @@ -2254,6 +3052,9 @@ msgid "" "separate from the root directory of the project, ensuring that the installed " "copy is used." msgstr "" +"La src-aranĝo avertas tion, tenante la importajn pakojn en dosierujo aparta " +"de la radika dosierujo de la projekto, certigante, ke la instalita kopio " +"uziĝos." #: ../source/discussions/src-layout-vs-flat-layout.rst:70 msgid "" @@ -2271,6 +3072,9 @@ msgid "" "using a `path configuration file `_ that adds the directory to the import path." msgstr "" +"Tio estas speciale utila, kiam la modifebla instalo estas realigita per " +"`dosierloko-agorda dosiero `_ aldonanta la dosierujon al la importa dosierlokaro." #: ../source/discussions/src-layout-vs-flat-layout.rst:78 msgid "" @@ -2279,6 +3083,10 @@ msgid "" "``noxfile.py``) on the import path. This would make certain imports work in " "editable installations but not regular installations." msgstr "" +"La plata aranĝo aldonus aliajn projektaojn dosierojn (ekzemple ``README." +"md``, ``tox.ini``) kaj pakadajn/ilajn agordajn dosierojn (ekzemple ``setup." +"py``, ``noxfile.py``) al la importa dosierlokaro. Tio kaŭzus, ke kelkaj " +"importoj funkcius en modifebla instalo sed ne en ordinara instalo." #: ../source/discussions/src-layout-vs-flat-layout.rst:86 msgid "Running a command-line interface from source with src-layout" @@ -2294,9 +3102,15 @@ msgid "" "the package folder to Python's :py:data:`sys.path` when called via its :" "file:`__main__.py` file:" msgstr "" +"Pro la unue menciita kvalito de la src-aranĝo, oni ne povas ruli " +"komandlinian fasadon rekte de la :term:`fontarbo `, sed " +"devas instali la pakon en :doc:`Evoluada Reĝimo ` por testado. Se tio malutilias, oni povas antaŭmeti la " +"pakan dosierujon al :py:data:`sys.path` de Python, kiam oni rulas la " +"dosieron :file:`__main__.py`:" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "Versiado" @@ -2375,6 +3189,12 @@ msgid "" "versions of dependencies to install, unless explicitly requested (e.g., with " "``pip install pkg==1.1a3`` or ``pip install --pre pkg``)." msgstr "" +"Projektoj povas uzi ciklon de antaŭeldonoj por testado far uzantoj antaŭ " +"fina eldono. Laŭorde, jen la ŝtupoj: alfa-eldonoj, beta-eldonoj, " +"eldonkandidatoj, fina eldono. Pip kaj aliaj modernaj Python-pakistaliloj " +"apriore ignoras antaŭeldonojn decidadante la instalotan version de " +"dependaĵo, escepte de eksplicita postulo (ekzemple per ``pip install " +"pako==1.1a3`` or ``pip install --pre pako``)." #: ../source/discussions/versioning.rst:39 msgid "" @@ -2382,6 +3202,9 @@ msgid "" "a development cycle, for example, a nightly build, or a build from the " "latest source in a Linux distribution." msgstr "" +"Evoluada eldono celas subteni eldonadon dum frua parto de evoluada ciklo — " +"ekzemple, ĉiutaga konstruo aŭ konstruo el la plej nova fonto en Linux-" +"distribuo." #: ../source/discussions/versioning.rst:43 msgid "" @@ -2391,6 +3214,11 @@ msgid "" "with a new final release (e.g., incrementing the third component when using " "semantic versioning)." msgstr "" +"Posteldono estas por korekti negravajn erarojn en fina eldono, kiuj ne " +"efikas sur la distribuita programo, kiel ekzemple korektado de eraro en la " +"eldonaj notoj. Oni ne uzu posteldonon por ripari cimon; por tio oni uzu " +"novan finan eldonon (ekz., alkremante la trian komponanton por semantika " +"versio)." #: ../source/discussions/versioning.rst:49 msgid "" @@ -2432,6 +3260,10 @@ msgid "" "That view may differ from the end-users' perception of what said formalized " "versioning scheme promises them." msgstr "" +"La projekta mastrumanto decidas la uzotan versian numeron. Tio signifas, ke " +"versia alkremento reflektas la opinion de la mastrumanto. Tiu opinio povas " +"devii de la percepto de la uzantoj pri la promesoj de la formaligita versia " +"skemo." #: ../source/discussions/versioning.rst:74 msgid "" @@ -2441,6 +3273,11 @@ msgid "" "when security vulnerability needs to be addressed. Security releases often " "come in patch versions but contain breaking changes inevitably." msgstr "" +"Ekzistas konataj esceptoj por elektado de la sekva versia numero. La " +"mastrumanto povas konscie rompi la supozon, ke la lasta versio-segmento nur " +"enhavas retrokongruajn ŝanĝojn. Unu kazo estas por ripari sekurecan " +"vundeblaĵon. Eldono pro sekureco ofte nur modifas la lastan versio-" +"segmenton, sed havas neretrokongruajn ŝanĝojn." #: ../source/discussions/versioning.rst:84 #: ../source/specifications/version-specifiers.rst:723 @@ -2586,6 +3423,11 @@ msgid "" "as an end user, as serial version numbers convey little or no information " "regarding API backwards compatibility." msgstr "" +"Seria versiado estas la plej simpla versia skemo konsistanta el unu enjreo " +"alkrementata po unu fojo por ĉiu eldono. Kvankam seria versiado estas tre " +"facile administrebla por la aŭtoro, ĝi estas malfacila por la uzanto, ĉar " +"seria versia numero enhavas neniom aŭ apenaŭon da informo pri retrokongrueco " +"de la API." #: ../source/discussions/versioning.rst:150 msgid "" @@ -2595,6 +3437,10 @@ msgid "" "release, but doesn't otherwise commit to a particular release cadence within " "the year." msgstr "" +"Eblas kombinaĵoj de ĉi-supraj skemoj. Ekzemple, projekto povas kombini dato-" +"bazitajn versiojn kun seriajn versiojn, kreante skemon *jaro.serio*, kiu " +"klarigas la proksimuman aĝon de la eldono, sed ne postulas eldonan planon en " +"la jaro." #: ../source/discussions/versioning.rst:157 #: ../source/specifications/version-specifiers.rst:114 @@ -2609,6 +3455,11 @@ msgid "" "which can be used to identify local development builds not intended for " "publication, or modified variants of a release maintained by a redistributor." msgstr "" +"Publika versio-identigilo celas subteni distribuadon per :term:`PyPI `. Python-pakiloj ankaŭ subtenas :ref:`lokan versio-" +"identigilon `, kiu identigas lokan evoluadan " +"konstruon ne por publika eldonado, aŭ modifitan varianton de eldono far " +"redistribuanto." #: ../source/discussions/versioning.rst:165 msgid "" @@ -2621,6 +3472,13 @@ msgid "" "dev1+gd00980f\", or if the repository has untracked changes, like \"0.5." "dev1+gd00980f.d20231217\"." msgstr "" +"Loka versio-identigilo konsistas el publika versio-identigilo sekvita de «+» " +"kaj loka versia etikedo. Ekzemple, pako kun Fedora-specifaj flikoj havus la " +"version «1.2.1+fedora.4». Alia ekzemplo estas versio komputita de setuptools-" +"scm_, kiu estas kromprogramo por setuptools leganta la version el Git-" +"datenoj. En Git-deponejo kun kelko da ŝanĝoj post la plej nova eldono, " +"setuptools-scm generas version kiel «0.5.dev1+gd00980f» aŭ, se la deponejo " +"havas nespuratajn ŝanĝojn, kiel «0.5.dev1+gd00980f.d20231217»." #: ../source/discussions/versioning.rst:177 msgid "Accessing version information at runtime" @@ -2633,6 +3491,9 @@ msgid "" "obtained at runtime using the standard library's :func:`importlib.metadata." "version` function::" msgstr "" +"Versiaj informoj por ĉiuj :term:`distribuaj pakoj ` " +"loke haveblaj en la aktuala medio estas akireblaj per la funkcio :func:" +"`importlib.metadata.version` en la norma biblioteko::" #: ../source/discussions/versioning.rst:186 msgid "" @@ -2648,6 +3509,8 @@ msgid "" "to ensure that version query invocations (such as ``pip -V``) run as quickly " "as possible." msgstr "" +"Tiu teĥniko estas speciale utila por komandlinia programo, kies versio-peto " +"(kiel ekzemple ``pip -V``) devas ruliĝi rapide." #: ../source/discussions/versioning.rst:198 msgid "" @@ -2655,6 +3518,9 @@ msgid "" "import package versions are consistent with each other can review the :ref:" "`single-source-version` discussion for potential approaches to doing so." msgstr "" +"Eldonanto de pako, kiu volas certigi, ke la versioj de la distribua pako kaj " +"importa pako estu samaj, legu la diskuton :ref:`single-source-version` por " +"eblaj metodoj por fari tion." #: ../source/discussions/versioning.rst:202 msgid "" @@ -2666,6 +3532,12 @@ msgid "" "querying code should be designed to handle the case where the attribute is " "missing [#fallback-to-dist-version]_." msgstr "" +"Ĉar importaj pako kaj moduloj ne *devas* sciigi pri rultempa versia informo " +"tiel (vidu la neaprobitan proponon :pep:`PEP 396 <396>`), oni serĉu la " +"atributon ``__version__`` nur por tiuj interfacoj, por kiuj oni scias ke la " +"atributo ekzistas (kiel ekzemple projekto serĉanta sian propran version aŭ " +"la version de unu el siaj rektaj dependaĵoj). Alie, la serĉanta kodo " +"pritraktu la kazon, kiam la atributo mankas [#fallback-to-dist-version]_." #: ../source/discussions/versioning.rst:210 msgid "" @@ -2675,6 +3547,11 @@ msgid "" "For example, the standard library's :mod:`ssl` module offers multiple ways " "to access the underlying OpenSSL library version::" msgstr "" +"Kelkaj projektoj devas publikigi versiajn informojn de eksteraj API-oj, kiuj " +"ne estas la versio de la modulo mem. Tia projekto difinu sian projekto-" +"specifan manieron akiri la informon runtempe. Ekzemple, la modulo :mod:`ssl` " +"de la norma biblioteko provizas plurajn manierojn por atingi la version de " +"la biblioteko OpenSSL::" #: ../source/discussions/versioning.rst:225 msgid "" @@ -2708,6 +3585,13 @@ msgid "" "and modules added via means other than Python package installation would " "fail to have version information reported in that case." msgstr "" +"Plena listo rilatanta la supranivelajn importeblajn nomojn al la distribuo-" +"pakoj provizantaj tiujn importeblajn pakojn kaj modulojn estas akirebla per " +"la funkcio :func:`importlib.metadata.packages_distributions` de la norma " +"biblioteko. Tio signifas, ke kodo provanta raporti version por ĉiu " +"importebla nomo havas rimedon raporti ion, eĉ se atributo ``__version__`` " +"mankas. Nur moduloj de la norma biblioteko kaj moduloj disponigitaj per " +"maniero alia ol instalado de Python-pako ne havos versiajn informojn tiukaze." #: ../source/flow.rst:3 msgid "The Packaging Flow" @@ -2731,6 +3615,9 @@ msgid "" "process of preparing a simple package for release, it does not fully " "enumerate what steps and files are required, and for what purpose." msgstr "" +"Kvankam la :doc:`lernilo ` priskribas la " +"procedon por prepari simplan pakon por eldonado, ĝi ne plene klarigas la " +"postulatajn paŝojn kaj dosierojn kaj la kialojn." #: ../source/flow.rst:16 msgid "" @@ -2755,6 +3642,9 @@ msgid "" "will be a :file:`pyproject.toml` file, maintained manually in the source " "tree." msgstr "" +"Preparu agordan dosieron priskribantan la pakajn metadatenojn (nomon, " +"version ktp) kaj la manieron konstrui la artefaktojn. Plej ofte tiu estas la " +"dosiero :dosiero:`pyproject.toml` malaŭtomate mastrumata en la fontarbo." #: ../source/flow.rst:27 msgid "" @@ -2765,6 +3655,12 @@ msgid "" "build tool using the configuration file from the previous step. Often there " "is just one generic wheel for a pure Python package." msgstr "" +"Kreu konstruitajn artefaktojn seldontan al la pako-disdonada servo (kutime " +"PyPI); tiuj ordinare estas :term:`fonta distribuo (sdist) ` kaj unu aŭ pli da :term:`konstrutaj distribuoj " +"(wheel) `. Tiujn konstruas konstruilo uzante la agordan " +"dosieron de la antaŭa paŝo. Ofte estas nur unu ĝenerala wheel por pure " +"Python-a pako." #: ../source/flow.rst:35 msgid "Upload the build artifacts to the package distribution service." @@ -2862,12 +3758,20 @@ msgid "" "`pip` also acts as a frontend when it runs your build tool's backend to " "install from a source distribution." msgstr "" +"Kun tia tabelo en la dosiero :file:`pyproject.toml`, :term:`konstrua fasado " +"` kiel :ref:`build` povas ruli la elektitan :term:`konstruan " +"malfasadon ` por krei la konstruitajn artefaktojn. La " +"konstrua malfasado povas ankaŭ provizi sian propran fasadon. Instalilo kiel :" +"ref:`pip` ankaŭ funkcias kiel fasado, kiam ĝi rulas la konstruan malfasadon " +"por instali el fonta distribuo." #: ../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 "" +"Tiu konstruilo, kiun vi elektas, determinas la postulatajn pliajn informojn " +"en la dosiero :file:`pyproject.toml`. Ekzemple, oni povas uzi la jenon:" #: ../source/flow.rst:97 msgid "" @@ -2905,6 +3809,11 @@ msgid "" "wanting to develop your sources, and for end user systems where some local " "compilation step is required (such as a C extension)." msgstr "" +"Fonta distribuo enhavas sufiĉon por instali de fonto la pakon en la Python-" +"medio de la uzanto. Tial, ĝi bezonas la pakan fonton, kaj ankaŭ povas " +"inkluzivi testojn kaj dokumentaron. Tio utilas por tiaj uzantoj, kiaj volas " +"programi kun viaj fontoj, aŭ kies sistemoj postulas lokan tradukadon " +"(ekzemple por C-etendaĵo)." #: ../source/flow.rst:119 ../source/flow.rst:143 msgid "" @@ -2932,6 +3841,10 @@ msgid "" "wheel file can simply be unpacked into the ``site-packages`` directory. This " "makes the install faster and more convenient for end users." msgstr "" +"Konstruita distribuo enhavas nur tiujn dosierojn, kiuj necesas en la Python-" +"medio de uzanto. Instalado ne postulas tradukadon, kaj la wheel povas simple " +"esti malpakita al la dosierujo ``site-packages``. Tio plirapidigas kaj " +"plifaciligas instaladon." #: ../source/flow.rst:137 msgid "" @@ -2941,6 +3854,10 @@ msgid "" "supports. If a suitable wheel file is not available, tools like :ref:`pip` " "will fall back to installing the source distribution." msgstr "" +"Pure Python-a pako tipe nur bezonas unu «generalan» wheel. Pako kun " +"tradukita duuma etendaĵo bezonas po unu wheel por ĉiu subtenata kombinaĵo de " +"Python-interpretilo, mastruma sistemo kaj ĉefprocesora arĥitekturo. Se taŭga " +"wheel ne haveblas, :ref:`pip` kaj aliaj iloj instalos la fontan distribuon." #: ../source/flow.rst:150 msgid "Or, your build tool may provide its own interface for creating a wheel." @@ -3008,8 +3925,8 @@ msgid "" "A specific kind of :term:`Built Distribution` that contains compiled " "extensions." msgstr "" -"Specifa speco de :term:`Konstruita Distribuo` enhavanta tradukitajn " -"etendaĵojn." +"Specifa speco de :term:`Konstruita Distribuo ` enhavanta " +"tradukitajn etendaĵojn." #: ../source/glossary.rst:14 msgid "Build Backend" @@ -3049,6 +3966,10 @@ msgid "" "building is delegated to each source tree's :term:`build backend `." msgstr "" +"Ilo, rulebla de uzanto, kiu el arbitra fontarbo aŭ :term:`fonta distribuo " +"` konstruas fontan distribuon aŭ :term:" +"`wheel `. La faktan konstruadon faras la :term:`konstrua malfasado " +"` de la fontarbo." #: ../source/glossary.rst:42 msgid "Examples of build frontends are :ref:`pip` and :ref:`build`." @@ -3069,6 +3990,13 @@ msgid "" "does not include compiled Python files). See :ref:`package-formats` for more " "information." msgstr "" +":term:`Distribua ` formo enhavanta dosierojn kaj " +"metadatenojn, kiujn oni povas simple movi al la ĝustaj lokoj en la cela " +"sistemo por instalado. :term:`Wheel` estas unu ekzemplo, dum :term:`Fonta " +"Distribuo ` ne estas ekzemplo, ĉar ĝi " +"postulas tradukadon antaŭ instalado. Tio ne signifas, ke Python-dosiero " +"devas esti antaŭtradukita (:term:`Wheel` intence ne inkluzivas tradukitajn " +"Python-dosierojn). Vidu :ref:`package-formats` por pliaj informoj." #: ../source/glossary.rst:56 msgid "Built Metadata" @@ -3081,6 +4009,10 @@ msgid "" "Archive` (``PKG-INFO`` in a :term:`Sdist ` and ``METADATA`` in a :term:`Wheel`)." msgstr "" +"La konkreta formo de :term:`Kerna Metadateno ` en instalita :" +"term:`Projekto ` (la dosiero ``METADATA``) aŭ :term:`Distribua " +"Arĥivo ` (``PKG-INFO`` en :term:`fonta distribuo " +"`, ``METADATA`` en :term:`Wheel`)." #: ../source/glossary.rst:66 msgid "Core Metadata" @@ -3092,6 +4024,10 @@ msgid "" "Field`\\s it defines that describe key static attributes of a :term:" "`Distribution Package` or :term:`Installed Project`." msgstr "" +"La :ref:`specifo ` kaj la aro de :term:`Kernaj Metadatenaj " +"Kampoj ` difinitaj de ĝi, pri la ĉefaj statikaj " +"atributoj de :term:`Distribua Pako ` aŭ :term:" +"`Instalita Projekto `." #: ../source/glossary.rst:74 msgid "Core Metadata Field" @@ -3104,6 +4040,11 @@ msgid "" "the :term:`Built Metadata`. Notably, distinct from a :term:`Pyproject " "Metadata Key`." msgstr "" +"Unu ŝlosilo-valoro-paro (aŭ sinsekvo de tiaĵoj de la sama nomo, por plurfoje " +"uzebla kampo) difinita en la specifo :term:`Kernaj Metadatenoj `kaj konservita en la :term:`Konstruitaj Metadatenoj `. Notinde, diferencas de :term:`Pyproject-Metadatena Ŝlosilo " +"`." #: ../source/glossary.rst:83 msgid "Distribution Archive" @@ -3128,6 +4069,10 @@ msgid "" "to distribute a :term:`Release`. The archive file is what an end-user will " "download from the internet and install." msgstr "" +"Versiohava arĥiva dosiero enhavanta Python-ajn :term:`pakojn `, :term:`modulojn `, kaj aliajn resursajn dosierojn por " +"distribui :term:`Eldonon `. La uzanto elŝutas kaj instalas la " +"arĥivan dosieron el Interreto." #: ../source/glossary.rst:97 msgid "" @@ -3140,6 +4085,13 @@ msgid "" "\"distribution\". See :ref:`distribution-package-vs-import-package` for a " "breakdown of the differences." msgstr "" +"Distribua pako estas ofte simple nomata «pako» aŭ «distribuo», sed ĉi tiu " +"gvidilo uzas la plenan terminon tiam, kiam klareco necesas por eviti " +"konfuzon kun :term:`Importa Pako ` (kiu estas ankaŭ ofte " +"nomata «pako») aŭ alia speco de distribuo (ekz. Linux-distribuo aŭ distribuo " +"de la programlingvo Python), kiuj ofte estas simple nomataj «distribuo». " +"Vidu :ref:`distribution-package-vs-import-package` por detaloj pri la " +"diferencoj." #: ../source/glossary.rst:105 msgid "Egg" @@ -3150,8 +4102,9 @@ msgid "" "A :term:`Built Distribution` format introduced by :ref:`setuptools`, which " "has been replaced by :term:`Wheel`. For details, see :ref:`egg-format`." msgstr "" -"Formo de :term:`Konstruita Distribuo` enkondukita de :ref:`setuptools`, nun " -"anstataŭita de :term:`Wheel`. Por detaloj, vidu :ref:`egg-format`." +"Formo de :term:`Konstruita Distribuo ` enkondukita de :" +"ref:`setuptools`, nun anstataŭita de :term:`Wheel`. Por detaloj, vidu :ref:" +"`egg-format`." #: ../source/glossary.rst:111 msgid "Extension Module" @@ -3165,6 +4118,12 @@ msgid "" "file for Python extensions on Unix, a DLL (given the .pyd extension) for " "Python extensions on Windows, or a Java class file for Jython extensions." msgstr "" +":term:`Modulo ` verkita en la malaltnivela lingvo de la Python-" +"realigo: C/C++ por Python, Java por Jython. Ofte en unu dinamike ŝargebla " +"antaŭtradukita dosiero, ekz. komunobjekta (``.so``) dosiero por Python-" +"etendaĵo sur Unikso, dinamike ŝargebla biblioteko (DLL, kun la dosiersufikso " +"``.pyd``) por Python-etendaĵo sur Windows, aŭ Java-klasdosiero por Jython-" +"etendaĵo." #: ../source/glossary.rst:121 msgid "Import Package" @@ -3185,6 +4144,10 @@ msgid "" "also commonly called a \"package\". See :ref:`distribution-package-vs-import-" "package` for a breakdown of the differences." msgstr "" +"Oni ofte simple nomas importan pakon «pako», sed ĉi tiu gvidisto uzos la pli " +"longan terminon, kiam oni devas distingi ĝin de :term:`Distribua Pako " +"`, kiu ankaŭ ofte nomiĝas «pako». Vidu :ref:" +"`distribution-package-vs-import-package` por resumo de la diferencoj." #: ../source/glossary.rst:133 msgid "Installed Project" @@ -3212,36 +4175,91 @@ msgid "" "used by frameworks and toolkits which are comprised of multiple individual " "distributions." msgstr "" +"Aro de distribuoj ĉe specifitaj versioj kongruaj inter si. Tipe oni rulas " +"testaron, antaŭ ol deklari iun aron konata bona aro. La terminon ofte uzas " +"kadroj kaj ilaroj konsistantaj el multaj distribuoj." #: ../source/glossary.rst:149 -msgid "Module" -msgstr "Modulo" +msgid "License Classifier" +msgstr "Licenco-Klasigilo" #: ../source/glossary.rst:152 msgid "" -"The basic unit of code reusability in Python, existing in one of two types: :" -"term:`Pure Module`, or :term:`Extension Module`." +"A PyPI Trove classifier (as :ref:`described ` in " +"the :term:`Core Metadata` specification) which begins with ``License ::``." msgstr "" -"La baza unuo de reuzebla kodo en Python, en unu el la du jenaj tipoj: :term:" -"`Pura Modulo ` aŭ :term:`Etendaĵa Modulo `." +"Klasigilo PyPI Trove (:ref:`laŭ ` la specifo :term:" +"`Kernaj Metadatenoj `) komenciĝanta per ``License ::``." -#: ../source/glossary.rst:155 -msgid "Package Index" -msgstr "Pakindekso" +#: ../source/glossary.rst:157 +msgid "License Expression" +msgstr "Licenco-Esprimo" #: ../source/glossary.rst:158 -msgid "" +msgid "SPDX Expression" +msgstr "SPDX-Esprimo" + +#: ../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 "" +"Signoĉeno de valida SPDX-licenco-esprima sintakso, inkluzivante unu aŭ pli " +"da :term:`Licenco-Identigilo(j) `, priskribanta(j) " +"licenco(j)n de la :term:`Projekto ` kaj iliajn interrilatojn. " +"Ekzemple: ``GPL-3.0-or-later``, ``MIT AND (Apache-2.0 OR BSD-2-Clause)``" + +#: ../source/glossary.rst:169 +msgid "License Identifier" +msgstr "Licenco-Identigilo" + +#: ../source/glossary.rst:170 +msgid "SPDX Identifier" +msgstr "SPDX-Identigilo" + +#: ../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 "" +"Valida mallongforma licenco-identigilo de SPDX, originale specifita en :pep:" +"`639`. Tio inkluzivas ĉiujn validajn SPDX-identigilojn kaj la proprajn " +"signoĉenojn ``LicenseRef-[identigilo]`` konformajn al la normo SPDX. " +"Ekzemple: ``MIT``, ``GPL-3.0-only``, ``LicenseRef-Mia-Propra-Licenco``" + +#: ../source/glossary.rst:183 +msgid "Module" +msgstr "Modulo" + +#: ../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 "" +"La baza unuo de reuzebla kodo en Python, en unu el la du jenaj tipoj: :term:" +"`Pura Modulo ` aŭ :term:`Etendaĵa Modulo `." + +#: ../source/glossary.rst:189 +msgid "Package Index" +msgstr "Pakindekso" + +#: ../source/glossary.rst:192 +msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" "Deponejo de distribuoj kun TTT-fasado por aŭtomatigi serĉadon kaj uzadon de :" "term:`pakoj `." -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Unu-Projekta Indekso" -#: ../source/glossary.rst:164 +#: ../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 " @@ -3251,19 +4269,22 @@ msgstr "" "specifa :term:`Projekto ` kiel la indekso preferata aŭ postulata " "por solvi dependecojn de tiu projekto." -#: ../source/glossary.rst:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 #: ../source/guides/index-mirrors-and-caches.rst:52 msgid "Project" msgstr "Projekto" -#: ../source/glossary.rst:171 +#: ../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 "" +"Biblioteko, kadro, programeto, kromprogramo, aplikprogramo, datenaro aŭ alia " +"resurso, aŭ iu kombinaĵo de tiuj, pakotaj en :term:`Distribuon `." -#: ../source/glossary.rst:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -3271,28 +4292,40 @@ msgid "" "something that contains a :term:`pyproject.toml`, :term:`setup.py`, or :term:" "`setup.cfg` file at the root of the project source directory." msgstr "" +"Ĉar la plejparto de projektoj kreas :term:`Distribuojn ` per aŭ ``build-system`` de :pep:`518`, aŭ :ref:`distutils`, aŭ :" +"ref:`setuptools`, alia aktuala praktika difino de projekto estas iu " +"enhavanta dosieron :term:`pyproject.toml`, :term:`setup.py`, aŭ :term:`setup." +"cfg` ĉe la radiko de la projekta fonta dosierujo." -#: ../source/glossary.rst:181 +#: ../source/glossary.rst:215 msgid "" "Python projects must have unique names, which are registered on :term:`PyPI " "`. Each project will then contain one or more :" "term:`Releases `, and each release may comprise one or more :term:" "`distributions `." msgstr "" +"Python-projekto devas havi unikan nomon, registritan ĉe :term:`PyPI `. Ĉiu projekto enhavas unu aŭ plurajn :term:`Eldonojn " +"`, kaj ĉiu eldono konsistas el unu aŭ pluraj :term:`distribuoj " +"`." -#: ../source/glossary.rst:186 +#: ../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 "" +"Notu, ke ekzistas forta konvencio nomi projekton laŭ la nomo de la pako " +"importebla por ruli tiun projekton. Tamen, tio ne necesas. Eblas instali " +"distribuon de projekto «foo», kiu provizas pakon importeblan nur kiel «bar»." -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "Projekta Radika Dosierujo" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." @@ -3300,22 +4333,26 @@ msgstr "" "La dosiersistema dosierujo, en kiu troviĝas la term:`fontarbo ` de :term:`projekto `." -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "Projekta Fontarbo" -#: ../source/glossary.rst:201 +#: ../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 "" +"La surdiska formo de :term:`Projekto ` uzata por evoluigado, " +"enhavanta la krudan fontkodon antaŭ pakado en :term:`Fontan Distribuon " +"` aŭ :term:`Konstruitan Distribuon " +"`." -#: ../source/glossary.rst:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "Projektaj Fontaj Metadatenoj" -#: ../source/glossary.rst:210 +#: ../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 " @@ -3325,11 +4362,11 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Pura Modulo" -#: ../source/glossary.rst:223 +#: ../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)." @@ -3337,11 +4374,11 @@ msgstr "" ":term:`Modulo ` verkita en Python kaj en unu dosiero ``.py`` (kaj " "eble asociitaj dosieroj ``.pyc`` kaj/aŭ ``.pyo``)." -#: ../source/glossary.rst:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "Pyproject-Metadatenoj" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -3350,11 +4387,11 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "Pyproject-Metadatena Ŝlosilo" -#: ../source/glossary.rst:240 +#: ../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 " @@ -3364,22 +4401,22 @@ msgstr "" "parto de la :term:`Pyproject-Metadatenoj `. Notindas, ke " "ĝi ne estas :term:`Kerna Metadatena Kampo `." -#: ../source/glossary.rst:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "Pyproject-Metadatena Subŝlosilo" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" "Duanivela TOML-ŝlosilo sub tabelo-valora :term:`Pyproject-Metadatena Ŝlosilo " "`." -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "Python-Pakada Aŭtoritato (PyPA)" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3395,11 +4432,11 @@ msgstr "" "mail.python.org/mailman3/lists/distutils-sig.python.org/>`_ kaj `la forumo " "Discourse por Python `__." -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "Python-Pakindekso (PyPI)" -#: ../source/glossary.rst:265 +#: ../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 " @@ -3409,36 +4446,36 @@ msgstr "" "por la Python-komunumo. Ĉiu Python-programisto povas uzi ĝin por uzi kaj " "distribui siajn distribuojn." -#: ../source/glossary.rst:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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 "" "`pypi.org `_ estas la retadreso de la :term:`Python-" -"Pakindekso (PyPI)`. Ĝi anstataŭis la malnovan retadreson, ``pypi.python." -"org``, en 2017. Ĝi funkciiĝas per :ref:`warehouse`." +"Pakindekso (PyPI) `. Ĝi anstataŭis la malnovan " +"retadreson, ``pypi.python.org``, en 2017. Ĝi funkciiĝas per :ref:`warehouse`." -#: ../source/glossary.rst:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" "La ilo-sendependa :term:`projekta ` specifa dosiero. Difinita en :" "pep:`518`." -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "Eldono" -#: ../source/glossary.rst:283 +#: ../source/glossary.rst:317 msgid "" "A snapshot of a :term:`Project` at a particular point in time, denoted by a " "version identifier." @@ -3446,19 +4483,23 @@ msgstr "" "Kopio de :term:`Projekto ` ĉe iu punkto en tempo, indikita de " "versia identigilo." -#: ../source/glossary.rst:286 +#: ../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 "" +"Eldonado de versio povas necesigi publikigon de pluraj :term:`Distribuoj " +"`. Ekzemple, se oni eldonus version 1.0 de iu " +"projekto, oni povus disponigi ĝin kiel kaj fontan distribuon kaj Windows-" +"instalilan dosierformon." -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "Postulo" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3466,24 +4507,33 @@ msgid "" "considered a \"requirement\". For more information, see the :ref:`pip:pip " "install` reference." msgstr "" +"Specifo de instalota :term:`pako `. :ref:`pip`, la " +"instalilo rekomendata de :term:`PyPA `, " +"permesas diversajn formojn de «postuloj». Por pliaj detaloj, vidu :ref:`pip:" +"pip install`." -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "Postulo-Specifilo" -#: ../source/glossary.rst:303 +#: ../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 "" +"Tekstoformo uzata de :ref:`pip` por instali pakojn el :term:`pakindekso " +"`. Por EBNF-diagramo de la tekstoformo, vidu :ref:`dependency-" +"specifiers`. Ekzemple, ``foo>=1.3`` estas postulo-specifilo, en kiu ``foo`` " +"estas la nomo de la projekto kaj ``>=1.3`` estas la :term:`versio-specifilo " +"`" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "Postulo-Dosiero" -#: ../source/glossary.rst:311 +#: ../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 " @@ -3493,17 +4543,47 @@ msgstr "" "ref:`pip`. Por plian informoj, vidu la dokumentaron de :ref:`pip` pri :ref:" "`Postulo-Dosieroj `." -#: ../source/glossary.rst:315 +#: ../source/glossary.rst:349 +msgid "Root License Directory" +msgstr "Radika Licenco-Dosierujo" + +#: ../source/glossary.rst:350 +msgid "License Directory" +msgstr "Licenco-Dosierujo" + +#: ../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 "" +"La dosierujo, en kiu licenco-dosieroj troviĝas, en :term:`Projekta Fontarbo " +"`, :term:`Distribua Arĥivo ` aŭ :" +"term:`Instalita Projekto `. Por :term:`Projekta Fontarbo " +"` aŭ :term:`Fonta Distribuo `, ĝi estas la :term:`Projekta Radika Dosierujo `. Por :term:`Konstruita Distribuo ` aŭ :term:" +"`Instalita Projekto `, ĝi estas la dosierujo :file:`.dist-" +"info/licenses/` de la wheel-arĥivo aŭ projekta dosierujo respektive. Ankaŭ, " +"la radika dosierujo, al kiu estas relativaj la dosierlokoj en la :term:" +"`Kerna Metadatena Kampo ` ``License-File``." + +#: ../source/glossary.rst:366 #: ../source/guides/distributing-packages-using-setuptools.rst:59 msgid "setup.py" msgstr "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." @@ -3511,22 +4591,25 @@ msgstr "" "La projektaj specifaj dosieroj por :ref:`distutils` kaj :ref:`setuptools`. " "Vidu ankaŭ :term:`pyproject.toml`." -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "Fonta Arĥivo" -#: ../source/glossary.rst:325 +#: ../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 "" +"Arĥivo enhavanta la krudan fontkodon de :term:`Eldono `, antaŭ la " +"kreado de :term:`Fonta Distribuo ` aŭ :" +"term:`Konstruita Distribuo `." -#: ../source/glossary.rst:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "Fonta Distribuo (aŭ «sdist»)" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3535,21 +4618,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "Sistema Pako" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." msgstr "Pako en formo indiĝena al la mastruma sistemo, ekz. rpm aŭ dpkg." -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "Versio-Specifilo" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3558,39 +4641,47 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "Virtuala Medio" -#: ../source/glossary.rst:355 +#: ../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 "" +"Izolita Python-medio, en kiu oni povas instali pakojn por iu programo, " +"anstataŭ tutsistema instalado. Por pliaj informoj, vidu :ref:`Krei kaj uzi " +"Virtualan Medion `." -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "Wheel-Formo" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "Wheel" -#: ../source/glossary.rst:364 +#: ../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 "" +"La norma dosierformo por :term:`Konstruita Distribuo `, " +"origine enkondukita de :pep:`427` kaj difinita de la normo :ref:`binary-" +"distribution-format`. Vidu :ref:`package-formats` por pliaj informoj. Ne " +"konfuzu ĝin kun ĝia referenca realigo, :term:`la Projekto Wheel `." -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "Wheel-Projekto" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." @@ -3598,17 +4689,20 @@ msgstr "" "La referenca realigo far PyPA de la :term:`Wheel-Formo `; " "vidu :ref:`wheel`." -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" -msgstr "" +msgstr "Aro de Laboro" -#: ../source/glossary.rst:379 +#: ../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 "" +"Kolekto de importeblaj :term:`distribuoj `. Tiuj estas " +"la distribuoj en la variablo `sys.path`. Maksimume unu :term:`Distribuo " +"` por iu projekto povas ĉeesti en aro de laboro." #: ../source/guides/analyzing-pypi-package-downloads.rst:5 msgid "Analyzing PyPI package downloads" @@ -3621,6 +4715,10 @@ msgid "" "example, you can use it to discover the distribution of Python versions used " "to download a package." msgstr "" +"Ĉi tiu paragrafo priskribas kiel uzi la publikan statistikan datenaron pri " +"elŝutoj el PyPI por lerni pli pri elŝutoj de pako (aŭ pakoj) ĉe PyPI. " +"Ekzemple, oni povas uzi ĝin por malkovri la distribuojn de Python-versioj " +"uzitaj por elŝuti pakon." #: ../source/guides/analyzing-pypi-package-downloads.rst:14 #: ../source/guides/supporting-windows-using-appveyor.rst:17 @@ -3638,6 +4736,10 @@ msgid "" "which are heavily cached, would require invalidating the cache more often, " "and reduce the overall effectiveness of the cache." msgstr "" +"**Ne kongrua kun Enhavo-Distribua Reto (CDN):** Statistikoj pri elŝutoj " +"ŝanĝadas. Inkluzivado de tiuj en projekto-paĝoj tre enkaŝmemorigitaj " +"postulus oftan eksvalidigon de la kaŝmemoro kaj igus la kaŝmemoron malpli " +"efika." #: ../source/guides/analyzing-pypi-package-downloads.rst:23 msgid "" @@ -3682,6 +4784,8 @@ msgid "" "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 "" +"**Ne tre utila:** Ne veras, ke ju pli elŝutata projekto estas, des pli bona " +"ĝi estas!" #: ../source/guides/analyzing-pypi-package-downloads.rst:37 msgid "" @@ -3689,6 +4793,8 @@ msgid "" "required to make it work are high, it has been not an effective use of " "limited resources." msgstr "" +"Resume, ĉar la valoro estas malalta pro diversaj kialoj, kaj la kostoj estas " +"altaj, tio ne estas efika uzo de limigitaj resursoj." #: ../source/guides/analyzing-pypi-package-downloads.rst:42 msgid "Public dataset" @@ -3700,6 +4806,9 @@ msgid "" "cloud-function/>`__ streams download logs from PyPI to `Google BigQuery`_ " "[#]_, where they are stored as a public dataset." msgstr "" +"Alternative, `la projekto Linehaul `__ transigas elŝutajn protokolojn de PyPI al `Google BigQuery`_ " +"[#]_, konservitajn kiel publikan datenaron." #: ../source/guides/analyzing-pypi-package-downloads.rst:49 msgid "Getting set up" @@ -3714,6 +4823,13 @@ msgid "" "`__" msgstr "" +"Por uzi `Google BigQuery`_ por serĉi `la publikan statistikan datenaron pri " +"elŝutoj el PyPI `_, oni bezonas " +"havi konton ĉe Google kaj ŝalti la BigQuery API por projekto ĉe Google Cloud " +"Platform. Oni rajtas uzi maksimume po 1 terabajton da informpetoj en ĉiu " +"monato `uzante la senkostan tavolon de BigQuery sen kreditkarto `__" #: ../source/guides/analyzing-pypi-package-downloads.rst:57 msgid "Navigate to the `BigQuery web UI`_." @@ -3753,6 +4869,11 @@ msgid "" "schema `__ include:" msgstr "" +"Linehaul skribas eron en tabelon ``bigquery-public-data.pypi." +"file_downloads`` por ĉiu elŝuto. La tabelo enhavas informojn pri la elŝutita " +"dosiero kaj la maniero de elŝuto. Jen kelkaj utilaj kolumnoj en la `tabela " +"skemo `__:" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 msgid "Column" @@ -3767,7 +4888,7 @@ msgstr "Priskribo" #: ../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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "Ekzemploj" @@ -3850,6 +4971,9 @@ msgid "" "cost of queries. These example queries analyze downloads from recent history " "by filtering on the ``timestamp`` column." msgstr "" +"Notu, ke la vicoj estas en dispartigita tabelo, kio limigas la koston de " +"informpetoj. Jen ekzemplaj informpetoj analizantaj lastatempajn elŝutojn " +"filtrante la kolumnon ``timestamp``." #: ../source/guides/analyzing-pypi-package-downloads.rst:101 msgid "Counting package downloads" @@ -4025,6 +5149,10 @@ msgid "" "release has been deleted from PyPI. The metadata table includes the ``path`` " "column, which includes the hash and artifact filename." msgstr "" +"Fojfoje utilas akiri absolutan hiperligon al elŝutebla artefakto ĉe PyPI per " +"la haketaĵo, ekz. se speciala projekto aŭ eldono estis forviŝita de PyPI. La " +"metadatena tabelo enhavas la kolumnon ``path``, kiu inkluzivas la haketaĵon " +"kaj la artefaktan dosiernomon." #: ../source/guides/analyzing-pypi-package-downloads.rst:229 msgid "" @@ -4128,6 +5256,9 @@ msgid "" "programmatically via the BigQuery API and the `google-cloud-bigquery`_ " "project, the official Python client library for BigQuery." msgstr "" +"Oni ankaŭ povas programe akiri la publikan statistikan datenaron pri elŝutoj " +"el PyPI per la API de BigQuery kaj la projekto `google-cloud-bigquery`_, la " +"oficiala klienta Python-biblioteko por BigQuery." #: ../source/guides/analyzing-pypi-package-downloads.rst:303 msgid "``pypinfo``" @@ -4139,6 +5270,9 @@ msgid "" "can generate several useful queries. For example, you can query the total " "number of download for a package with the command ``pypinfo package_name``." msgstr "" +"`pypinfo`_ estas komandlinia ilo por aliri al la datenaro, kapabla generi " +"plurajn utilajn informpetojn. Ekzemple, oni povas pridemandi la totalan " +"nombron de elŝutoj de pako per la komando ``pypinfo paknomo``." #: ../source/guides/analyzing-pypi-package-downloads.rst:309 msgid "Install `pypinfo`_ using pip." @@ -4160,7 +5294,7 @@ msgstr "" "`Pandas`_." #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "Referencoj" @@ -4191,6 +5325,10 @@ msgid "" "packages can be separately distributed, your application or library may want " "to automatically **discover** all of the plugins available." msgstr "" +"Ofte dum verkado de programo aŭ biblioteko en Python, oni volas havi la " +"kapablon adapti aŭ aldoni pliajn funkciojn per **kromprogramo**. Ĉar Python-" +"pako estas aparte distribuata, la programo aŭ biblioteko eble volas aŭtomate " +"**malkovri** ĉiujn haveblajn kromprogramojn." #: ../source/guides/creating-and-discovering-plugins.rst:10 msgid "There are three major approaches to doing automatic plugin discovery:" @@ -4235,6 +5373,9 @@ msgid "" "Package Index's :ref:`simple repository API ` for all " "packages that conform to your naming convention." msgstr "" +"Uzado de nomada konvencio por kromprogramoj permesas serĉi la :ref:`simplan " +"deponejan API-on ` de la Python-Pakindekso por ĉiuj " +"pakoj observantaj la nomandan konvencion." #: ../source/guides/creating-and-discovering-plugins.rst:58 msgid "Using namespace packages" @@ -4259,6 +5400,10 @@ msgid "" "``myapp.plugins.a`` and ``myapp.plugins.b`` then ``discovered_plugins`` in " "this case would be:" msgstr "" +"Specifado de ``myapp.plugins.__path__`` al :func:`~pkgutil.iter_modules` " +"kaŭzas serĉadon de moduloj rekte sub tiu nomspaco. Ekzemple, se oni instalus " +"distribuojn provizante la modulojn ``myapp.plugins.a`` kaj " +"``myapp.plugins.b``, do ``discovered_plugins`` estus la jeno:" #: ../source/guides/creating-and-discovering-plugins.rst:100 msgid "" @@ -4312,6 +5457,9 @@ msgid "" "plugin. Another package supporting this kind of plugin can use the metadata " "to discover that plugin." msgstr "" +"Pako povas enhavi metadatenojn pri kromprogramoj per :ref:`entry-points`. " +"Per tio, pako anoncas, ke ĝi enhavas ian kromprogramon. Alia pako subtenanta " +"tian kromprogramon povas uzi la metadatenojn por trovi tiun kromprogramon." #: ../source/guides/creating-and-discovering-plugins.rst:128 msgid "" @@ -4327,6 +5475,9 @@ msgid "" "func:`importlib.metadata.entry_points` (or the backport_ " "``importlib_metadata >= 3.6`` for Python 3.6-3.9):" msgstr "" +"Do oni povas serĉi kaj ŝargi ĉiujn registritajn enirpunktojn per :func:" +"`importlib.metadata.entry_points` (aŭ la `retroporto `_ " +"``importlib_metadata >= 3.6`` por Python 3.6 – 3.9):" #: ../source/guides/creating-and-discovering-plugins.rst:151 msgid "" @@ -4350,6 +5501,9 @@ msgid "" "has a lot of options. It's recommended to read over the entire section on :" "doc:`entry points ` ." msgstr "" +"La specifo de ``entry_point`` en :file:`setup.py` estas fleksebla kaj opcio-" +"plena. Estas rekomendate tralegi la paragrafon pri :doc:`enirpunktoj " +"` ." #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" @@ -4357,6 +5511,9 @@ msgid "" "library/importlib.metadata>`, most packaging tools other than setuptools " "provide support for defining entry points." msgstr "" +"Ĉar ĉi tiu specifo estas parto de la :doc:`norma biblioteko `, multaj iloj krom setuptools subtenas difinadon de " +"enirpunktoj." #: ../source/guides/creating-command-line-tools.rst:5 msgid "Creating and packaging command-line tools" @@ -4381,6 +5538,9 @@ msgid "" "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 "" +"Unue, kreu fontarbon por la :term:`projekto `. Kiel ekzemplo, ni " +"verkos simplan ilon eligantan tekstan saluton dependantan de komandliniaj " +"argumentoj." #: ../source/guides/creating-command-line-tools.rst:17 #: ../source/guides/tool-recommendations.rst:45 @@ -4401,6 +5561,9 @@ msgid "" "and in the end be alike this file tree, with the top-level folder and " "package name ``greetings``:" msgstr "" +"Ĉi tiu projekto sekvos la :ref:`src-aranĝon ` kaj " +"similas la jenan dosierarbon, kun supranivela dosierujo (kaj paknomo) nomita " +"``greetings``:" #: ../source/guides/creating-command-line-tools.rst:33 msgid "" @@ -4416,6 +5579,9 @@ msgid "" "greeting to output is constructed. Now, construct the command-line interface " "to provision it with the same, which is done in :file:`cli.py`:" msgstr "" +"La ĉi-supra funkcio ricevas plurajn ŝlosilvortajn argumentojn pri konstruado " +"de la saluto. Nun, konstruu la komandlinian fasadon kun la samaj argumentoj " +"en :file:`cli.py`:" #: ../source/guides/creating-command-line-tools.rst:91 msgid "" @@ -4428,6 +5594,14 @@ msgid "" "possible to create CLI interfaces based solely on docstrings; advanced users " "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" +"La komandlinia fasado estas konstruita per typer_, kiu estas facile uzebla " +"komandlinia argumentanalizilo uzante tipo-konsiletoj de Python. Ĝi provizas " +"aŭtomatan kompletigon kaj bone aranĝitan komandlinian helpon senmodife. Alia " +"opcio estus :py:mod:`argparse`, kiu estas komandlinia argumentanalizilo " +"inkluzivita en la norma biblioteko de Python. Ĝi sufiĉas por la plejparto de " +"bezonoj, sed postulas multe da kodo, ofte en ``cli.py``, por bona funkciado. " +"Alterntaive, docopt_ kreas komandlinian fasadon nur per docstring; altnivela " +"uzanto uzu click_ (sur kiu ``typer`` estas bazita)." #: ../source/guides/creating-command-line-tools.rst:97 msgid "" @@ -4456,6 +5630,10 @@ msgid "" "a certain hack could be placed in this file; read more at :ref:`running-cli-" "from-source-src-layout`." msgstr "" +"Por ebligi uzadon de la komandlinia fasado rekte de la :term:`fontarbo " +"`, ekzemple kiel ``python src/greetings``, oni povas " +"meti trukon en tiun dosieron; legu pri tio en :ref:`running-cli-from-source-" +"src-layout`." #: ../source/guides/creating-command-line-tools.rst:117 msgid "``pyproject.toml``" @@ -4469,6 +5647,11 @@ msgid "" "`writing-pyproject-toml`, adding a dependency on ``typer`` (this tutorial " "uses version *0.12.3*)." msgstr "" +"La projektaj :term:`metadatenoj ` troviĝas en :term:" +"`pyproject.toml`. La :term:`metadatenaj ŝlosiloj pyproject ` kaj la tabelo ``[build-system]`` estu laŭ :ref:`writing-" +"pyproject-toml`, kun dependeco sur ``typer`` (ĉi tiu lernilo uzas la version " +"*0.12.3*)." #: ../source/guides/creating-command-line-tools.rst:122 msgid "" @@ -4477,6 +5660,10 @@ msgid "" "`console_scripts`) needs to be added as a :term:`subkey `:" msgstr "" +"Por ke la projekto estu rekonebla kiel komandlinia ilo, krome la :ref:" +"`enirpunkto ` ``console_scripts`` (vidu :ref:" +"`console_scripts`) devas esti aldonita kiel :term:`subŝlosilo `:" #: ../source/guides/creating-command-line-tools.rst:129 msgid "" @@ -4503,6 +5690,8 @@ msgid "" "This will expose the executable script we defined as an entry point and make " "the command ``greet`` available. Let's test it:" msgstr "" +"Tio difinos la ruleblan programon kiel enirpunkton kaj disponigos la " +"komandon ``greet``. Ni elprovu:" #: ../source/guides/creating-command-line-tools.rst:155 msgid "" @@ -4510,6 +5699,9 @@ msgid "" "program's usage by calling it with the ``--help`` option, or configure " "completions via the ``--install-completion`` option." msgstr "" +"Ĉar ĉi tiu ekzemplo uzas ``typer``, oni povas nun superrigardi la opciojn de " +"la programo per la flago ``--help`` aŭ agordi kompletigadon per la flago ``--" +"install-completion``." #: ../source/guides/creating-command-line-tools.rst:158 msgid "" @@ -4525,6 +5717,9 @@ msgid "" "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 "" +"Tamen, tiu sintakso estas praktike netaŭga: ĉar la nomo de la enirpunkto " +"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 msgid "" @@ -4532,6 +5727,8 @@ msgid "" "an entry point specific to ``pipx run``. The same can be defined as follows " "in :file:`pyproject.toml`:" 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 msgid "" @@ -4539,6 +5736,9 @@ msgid "" "will pick up the executable script as the default one and run it, which " "makes this command possible:" msgstr "" +"Dank’ al tiu enirpunkto (kiu *devas* kongrui kun la nomo de la pako), " +"``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 msgid "Conclusion" @@ -4582,6 +5782,9 @@ msgid "" "development as a whole. For example, it does not provide guidance or tool " "recommendations for version control, documentation, or testing." msgstr "" +"Ĉi tiu paragrafo *ne* celas rekomendi pri ĉiaj aspektoj de Python-" +"projektoj. Ekzemple, ĝi ne rekomendas ion ajn aŭ iun ajn ilon pri versio-" +"kontrolado, dokumentaro aŭ testado." #: ../source/guides/distributing-packages-using-setuptools.rst:20 msgid "" @@ -4656,6 +5859,8 @@ msgid "" "packaging tasks. To get a listing of available commands, run ``python3 setup." "py --help-commands``." msgstr "" +"Ĝi estas la komandlinian fasadon por rulado de diversaj komandoj pri pakado. " +"Por listo de haveblaj komandoj, rulu ``python3 setup.py --help-commands``." #: ../source/guides/distributing-packages-using-setuptools.rst:82 msgid "" @@ -4683,6 +5888,12 @@ msgid "" "projects/markdown/>`_ are supported as well (look at ``setup()``'s :ref:" "`long_description_content_type ` argument)." msgstr "" +"Ĉiu projekto enhavo readme-dosieron pri la celoj de la projekto. La plej " +"ofta dosierformo estas `reStructuredText `_ kun dosiersufikso ``.rst``, sed tio ne estas deviga. Pluraj " +"variantoj de `Markdown `_ " +"estas ankaŭ subtenataj (vidu la argumenton :ref:" +"`long_description_content_type ` de ``setup()``)." #: ../source/guides/distributing-packages-using-setuptools.rst:98 msgid "" @@ -4724,6 +5935,10 @@ msgid "" "its manifest file, since all the necessary files have been included by :ref:" "`setuptools` 43.0.0 and newer." msgstr "" +"Tamen, oni ne devas uzi :file:`MANIFEST.in`. Ekzemple, la `ekzempla projekto " +"de PyPA `_ ne plu havas :file:" +"`MANIFEST.in`, ĉar ĉiaj necesaj dosieroj inkluziviĝas en :ref:`setuptools` " +"ekde versio 43.0.0." #: ../source/guides/distributing-packages-using-setuptools.rst:123 msgid "" @@ -4743,6 +5958,11 @@ msgid "" "as `GitHub's Choose a License `_ or consult a " "lawyer." msgstr "" +"Ĉiu pako havu licenco-dosieron pri la kondiĉoj de distribuado. En multaj " +"jurisdikcioj, pako sen eksplicita licenco ne estas uzebla nek distribuebla " +"far iu alia ol la kopirajto-posedanto. Se vi ne certas pri la licenco, vidu " +"`Choose a License `_ de GitHub, aŭ konsultu " +"advokaton." #: ../source/guides/distributing-packages-using-setuptools.rst:134 msgid "" @@ -4764,6 +5984,9 @@ msgid "" "Python modules and packages under a single top-level package that has the " "same :ref:`name ` as your project, or something very close." msgstr "" +"Tamen tio ne necesas, la ofta praktiko estas inkluzivi Python-modulojn kaj " +"pakojn sub unu supranivela pako, kies nomo estas sama kiel (aŭ tre proksima " +"al) la :ref:`nomo ` de via projekto." #: ../source/guides/distributing-packages-using-setuptools.rst:145 msgid "" @@ -4785,6 +6008,9 @@ msgid "" "contains a global ``setup()`` function. The keyword arguments to this " "function are how specific details of your project are defined." msgstr "" +"Kiel menciite ĉi-supre, la ĉeftrajto de :file:`setup.py` estas, ke ĝi " +"enhavas mallokan funkcion ``setup()``. La ŝlosilvortaj argumentoj de tiu " +"funkcio difinas la detalojn de la projekto." #: ../source/guides/distributing-packages-using-setuptools.rst:159 msgid "" @@ -4792,6 +6018,9 @@ msgid "" "elsewhere. The full list can be found :doc:`in the setuptools documentation " "`." msgstr "" +"Kelkaj estas provizore klarigitaj ĉi-sube, ĝis kiam la informoj moviĝas " +"aliloken. La plena listo ĉeestas :doc:`ĉe la dokumentaro de setuptools " +"`." #: ../source/guides/distributing-packages-using-setuptools.rst:163 msgid "" @@ -4838,7 +6067,7 @@ msgid "" msgstr "" "Se via projekto enhavas ajnan unu-dosieran Python-modulon ne en pako, agordu " "``py_modules`` al listo de la nomoj de tiaj moduloj (sen la dosiersufikso ``." -"py``) por sciigi :ref:` setuptools`." +"py``) por sciigi :ref:`setuptools`." #: ../source/guides/distributing-packages-using-setuptools.rst:204 #, fuzzy @@ -4851,6 +6080,9 @@ msgid "" "minimally needs to run. When the project is installed by :ref:`pip`, this is " "the specification that is used to install its dependencies." msgstr "" +"Oni uzu ``install_requires`` por specifi la minimumajn dependecojn de " +"projekto por rulado. Kiam :ref:`pip` instalas projekton, ĝi uzas tion por " +"instali dependaĵojn." #: ../source/guides/distributing-packages-using-setuptools.rst:214 msgid "" @@ -4872,6 +6104,10 @@ msgid "" "be of interest to programmers using the package. These files are called " "\"package data\"." msgstr "" +"Ofte oni devas instali pliajn dosierojn en :term:`pakon `. " +"Tiaj dosieroj estas ofte datenoj rilataj al la kodo de la pako, aŭ tekstoj " +"enhavantaj dokumentaron por programistoj uzantaj la pakon. Tiaj dosieroj " +"nomiĝas «pakaj datenoj»." #: ../source/guides/distributing-packages-using-setuptools.rst:235 msgid "" @@ -4879,6 +6115,9 @@ msgid "" "names that should be copied into the package. The paths are interpreted as " "relative to the directory containing the package." msgstr "" +"La valoro devas esti mapigo de paknomoj al listoj de relativaj dosierlokoj " +"kopiotaj en la pakojn. Dosierloko estas relativa al la dosierujo enhavanta " +"la pakon." #: ../source/guides/distributing-packages-using-setuptools.rst:239 msgid "" @@ -4929,9 +6168,13 @@ msgid "" "Alternatively, if you must use ``python setup.py``, then you need to pass " "the ``--old-and-unmanageable`` option." msgstr "" +"Dum instalado de pako kiel egg, ``data_files`` ne estas subtenata. Do, se " +"projekto uzas :ref:`setuptools`, oni devas uzi ``pip`` por instali ĝin. " +"Alternative, se oni devas uzi ``python setup.py``, oni devas uzi la flagon " +"``--old-and-unmanageable``." #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 #, fuzzy msgid "``scripts``" msgstr "``description``" @@ -4943,6 +6186,10 @@ msgid "" "the recommended approach to achieve cross-platform compatibility is to use :" "ref:`console_scripts` entry points (see below)." msgstr "" +"Kvankam ``setup()`` subtenas ŝlosilvorton :ref:`scripts ` por antaŭfarita instalota programeto, la " +"rekomendata metodo por interplatforma kongrueco estas uzi enirpunktojn :ref:" +"`console_scripts` (vidu ĉi-sube)." #: ../source/guides/distributing-packages-using-setuptools.rst:291 msgid "Choosing a versioning scheme" @@ -4990,6 +6237,12 @@ msgid "" "declared with ``console_scripts``. Dependencies will be installed in the " "usual, non-editable mode." msgstr "" +"La komandlinia flago ``-e`` de pip estas mallongigo de ``--editable``, kaj " +"``.`` signifas la aktualan labordosierujon. Tial kune tio signifas instali " +"la aktualan dosierujon (t.e. via projekto) en modifebla reĝimo. Tio ankaŭ " +"instalos ajnajn dependaĵojn deklaritajn per ``install_requires`` kaj ajnajn " +"programetojn deklaritajn per ``console_scripts``. Dependaĵoj instaliĝos en " +"la ordinara nemodifebla reĝimo." #: ../source/guides/distributing-packages-using-setuptools.rst:321 msgid "" @@ -4998,6 +6251,10 @@ msgid "" "want \"bar\" installed from VCS in editable mode, then you could construct a " "requirements file like so::" msgstr "" +"Oni eble volas ankaŭ instali kelkajn dependaĵon en modifebla reĝimo. " +"Ekzemple, se onia projekto postulus «foo» kaj «bar», kaj oni volus instali " +"«bar» el versikontrola sistemo en modifebla reĝimo, oni uzus la jenan " +"postulo-dosieron::" #: ../source/guides/distributing-packages-using-setuptools.rst:329 msgid "" @@ -5015,6 +6272,9 @@ msgid "" "mode, the requirements file should look like this, with the local paths at " "the top of the file::" msgstr "" +"Tamen, se vi volas instali «bar» el loka dosierujo en modifebla reĝimo, la " +"postulo-dosiero estu jene, kun la lokaj dosierlokoj ĉe la supro de la " +"dosiero::" #: ../source/guides/distributing-packages-using-setuptools.rst:338 msgid "" @@ -5049,6 +6309,10 @@ msgid "" "`Distribution ` (aka \":term:`Package `\") for your project." msgstr "" +"Por igi vian projekton instalebla ĉe :term:`Pakindekso ` " +"kiel :term:`PyPI `, vi kreu :term:`Distribuon " +"` (ankaŭ konatan kiel «:term:`pakon `») por via projekto." #: ../source/guides/distributing-packages-using-setuptools.rst:363 msgid "" @@ -5116,6 +6380,8 @@ msgid "" "you should create what's called a *Universal Wheel* by adding the following " "to your :file:`setup.cfg` file:" msgstr "" +"Se via projekto ankaŭ subtenas Python 2 *kaj* ne enhavas C-etendaĵon, vi " +"kreu *Universalan Wheel* aldonante la jenon al la dosiero :file:`setup.cfg`:" #: ../source/guides/distributing-packages-using-setuptools.rst:428 msgid "" @@ -5178,6 +6444,10 @@ msgid "" "build a wheel that's named such that it's only usable on the platform that " "it was built on. For details on the naming of wheel files, see :pep:`425`." msgstr "" +"La pako ``wheel`` detektos, ke la kodo ne konsistas sole el Python, kaj " +"konstruos wheel nomitan tiel, ke ĝi estos nur uzebla sur la platformo, sur " +"kiu ĝi estis konstruita. Por detaloj pri la nomado de wheel-dosiero, vidu :" +"pep:`425`." #: ../source/guides/distributing-packages-using-setuptools.rst:490 msgid "" @@ -5185,6 +6455,9 @@ msgid "" "platform wheels for Windows, macOS, and the multi-distro ``manylinux*`` ABI. " "Details of the latter are defined in :pep:`513`." msgstr "" +":term:`PyPI ` aktuale subtenas alŝutadon de " +"platforma wheel por Windows, macOS, kaj la ABI ``manylinux*`` por pluraj " +"distribuoj. :pep:`513` difinas la detalojn pri ``manylinux*``." #: ../source/guides/distributing-packages-using-setuptools.rst:498 msgid "Uploading your Project to PyPI" @@ -5196,6 +6469,9 @@ msgid "" "`` was created under your project's root directory. That's where you'll find " "your distribution file(s) to upload." msgstr "" +"Kiam vi rulis la komandon por krei vian distribuon, kreiĝis nova dosierujo " +"``dist/`` sub la radika dosierujo de via projekto. Tie vi troviĝas la " +"alŝutota(j)n distribua(j)n dosiero(j)n." #: ../source/guides/distributing-packages-using-setuptools.rst:504 msgid "" @@ -5212,6 +6488,9 @@ msgid "" "basis. See :ref:`using-test-pypi` on how to setup your configuration in " "order to use it." msgstr "" +"Antaŭ ol eldoni al la ĉefdeponejo PyPI, vi eble volas ekzerci vin per la " +"`Prova PyPI `_, kiu fojfoje forviŝiĝas. Vidu :ref:" +"`using-test-pypi` pri la agordoj por uzi ĝin." #: ../source/guides/distributing-packages-using-setuptools.rst:514 msgid "" @@ -5221,6 +6500,11 @@ msgid "" "HTTP or unverified HTTPS connection on some Python versions, allowing your " "username and password to be intercepted during transmission." msgstr "" +"Aliaj dokumentoj kelkfoje mencias uzi ``python setup.py register`` kaj " +"``python setup.py upload``. Tiuj manieroj de registrado kaj alŝutado de pako " +"estas **malrekomendegata**, ĉar ili uzas neĉifritan HTTP-konekton aŭ " +"nekonfirmitan HTTPS-konekton sur kelkaj versioj de Python, permesante " +"ŝtelado de viaj salutnomo kaj pasvorto dum transsendado." #: ../source/guides/distributing-packages-using-setuptools.rst:520 msgid "" @@ -5231,6 +6515,12 @@ msgid "" "long descriptions provided in :file:`setup.py` are valid. You can do this " "by running :std:doc:`twine check ` on your package files:" msgstr "" +"La sintaksanalizilo por restructuredText uzata ĉe PyPI **ne** estas Sphinx! " +"Krome, por sekureco de ĉiuj uzantoj, kelkaj retadresoj kaj direktivoj estas " +"malpermesataj aŭ forigitaj (ekzemple, la direktivo ``.. raw::``). **Antaŭ** " +"ol alŝuti la distribuon, oni kontrolu, ĉu la mallonga kaj longa priskriboj " +"en :file:`setup.py` validas. Oni faras tion rulante :std:doc:`twine check " +"` pri la pakaj dosieroj:" #: ../source/guides/distributing-packages-using-setuptools.rst:533 msgid "Create an account" @@ -5270,7 +6560,7 @@ msgid "" "see that token again.**" msgstr "" "**Ne fermu la paĝon, ĝis vi kopiis kaj konservis la ĵetonon – vi ne vidos " -"tiun ĵetonon denove. **" +"tiun ĵetonon denove.**" #: ../source/guides/distributing-packages-using-setuptools.rst:549 msgid "" @@ -5311,12 +6601,17 @@ msgid "" "the project already exists on PyPI - if it doesn't exist yet, it will be " "automatically created when the first release is uploaded." msgstr "" +"La procedo por alŝutado de eldono estas sama, ĉu aŭ ne la projekto jam " +"ekzistas ĉe PyPI. Se ĝi ankoraŭ ne ekzistas, ĝi estas aŭtomate kreota dum " +"alŝutado de la unua eldono." #: ../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 "" +"Por la dua kaj sekvaj eldonoj, PyPI nur postulas, ke la versia numero de la " +"nova eldono diferencu de ajnaj antaŭaj versioj." #: ../source/guides/distributing-packages-using-setuptools.rst:582 msgid "" @@ -5325,6 +6620,9 @@ msgid "" "the name of your project that you uploaded. It may take a minute or two for " "your project to appear on the site." msgstr "" +"Oni povas kontroli, ĉu pako estis sukcese alŝutita, vizitante la retadreson " +"``https://pypi.org/project/``, en kiu ```` estas la nomo " +"de la alŝutita projekto. Eble oni devas atendi unu minuton aŭ du." #: ../source/guides/distributing-packages-using-setuptools.rst:589 #: ../source/tutorials/installing-packages.rst:670 @@ -5333,6 +6631,9 @@ msgid "" "ref:`pip` is currently considering changing this by `making user installs " "the default behavior `_." msgstr "" +"Depende de la platformo, tio eble postulas rajtojn de ĉefuzanto aŭ " +"Administranto. :ref:`pip` estas konsideranta ŝanĝi tion, `igante instalon " +"por uzanto la implicita konduto `_." #: ../source/guides/dropping-older-python-versions.rst:5 msgid "Dropping support for older Python versions" @@ -5344,6 +6645,9 @@ msgid "" "standard :ref:`core-metadata` 1.2 specification via the :ref:`\"Requires-" "Python\" ` attribute." msgstr "" +"La kapablo ekmalsubteni malnovajn versioj de Python estiĝis per la atributo :" +"ref:`«Requires-Python» ` en la norma specifo :" +"ref:`core-metadata` 1.2." #: ../source/guides/dropping-older-python-versions.rst:9 msgid "" @@ -5352,6 +6656,10 @@ msgid "" "version in the package metadata. If they do not match, it will attempt to " "install the last package distribution that supported that Python runtime." msgstr "" +"Instalilo subtenanta la normon Metadatenoj 1.2+ obeas tiun specifon " +"kontrolante, ĉu la aktuala Python-versio kongruas kun la postulata versio en " +"la pakaj metadatenoj. Se ĝi ne kongruos, ĝi provos instali la lastan pakan " +"distribuon subtenantan tiun Python-version." #: ../source/guides/dropping-older-python-versions.rst:12 msgid "" @@ -5386,6 +6694,11 @@ msgid "" "just ``py3``. It is often configured within :file:`setup.cfg` under the " "``[bdist_wheel]`` section by setting ``universal = 1``." msgstr "" +"Tradicie, projekto uzanta :ref:`setuptools`, kies Python-kodo semantike " +"kongruas kun kaj Python 2 kaj Python 3, havas :term:`wheel `, kies " +"nomo inkluzivas la sufikson ``py2.py3``. Kiam oni ĉesigas subtenon de Python " +"2, gravas ŝanĝi tiun etikedon al simple ``py3``. Tio estas ofte agordita en :" +"file:`setup.cfg` sub la sekcio ``[bdist_wheel]`` kiel ``universal=1``." #: ../source/guides/dropping-older-python-versions.rst:29 msgid "" @@ -5428,6 +6741,10 @@ msgid "" "configuration field corresponds to the :ref:`Requires-Python ` core metadata field:" msgstr "" +"Deklaru la gamon de versioj de Python subtenataj en la dosiero :file:" +"`pyproject.toml` de via projekto. La agorda kampo :ref:`requires-python` " +"respondas al la kerna metadatena kampo :ref:`Requires-Python `:" #: ../source/guides/dropping-older-python-versions.rst:80 msgid "" @@ -5435,6 +6752,9 @@ msgid "" "`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 "" +"Oni povas specifi intervalojn de versioj kaj ekskluzivotajn versiojn (laŭ la " +"normo :ref:`version-specifiers`), ekzemple «minimume Python 3.9» aŭ " +"«minimume Python 3.7, sed ne 3.7.0 nek 3.7.1»:" #: ../source/guides/dropping-older-python-versions.rst:89 msgid "" @@ -5450,6 +6770,9 @@ msgid "" "3.10\"``. Doing so can cause different errors and version conflicts. See the " "`discourse-discussion`_ for more information." msgstr "" +"Evitu supran limon de versia gamo, ekz. ``\">= 3.8, < 3.10\"``. Tio povas " +"kaŭzi diversajn erarojn kaj versio-konfliktojn. Vidu `diskuton ĉe Discourse " +"`_ por pliaj informoj." #: ../source/guides/dropping-older-python-versions.rst:96 msgid "3. Validating the Metadata before publishing" @@ -5469,6 +6792,10 @@ msgid "" "generates the source package. The file contains a set of keys and values, " "the list of keys is part of the PyPA standard metadata format." msgstr "" +"Tiu dosiero estas generita de la :term:`konstrua malfasado ` " +"dum generado de la fonta pako. La dosiero enhavas parojn de ŝlosiloj kaj " +"valoroj; la listo de ŝlosiloj estas parto de la norma metadatena formo de " +"PyPA." #: ../source/guides/dropping-older-python-versions.rst:103 msgid "You can see the contents of the generated file like this:" @@ -5547,6 +6874,10 @@ msgid "" "the proper directory structure and use any web server that can serve static " "files and generate an autoindex." msgstr "" +"Se oni volas gastigi sian propran simplan deponejon [1]_, oni aŭ uzu " +"programon kiel :doc:`devpi `, aŭ oni povas simple kreu la " +"ĝustan dosierujan strukturon kaj uzu ajnan retservilon kapablan servi " +"statikajn dosierojn kaj generi aŭtomatan indekson." #: ../source/guides/hosting-your-own-index.rst:13 msgid "" @@ -5554,6 +6885,9 @@ msgid "" "your user's default repositories, you should instruct them in your project's " "description to configure their installer appropriately. For example with pip:" msgstr "" +"En ambaŭ kazoj, ĉar vi gastigas deponejon, kiu verŝajne ne estas inter la " +"aprioraj deponejoj de la uzanto, vi instruu la uzanton agordi sian " +"instalilon taŭge. Ekzemple, per pip:" #: ../source/guides/hosting-your-own-index.rst:29 msgid "" @@ -5561,6 +6895,9 @@ msgid "" "with valid HTTPS. At this time, the security of your user's installations " "depends on all repositories using a valid HTTPS setup." msgstr "" +"Krome, ni **rekomendegas**, ke la deponejo uzu validan HTTPS. Nuntempe la " +"sekureco de la instaloj de la uzanto dependas de la valida HTTPS de ĉiuj " +"deponejoj." #: ../source/guides/hosting-your-own-index.rst:35 msgid "\"Manual\" repository" @@ -5575,6 +6912,12 @@ msgid "" "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 "" +"La dosieruja aranĝo estas simpla. En radika dosierujo, oni kreu po unu " +"dosierujo por ĉiu projekto. La dosierujo devas esti la :ref:`normigita nomo " +"` de la projekto. En ĉiu projekto, oni metu ĉiujn " +"elŝuteblajn dosierojn. Se oni havus la projektojn «Foo» (kun versioj 1.0 kaj " +"2.0) kaj «bar» (kun la versio 0.1), oni havus la jenan dosierujan " +"strukturon::" #: ../source/guides/hosting-your-own-index.rst:50 msgid "" @@ -5583,6 +6926,10 @@ msgid "" "server in `Twisted`_, you would simply run ``twistd -n web --path .`` and " "then instruct users to add the URL to their installer's configuration." msgstr "" +"Kun tia aranĝo, simple igu vian TTT-servilon servi la radikan dosierujon kun " +"aŭtomata indekso. Ekzemple, uzante la aprioran TTT-servilon en `Twisted`_, " +"simple rulu ``twistd -n web --path .`` kaj igu la uzantojn aldoni la " +"retadreson al la agordoj de la instalilo." #: ../source/guides/hosting-your-own-index.rst:57 #: ../source/guides/index-mirrors-and-caches.rst:47 @@ -5744,6 +7091,9 @@ msgid "" "are already familiar with the basics of Python packaging. If you're looking " "for an introduction to packaging, see :doc:`/tutorials/index`." msgstr "" +"**Gvidilo** temas pri plenumado de iu tasko kaj supozas, ke vi jam scias la " +"fundamentojn pri la pakado de Python. Se vi serĉas enkondukon al pakado, " +"vidu :doc:`/tutorials/index`." #: ../source/guides/index-mirrors-and-caches.rst:5 msgid "Package index mirrors and caches" @@ -5759,6 +7109,10 @@ msgid "" "Index>`) can be used to speed up local package installation, allow offline " "work, handle corporate firewalls or just plain Internet flakiness." msgstr "" +"Spegulado aŭ enkaŝmemorigo de PyPI (aŭ alia :term:`pakindekso `) povas rapidigi instaladon de loka pako, ebligi senkonektan " +"funkciadon, kongrui kun entreprena fajromuro aŭ maski malbonan Interretan " +"konekton." #: ../source/guides/index-mirrors-and-caches.rst:15 msgid "There are multiple classes of options in this area:" @@ -5773,12 +7127,16 @@ 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 "" +"loka/gastigita spegulado de pakindekso. Spegulo estas (plena aŭ parta) kopio " +"de pakindekso uzebla anstataŭ la originalo." #: ../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 "" +"privata pakindekso kun retroiro al publikaj pakindeksoj (ekzemple por " +"malhelpi atakon per konfuzo de dependeco), ankaŭ konata kiel perilo." #: ../source/guides/index-mirrors-and-caches.rst:29 msgid "Caching with pip" @@ -5798,6 +7156,9 @@ msgid "" "downloading all the requirements for a project and then pointing pip at " "those downloaded files instead of going to PyPI." msgstr "" +":ref:`Rapida kaj loka instalado ` " +"elŝutante ĉiujn postulojn de projekto kaj montrante tiujn al pip anstataŭ " +"vizitadi PyPI." #: ../source/guides/index-mirrors-and-caches.rst:37 msgid "" @@ -5876,6 +7237,9 @@ msgid "" "kinds of hardware, or to interoperate with different pieces of external " "software." msgstr "" +"Scienca programo ofte havas pli komplikajn dependecojn ol aliaj programoj, " +"kaj ofte havas plurajn konstruajn opciojn por diversaj aparatoj aŭ por " +"kunfunkcii kun diversaj eksteraj programoj." #: ../source/guides/installing-scientific-packages.rst:13 msgid "" @@ -5885,6 +7249,11 @@ msgid "" "libraries, and can take advantage of different levels of vectorized " "instructions available in modern CPUs." msgstr "" +"Aparte, `NumPy `__, kiu estas la bazo de la plejparto " +"de la programaro en la `scienca Python-stako `_, povas kunfunkcii kun diversaj Fortranaj bibliotekoj kaj povas " +"ekspluati diversajn nivelojn de vektoraj instrukcioj en modernaj " +"ĉefprocesoroj." #: ../source/guides/installing-scientific-packages.rst:19 msgid "" @@ -5895,6 +7264,12 @@ msgid "" "atlas.sourceforge.net/>`__ BLAS/LAPACK library, restricted to SSE2 " "instructions, so they may not provide optimal linear algebra performance." msgstr "" +"Ekde versio 1.10.4 de NumPy kaj versio 1.0.0 de SciPy, antaŭkonstruitaj 32-" +"bitaj kaj 64-bitaj duumaĵoj de la formo ``wheel`` estas disponeblaj por ĉiuj " +"ĉefaj mastrumaj sistemoj (Windows, macOS kaj Linux) ĉe PyPI. Notu, tamen, ke " +"je Windows, duumaĵoj de NumPy estas binditaj al la biblioteko`ATLAS `__ por BLAS/LAPACK, kiu nur uzas la " +"instrukciojn SSE2 kaj tial povas esti neoptimuma pri lineara algebro." #: ../source/guides/installing-scientific-packages.rst:26 msgid "" @@ -5903,6 +7278,9 @@ msgid "" "environment to install from source and don't provide pre-built wheel files " "on PyPI)." msgstr "" +"Ekzistas kelkaj alternativoj por akiri sciencajn Python-bibliotekojn (aŭ " +"aliajn Python-bibliotekojn postulantajn tradukan medion por instali el fonto " +"kaj sen antaŭkonstruitajn wheel-dosierojn ĉe PyPI)." #: ../source/guides/installing-scientific-packages.rst:32 msgid "Building from source" @@ -5927,6 +7305,9 @@ msgid "" "versions of various pieces of scientific software, including NumPy and other " "parts of the scientific Python stack." msgstr "" +"Por uzanto de Linux, la sistema pakadministrilo ofte havas antaŭtradukitajn " +"versiojn de diversaj sciencaj programoj inkluzive de NumPy kaj aliaj partoj " +"de la scienca Python-stako." #: ../source/guides/installing-scientific-packages.rst:48 msgid "" @@ -5935,6 +7316,9 @@ msgid "" "distributions installed into the system Python when using virtual " "environments)." msgstr "" +"Se uzi version plurmonate malaktualan estas akcepteble, do tio estas " +"verŝajne bona opcio (nur certigu, ke vi permesas atingon al distribuoj " +"instalitaj en la sistema Python dum uzado de virtuala medio)." #: ../source/guides/installing-scientific-packages.rst:54 msgid "Windows installers" @@ -5968,6 +7352,10 @@ msgid "" "Python when using virtual environments is a common approach to working " "around this limitation." msgstr "" +"Same kiel Linux-sistempakoj, la Windows instaliloj nur instalas en sisteman " +"Python-instalaĵon – ili ne povas instali en virtualan medion. Oni ofte " +"moderigas tiun limigon permesante al virtualaj medioj atingi distribuojn " +"instalitajn en la sisteman Python-instalaĵon." #: ../source/guides/installing-scientific-packages.rst:70 msgid "" @@ -5999,25 +7387,23 @@ msgid "" "such as ``Homebrew``. The SciPy site has more details on using Homebrew to " "`install SciPy on macOS `_." msgstr "" +"uzantoj de macOS ankaŭ povas uzi Linux-stilan pakadministrilon kiel " +"``Homebrew``. La retejo de SciPy havas pliajn detalojn pri `instalado de " +"SciPy sur macOS per Homebrew `_." #: ../source/guides/installing-scientific-packages.rst:89 msgid "SciPy distributions" msgstr "Distribuoj de SciPy" #: ../source/guides/installing-scientific-packages.rst:91 -#, fuzzy -#| msgid "" -#| "The SciPy site lists `several distributions `_ that provide the full SciPy stack to end users in an " -#| "easy to use and update format." 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 "" "La retejo de SciPy listigas `plurajn distribuojn `_ provizantajn la plenan SciPy-stakon al uzanto en facile " -"uzebla kaj ĝisdatigebla formo." +">`_ provizantajn la plenan SciPy-stakon al uzanto en facile uzebla kaj " +"ĝisdatigebla formo." #: ../source/guides/installing-scientific-packages.rst:96 msgid "" @@ -6060,6 +7446,12 @@ msgid "" "single package file. Spack also generates *module* files so that packages " "can be loaded and unloaded from the user's environment." msgstr "" +"Spack provizas simplan sed potencan sintakson, kiu permesas al uzanto facile " +"specifi versiojn kaj agordajn opciojn. Pak-dosiero estas verkita en pura " +"Python kaj estas ŝablona tiel, ke per unu pakdosiero facilas ŝanĝi " +"tradukilon, realigon de dependaĵo (kiel MPI), versiojn kaj konstruaj " +"opciojn. Spack ankaŭ produktas *modul-dosierojn*, por ŝargi kaj malŝargi " +"pakojn al/el la medio de la uzanto." #: ../source/guides/installing-scientific-packages.rst:119 msgid "The conda cross-platform package manager" @@ -6097,6 +7489,10 @@ msgid "" "Source packages for big data and scientific use, and a collection of " "Graphical Interface utilities for managing conda environments." msgstr "" +"`Anaconda `_ estas Python-distribuo " +"eldonita de la firmao Anaconda, Inc. Ĝi estas stabila kolekto de " +"Malfermitfontaj pakoj por grandaj datenoj kaj scienca uzado kune kun " +"grafikfasadaj ilaĵoj por administri ``conda``-medion." #: ../source/guides/installing-scientific-packages.rst:135 msgid "" @@ -6105,6 +7501,10 @@ msgid "" "miniconda/>`_, `miniforge `_, and " "`pixi `_." msgstr "" +"Krom la plena distribuo provizita de Anaconda, la pakadministrilo ``conda`` " +"mem estas disponebla en `miniconda `_, `miniforge `_ kaj `pixi " +"`_." #: ../source/guides/installing-scientific-packages.rst:138 msgid "" @@ -6113,6 +7513,10 @@ msgid "" "conda-forge channel, which provides a wide variety of pre-built packages, " "and some domain-specific package collections." msgstr "" +"Conda-pakoj disponeblas ĉe pluraj kanaloj en Anaconda.org, inkluzive de la " +"apriora kanalo de Anaconda, Inc.; la komunume subtenata kanalo ``conda-" +"forge``, kiu provizas multe da antaŭkonstruitaj pakoj; kaj fakaj " +"pakokolektoj." #: ../source/guides/installing-stand-alone-command-line-tools.rst:4 msgid "Installing stand alone command line tools" @@ -6135,6 +7539,9 @@ msgid "" "global environment can cause version conflicts and break dependencies the " "operating system has on Python packages." msgstr "" +"Kutime oni volas atingi tiujn programojn de ie ajn sur la sistemo, sed " +"instalado de pakoj kaj dependaĵoj al la sama malloka medio povas kaŭzi " +"versio-konfliktojn kaj rompi Python-dependecojn de la mastruma sistemo." #: ../source/guides/installing-stand-alone-command-line-tools.rst:17 msgid "" @@ -6144,6 +7551,10 @@ msgid "" "uninstalled without causing conflicts with other packages, and allows you to " "safely run the applications from anywhere." msgstr "" +":ref:`pipx` solvas tiun problemon kreante virtualan medion por ĉiu pako, " +"certigante ke programoj estas atingeblaj per dosierujo en via ``$PATH``. Tio " +"permesas ĝisdatigadon aŭ malinstaladon de ĉiu pako sen konflikto kun aliaj " +"pakoj kaj sekuran ruladon ie ajn." #: ../source/guides/installing-stand-alone-command-line-tools.rst:23 msgid "pipx only works with Python 3.6+." @@ -6158,6 +7569,8 @@ msgid "" "``ensurepath`` ensures that the application directory is on your ``$PATH``. " "You may need to restart your terminal for this update to take effect." msgstr "" +"``ensurepath`` certigas, ke la programa dosierujo estas en via ``$PATH``. Vi " +"eble bezonas relanĉi vian terminalon por efektivigi la ĝisdatigon." #: ../source/guides/installing-stand-alone-command-line-tools.rst:46 msgid "" @@ -6351,6 +7764,9 @@ msgid "" "Pythons, along with pip, setuptools, and wheel, which are kept fairly up to " "date." msgstr "" +"Ŝaltu la `deponejon IUS `_, kaj instalu unu el la " +"`paralele instaleblaj `_ " +"Python-oj kune kun pip, setuptools, kaj wheel, kiuj estas plejparte ĝisdataj." #: ../source/guides/installing-using-linux-tools.rst:100 msgid "For example, for Python 3.4 on CentOS7/RHEL7:" @@ -6374,6 +7790,9 @@ msgid "" "`_ by default, " "which is a significant behavior change that can be surprising to some users." msgstr "" +"Novaj versioj de Debian/Ubuntu modifis pip apriore uzante la `«Uzanto-" +"Skemon» `_, kio " +"estas signifa konduta ŝanĝo eble surprizanta kelkajn uzantojn." #: ../source/guides/installing-using-linux-tools.rst:135 msgid "Arch Linux" @@ -6398,6 +7817,9 @@ msgid "" "the standard library's virtual environment tool :ref:`venv` and install " "packages. The guide covers how to:" msgstr "" +"Ĉi tiu estas gvidilo pri kiel krei kaj aktivigi virtualan medion per la ilo :" +"ref:`venv` en la norma biblioteko kaj instali pakojn tien. La gvidilo " +"diskutas la jenon:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:8 msgid "Create and activate a virtual environment" @@ -6430,6 +7852,10 @@ msgid "" "from the term :term:`Import Package` which refers to import modules in your " "Python source code." msgstr "" +"Ĉi tiu gvidilo uzas la terminon **pako** por signifi :term:`Distribuan Pakon " +"`, instalitan el ekstera gastiganto. Tio diferencas de " +"la termino :term:`Importa Pako `, kiu estas importebla " +"modulo en Python-fontokodo." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:25 msgid "" @@ -6438,6 +7864,10 @@ msgid "" "your operating system's package manager to install Python, please ensure " "that Python is installed before proceeding with these steps." msgstr "" +"Ĉi tiu gvidilo supozas, ke vi uzas oficialan version de Python el . Se vi uzas la pakadministrilon de via mastruma " +"sistemo por instali Python, bonvolu certigi, ke Python estas instalita, " +"antaŭ ol sekvi la ĉi-subajn paŝojn." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:32 msgid "Create and Use Virtual Environments" @@ -6470,12 +7900,17 @@ msgid "" "following command. This will create a new virtual environment in a local " "folder named ``.venv``:" msgstr "" +"Por krei virtualan medion, iru al la dosierujo de via projekto, kaj rulu la " +"jenan komandon. Tio kreos novan virtualan medion en loka dosierujo nomita ``." +"venv``:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:64 msgid "" "The second argument is the location to create the virtual environment. " "Generally, you can just create this in your project and call it ``.venv``." msgstr "" +"La dua argumento estas la loko de la virtuala medio. Ĝenerale, oni povas " +"simpli krei ĝin en sia projekto kaj nomi ĝin ``.venv``." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:67 msgid "" @@ -6501,6 +7936,10 @@ msgid "" "will put the virtual environment-specific ``python`` and ``pip`` executables " "into your shell's ``PATH``." msgstr "" +"Antaŭ ol oni povas ekinstali aŭ ekuzi pakojn en sia virtuala medio, oni " +"devas «aktivigi» ĝin. Aktivigado de virtuala medio metos ruleblaĵojn " +"``python`` kaj ``pip`` por la virtuala medio en la medivariablon ``PATH`` de " +"la ŝelo." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:93 msgid "" @@ -6515,6 +7954,8 @@ msgid "" "While the virtual environment is active, the above command will output a " "filepath that includes the ``.venv`` directory, by ending with the following:" msgstr "" +"Dum la virtuala medio aktivas, la ĉi-supra komando eligos dosierindikon " +"inkluzivan la dosierujon ``.venv``, finiĝante jene:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:124 msgid "" @@ -6522,6 +7963,8 @@ msgid "" "that specific environment. This enables you to import and use packages in " "your Python application." msgstr "" +"Kiam virtuala medio estas aktiva, pip instalas pakojn en tiun medion. Tio " +"permesas importi kaj uzi pakojn en sia Python-programo." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:130 msgid "Deactivate a virtual environment" @@ -6540,6 +7983,8 @@ msgid "" "Closing your shell will deactivate the virtual environment. If you open a " "new shell window and want to use the virtual environment, reactivate it." msgstr "" +"Fermado de la ŝelo malaktivigos la virtualan medion. Se vi malfermas novan " +"ŝelan fenestron kaj volas uzi la virtualan medion, reaktivigu ĝin." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:145 msgid "Reactivate a virtual environment" @@ -6551,6 +7996,9 @@ msgid "" "instructions about activating a virtual environment. There's no need to " "create a new virtual environment." msgstr "" +"Se vi volas reaktivigi ekzistantan virtualan medion, sekvu la samajn " +"instrukciojn pri aktivigado de virtuala medio. Ne necesas krei novan " +"virtualan medion." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:155 msgid "" @@ -6566,6 +8014,9 @@ msgid "" "install an additional package such as ``python3-pip``. You can make sure " "that pip is up-to-date by running:" msgstr "" +"La Python-instalilo por macOS inkluzivas pip. Sur Linux, oni eble devas " +"instali plian pakon kiel ``python3-pip``. Oni certigas la ĝisdatigitecon de " +"pip rulante la jenon:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:170 msgid "" @@ -6609,7 +8060,7 @@ msgid "" "Package Index (PyPI)`:" msgstr "" "Ekzemple, ni instalos la biblioteko `Requests`_ el la :term:`Python-" -"Pakindico (PyPI)`:" +"Pakindico (PyPI) `:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:218 msgid "" @@ -6626,6 +8077,9 @@ msgid "" "`version specifiers `. For example, to install a specific " "version of ``requests``:" msgstr "" +"pip permesas al vi precizigi la instalotan version de pako per :term:`versio-" +"specifilo `. Ekzemple, por instali specifan version de " +"``requests``:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:257 msgid "To install the latest ``2.x`` release of requests:" @@ -6666,6 +8120,9 @@ msgid "" "directory will immediately affect the installed package without needing to " "re-install:" msgstr "" +"Krome, pip povas instali pakojn el fonto en :doc:`evoluada reĝimo " +"`, tiel ke ŝanĝoj pri la fonta " +"dosierujo tuje efektiviĝas por la instalita pako sen la bezono reinstali:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:347 msgid "Install from version control systems" @@ -6685,8 +8142,8 @@ msgid "" "pip's documentation on :ref:`VCS Support `." msgstr "" "Por pli da informoj pri subtenataj versikontrolaj sistemoj kaj sintakso, " -"vidu la dokumentaron de pip pri :ref:`Subtenado de Versikontrola Sistemo < " -"pip:VCS Support>`." +"vidu la dokumentaron de pip pri :ref:`Subtenado de Versikontrola Sistemo " +"`." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:361 msgid "Install from local archives" @@ -6707,6 +8164,9 @@ msgid "" "tell pip to look for packages there and not to use the :term:`Python Package " "Index (PyPI)` at all:" msgstr "" +"Se vi havas dosierujon enhavantan arĥivojn de pluraj pakoj, oni povas igi " +"pip serĉi pakojn tie kaj ne uzi la :term:`Python-Pakindekson `:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:394 msgid "" @@ -6714,6 +8174,8 @@ msgid "" "connectivity or if you want to strictly control the origin of distribution " "packages." msgstr "" +"Tio utilas, se oni instalas pakon sur sistemo de limigita konektiteco aŭ se " +"oni volas strikte kontroli la originon de distribuaj pakoj." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:400 msgid "Install from other package indexes" @@ -6759,6 +8221,9 @@ msgid "" "dependencies in a :ref:`Requirements File `. For " "example you could create a :file:`requirements.txt` file containing:" msgstr "" +"Anstataŭ instalado de pakoj unuope, pip ebligas deklaradon de ĉiuj " +"dependecoj en :ref:`Postulo-Dosiero `. Ekzemple oni " +"povas krei :file:`requirements.txt` enhavantan la jenon:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:463 msgid "" @@ -6811,6 +8276,9 @@ msgid "" "under development. Please refer to the :ref:`virtualenv` documentation for " "details on installation and usage." msgstr "" +"Ĉi tiu gvidilo pri instalado de pakoj kaj uzado de :ref:`virtualenv` estas " +"ankoraŭ verkata. Bonvolu vidi la dokumentaro de :ref:`virtualenv` por " +"detaloj pri instalado kaj uzado." #: ../source/guides/installing-using-virtualenv.rst:13 msgid "" @@ -6818,6 +8286,414 @@ msgid "" "Package` which is different from an :term:`Import Package` that which is " "used to import modules in your Python source code." msgstr "" +"Ĉi tiu dokumento uzas la terminon **pako** por signifi :term:`Distribuan " +"Pakon `, kiu diferencas de :term:`Importa Pako ` uzata por importi modulon al via Python-fontkodo." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:6 +msgid "Licensing examples and user scenarios" +msgstr "Ekzemploj de licencoj kaj uzkazoj" + +#: ../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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" +":pep:`639` precizigis la manieron deklari la licencon de projekto kaj " +"dosierlokojn de licencodosieroj kaj aliajn leĝe postulataj informoj. Ĉi tiu " +"dokumento celas klarigi, kiel migri de la malnova maniero al la normigita " +"maniero deklari licencojn. Certigu, ke via preferata konstrua malfasado " +"subtenas :pep:`639`, antaŭ ol provi la novajn gvidnormojn. Je la Februaro de " +"2025, :doc:`setuptools ` kaj :ref:" +"`flit ` ankoraŭ ne subtenas :pep:`639`." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "Ekzemploj de Licencoj" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "Baza ekzemplo" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" +"Ĝi inkluzivas la jenajn licencajn metadatenojn en :file:`pyproject.toml`:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "La plej simpla migrado al PEP 639 uzos jenon anstataŭe:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" +"Aŭ, se la projekto uzis :file:`setup.cfg` en sia tabelo ``[metadata]``:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "La eligitaj Kernaj Metdatenoj por la distribuaj pakoj estos jenaj:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "Altnivela ekzemplo" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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 "" +"Supozu, ke Setuptools inkluzivus la licencojn de la triapartiaj projektoj en " +"la dosierujoj :file:`setuptools/_vendor/` kaj :file:`pkg_resources/_vendor/" +"`; specife:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:88 +msgid "The license expressions for these projects are:" +msgstr "Jen la licenco-esprimoj por tiuj projektoj:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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 "" +"Ampleksa licenco-esprimo pri kaj Setuptools mem kaj la inkluzivitaj " +"dependaĵoj enhavus tiujn metadatenojn, kombinante ĉiujn licenco-esprimojn. " +"Tia esprimo povas esti jena:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:105 +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:113 +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 "" +"Specife, ni supozas, ke la licenco-dosieroj troviĝas en la jenaj lokoj en la " +"projekta fontarbo (relative al la projekta radiko kaj :file:`pyproject." +"toml`):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "Resume, la dosiero :file:`pyproject.toml` estos jena:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +msgid "" +"Or alternatively, the license files can be specified explicitly (paths will " +"be interpreted as glob patterns):" +msgstr "" +"Alternative, la licenco-dosiero povas esti specifita eksplicite (dosierloko " +"interpretiĝas kiel patroneo):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "Se nia projekto uzus :file:`setup.cfg`, ni povus difini tion en:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" +"Per ambaŭ metodoj, la eligitaj Kernaj Metadatenoj en la distribuo estos " +"jenaj:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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 "" +"En la rezulta fonta distribuo, kun :file:`/` kiel la radiko de la arĥivo kaj " +"``{VERSION}`` la versio de la eldono de Setuptools specifita en la Kernaj " +"Metadatenoj, la licenco-dosieroj troviĝus ĉe:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:183 +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 "" +"En la konstruita wheel, kun :file:`/` kiel la radiko de la arĥivo kaj " +"``{VERSION}`` sama kiel la ĉi-supra ekzemplo, la licenco-dosieroj troviĝus " +"ĉe:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:193 +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 "" +"Fine, en la instalita projekto en :file:`site-packages/`, kun ``{VERSION}`` " +"sama kiel la ĉi-supra ekzemplo, la licenco-dosieroj instaliĝus al:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:205 +msgid "Expression examples" +msgstr "Ekzemploj de esprimoj" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "Kelkaj pliaj ekzemploj de validaj valoroj de ``License-Expression``:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "Uzkazoj" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "Mi havas ne distribuotan privatan pakon" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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 "" +"Se via pako ne estas havebla publike (ekster via firmao, organizaĵo aŭ " +"familio), *ordinare* ne necesas inkluzivi formalan licencon, tiel ke vi ne " +"devas fari ion ekstre." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "Mi simple volas disdoni mian verkon sen jura restrikto" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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 "" +"Kvankam oni ne devas inkluzivi licencon, se licenco mankus, neniu rajtas " +"`elŝuti, uzi aŭ plibonigi vian verkon `__, kio estas " +"verŝajne la malo de tio, kio vi deziras. La `licenco MIT " +"`__ estas bona elekto, ĉar ĝi estas simpla, vaste uzata " +"kaj permesas al ĉiuj fari ion ajn deziratan pri via laboro (krom procesi " +"kontraŭ vi, kion vi verŝajne ankaŭ ne deziras)." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:255 +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 "" +"Por efektivigi ĝin, simple algluu `la tekston `__ en " +"dosieron nomitan :file:`LICENSE.txt` ĉe la radiko de via deponejo, kaj " +"aldonu la jaron kaj vian nomon al la kopirajta linio. Poste, simple aldonu " +"``license = \"MIT\"`` sub ``[project]`` en :file:`pyproject.toml` se via " +"pakilo subtenas ĝin, aŭ en ĝia agorda dosiero. Jen finite!" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:263 +msgid "I want to distribute my project under a specific license" +msgstr "Mi volas distribui mian projekton sub specifa licenco" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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 "" +"Multaj popularaj kodgastigejoj, projekto-ŝablonoj kaj pakiloj povas aldoni " +"la licenco-dosieron por vi kaj povos subteni la esprimon." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:279 +msgid "I maintain an existing package that's already licensed" +msgstr "Mi mastrumas ekzistantan pakon sub licenco" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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 "" +"Se vi jam havas licencajn dosierojn kaj metadatenojn en via projekto, vi nur " +"devas fari kelkajn ŝanĝetojn por uzi la novajn funkciojn." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:285 +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 "" +"En via projekta agorda dosiero, tajpu vian licenco-esprimon sub ``license`` " +"(tabelo ``[project]`` en :file:`pyproject.toml`), aŭ la ekvivalentaĵon de " +"via pakilo. Certigu, ke vi forigis ajnan malnovan subŝlosilojn de tabelo " +"``license`` aŭ klasigilojn ``License ::``. Via ekzistanta valoro por " +"``license`` povas jam validi (ekz. ``MIT``, ``Apache-2.0 OR BSD-2-Clause`` " +"ktp); alie, vidu la `liston de SPDX-licencoj `__ por la " +"identigilo por la licenco de via projekto." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:294 +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 "" +"Certe listigu viajn licenco-dosierojn sub ``license-files`` sub " +"``[project]`` en :file:`pyproject.toml` aŭ en la agorda dosiero de via ilo." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "Mia pako inkluzivas alian kodon sub malsamaj licencoj" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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 "" +"Resume, ``Licenco-1 AND Licenco-2`` signifas, ke *ambaŭ* licencoj efektivas " +"pri la projekto aŭ partoj de la projekto (ekzemple, la aŭtoro inkluzivis " +"dosieron sub alia licenco), kaj ``Licenco-1 OR Licenco-2`` signifas, ke *aŭ " +"unu aŭ la alia* el la licencoj estas uzeblaj laŭ la volo de la uzanto " +"(ekzemple, la aŭtoro volas permesi al la aŭtoro elekti inter pluraj " +"licencoj). Oni uzas rondajn krampojn (``()``) por grupigi esprimojn, " +"sufiĉante por eĉ la plej komplikaj situacioj." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:324 +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 "" +"En via projekta agorda dosiero, tajpu vian licenco-esprimon sub ``license`` " +"(tabelo ``[project]`` en :file:`pyproject.toml`), aŭ la ekvivalentaĵon de " +"via pakilo. Certigu, ke vi forigis ajnan malnovan subŝlosilojn de tabelo " +"``license`` aŭ klasigilojn ``License ::``." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:330 +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:336 +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 "" +"Ekzemple, se via projekto estus sub la licenco MIT sed inkluzivus dependaĵon " +"(ekzemple ``packaging``) sub aŭ Apache 2.0 aŭ la dukondiĉa BSD, la licenco-" +"esprimo estus ``MIT AND (Apache-2.0 OR BSD-2-Clause)``. Oni havus :file:" +"`LICENSE.txt` en la deponeja radiko, kaj :file:`LICENSE-APACHE.txt` kaj :" +"file:`LICENSE-BSD.txt` en la subdosierujo :file:`_vendor/`. Por inkluzivi " +"ĉiujn, oni specifus aŭ la patroneon ``[\"LICENSE.txt\", \"_vendor/packaging/" +"LICENSE*\"]`` aŭ la dosierlokojn ``[\"LICENSE.txt\", \"_vendor/LICENSE-" +"APACHE.txt\", \"_vendor/LICENSE-BSD.txt\"]``." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:347 +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 "" +"Vidu :ref:`licensing-example-advanced` por plena ekzemplo de tio pri realeca " +"komplika projekto,, kun multaj teĥnikaj detaloj. Vidu `lernilon " +"`__ por pli da helpo kaj ekzemploj pri SPDX-identigiloj kaj " +"esprimoj." #: ../source/guides/making-a-pypi-friendly-readme.rst:2 msgid "Making a PyPI-friendly README" @@ -6891,6 +8767,9 @@ msgid "" "project's ``Description`` and ``Description-Content-Type`` metadata, " "typically in your project's :file:`setup.py` file." msgstr "" +"Por inkluzivi la enhavon de README kiel la priskribon de la pako, agordu la " +"metadatenojn ``Description`` kaj ``Description-Content-Type``, ofte en la " +"dosiero :file:`setup.py` de via projekto." #: ../source/guides/making-a-pypi-friendly-readme.rst:33 msgid ":ref:`description-optional`" @@ -6916,6 +8795,11 @@ msgid "" "``Content-Type``-style value for your README file's markup, such as ``text/" "plain``, ``text/x-rst`` (for reStructuredText), or ``text/markdown``." msgstr "" +"Agordu la valoron de ``long_description`` al la enhavo (ne la dosierloko) de " +"la dosiero README. Agordu ``long_description_content_type`` al akceptata " +"``Content-Type``-stila valoro por la marklingvo de via dosiero README, " +"ekzemple ``text/plain``, ``text/x-rst`` (por reStructuredText), aŭ ``text/" +"markdown``." #: ../source/guides/making-a-pypi-friendly-readme.rst:45 msgid "" @@ -6969,6 +8853,8 @@ msgid "" "prevent it from rendering, causing PyPI to instead just show the README's " "raw source." msgstr "" +"Se via README estas en reStructuredText, ajna nevalida marklingvaĵo " +"malhelpos montradon, kaŭzante la montradon de la kruda fonto ĉe PyPI." #: ../source/guides/making-a-pypi-friendly-readme.rst:99 msgid "" @@ -6978,6 +8864,11 @@ msgid "" "reference-label```\"), are not allowed here and will result in error " "messages like \"``Error: Unknown interpreted text role \"py:func\".``\"." msgstr "" +"Notu, la Sphinx-etendaĵoj uzataj en docstring, kiel :doc:`direktivoj ` kaj :doc:`roloj ` (ekzemple «``:py:func:`getattr```» aŭ «``:ref:`mia-" +"referenca-etikedo```») ne estas permesata ĉi tie kaj kaŭzos erarmesaĝojn " +"kiel «``Error: Unknown interpreted text role \"py:func\".``»." #: ../source/guides/making-a-pypi-friendly-readme.rst:104 msgid "" @@ -7033,6 +8924,9 @@ msgid "" "expected to use. These are the tools and processes that people will need to " "interact with ``PyPI.org``." msgstr "" +":term:`pypi.org` estas la nova, reverkita versio de PyPI anstataŭinta la " +"malnovan kodon de PyPI. Ĝi estas la apriora versio de PyPI, kiun ĉiuj uzu. " +"Jen la iloj kaj procedoj por interagi kun ``PyPI.org``." #: ../source/guides/migrating-to-pypi-org.rst:16 msgid "Publishing releases" @@ -7062,7 +8956,7 @@ msgstr "" msgid "" "The default upload settings switched to ``pypi.org`` in the following " "versions:" -msgstr "La implicita alŝuta celo ŝanĝiĝis al ``pypi.org'' en la jenaj versioj:" +msgstr "La implicita alŝuta celo ŝanĝiĝis al ``pypi.org`` en la jenaj versioj:" #: ../source/guides/migrating-to-pypi-org.rst:28 msgid "``twine`` 1.8.0" @@ -7112,12 +9006,17 @@ msgid "" "pypirc` and include the ``repository:`` line, but use the value ``https://" "upload.pypi.org/legacy/`` instead:" msgstr "" +"Se ial vi ne povas ĝisdatigi ilon al versio, kiu apriore uzas PyPI.org, do " +"vi modifu :file:`$HOME/.pypirc` kaj inkluzivu la linion ``repository:``, sed " +"anstataŭe uzu la valoron ``https://upload.pypi.org/legacy/``:" #: ../source/guides/migrating-to-pypi-org.rst:71 msgid "" "(``legacy`` in this URL refers to the fact that this is the new server " "implementation's emulation of the legacy server implementation's upload API.)" msgstr "" +"(``legacy`` en ĉi tiu retadreso signifas, ke tio estas la imitado, far la " +"nova servila realigo, de la alŝuta API de la malnova servila realigo.)" #: ../source/guides/migrating-to-pypi-org.rst:77 msgid "Registering package names & metadata" @@ -7129,6 +9028,9 @@ msgid "" "command prior to the first upload is no longer required, and is not " "currently supported by the legacy upload API emulation on PyPI.org." msgstr "" +"Eksplicita antaŭregistrado de paknomo per la komando ``setup.py register`` " +"antaŭ la unua alŝuto ne plu necesas kaj aktuale ne estas subtenata de la " +"imitado de la malnova alŝuta API ĉe PyPI.org." #: ../source/guides/migrating-to-pypi-org.rst:83 msgid "" @@ -7157,6 +9059,11 @@ msgid "" "``https://testpypi.python.org/pypi`` with ``https://test.pypi.org/legacy/``, " "for example:" msgstr "" +"La malonva Prova PyPI (testpypi.python.org) ne plu haveblas; uzu `test.pypi." +"org `_ anstataŭe. Se vi uzas la Provan PyPI, vi devas " +"ĝisdatigi la :file:`$HOME/.pypirc` por la nova loko de Prova PyPI, " +"anstataŭigante ``https://testpypi.python.org/pypi`` per ``https://test.pypi." +"org/legacy/``, jene:" #: ../source/guides/migrating-to-pypi-org.rst:117 msgid "Registering new user accounts" @@ -7183,6 +9090,10 @@ msgid "" "org``. The domain pypi.python.org now redirects to pypi.org, and may be " "disabled sometime in the future." msgstr "" +"Kvankam hiperligoj en alia dokumentoj de PyPA povas ankoraŭ uzi ``pypi." +"python.org'', la apriora fasado por foliumi pakojn estas ``pypi.org``. La " +"retejo ``pypi.python.org`` nun estas redirektata al ``pypi.org``, kaj povas " +"ekmalesti estontece." #: ../source/guides/migrating-to-pypi-org.rst:134 msgid "Downloading packages" @@ -7219,6 +9130,9 @@ msgid "" "strongly recommended is the ``[build-system]`` table in :file:`pyproject." "toml`." msgstr "" +"Dosiero :term:`pyproject.toml` estas rekomendegata. La ekzisto de dosiero :" +"file:`pyproject.toml` mem ne tre gravas. [#]_ Tio, kio estas rekomendegata, " +"estas la tabelo ``[build-system]`` en :file:`pyproject.toml`." #: ../source/guides/modernize-setup-py-project.rst:16 msgid "" @@ -7234,6 +9148,11 @@ msgid "" "deprecated and **MUST NOT** be run anymore, and their recommended " "replacement commands should be used instead:" msgstr "" +"Ne, :file:`setup.py` povas ekzisti en moderna :ref:`setuptools`-baza " +"projekto. La dosiero :term:`setup.py` estas valida agorda dosiero por " +"setuptools, verkita en Python. Tamen, la jenaj komandoj estas evitindaj; oni " +"**DEVAS NE** ruli tiujn, kaj oni anstataŭe uzu la rekomendatajn " +"anstataŭantajn komandojn:" #: ../source/guides/modernize-setup-py-project.rst:36 msgid "``python -m build``" @@ -7269,6 +9188,9 @@ msgid "" "Frontend>` know that :ref:`setuptools` is the :term:`build backend ` for this project." msgstr "" +"Tio estas la norma metodo por sciigi :term:`konstruan fasadon `, ke :ref:`setuptools` estas la :term:`konstrua malfasado ` por la projekto." #: ../source/guides/modernize-setup-py-project.rst:63 msgid "" @@ -7310,7 +9232,7 @@ msgstr "" #: ../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 "Ekzemple, jena dosiero `setup.py`:" +msgstr "Ekzemple, jena dosiero :file:`setup.py`:" #: ../source/guides/modernize-setup-py-project.rst:99 msgid "" @@ -7330,6 +9252,9 @@ msgid "" "install only the build dependencies (and their dependencies) that are listed " "under ``build-system.requires`` and trigger the build in that environment." msgstr "" +"Konstrua fasado tipe kreas provizoran virtualan medion, en kiu instaliĝas " +"nur la konstruaj dependaĵoj (kaj la dependaĵoj de dependaĵoj) en la listo de " +"``build-system.requires``, kaj konstruas en tiu medio." #: ../source/guides/modernize-setup-py-project.rst:124 msgid "" @@ -7399,6 +9324,8 @@ 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 "" +"Ekzemple, ekzistas procezo ne facile ŝanĝebla, kiu devas ruli komandon kiel " +"``python setup.py --name``." #: ../source/guides/modernize-setup-py-project.rst:232 msgid "" @@ -7406,6 +9333,9 @@ msgid "" "tree even after all its content has been moved to :file:`pyproject.toml`. " "This file can be as minimalistic as this:" msgstr "" +"Estas bone lasi dosieron :file:`setup.py` en la projekta fontarbo, eĉ post " +"oni movis ĉiom da enhavo al :file:`pyproject.toml`. La dosiero povas esti " +"tiel minimuma kiel la jeno:" #: ../source/guides/modernize-setup-py-project.rst:246 msgid ":ref:`pyproject-toml-spec`" @@ -7426,6 +9356,9 @@ msgid "" "must ``require`` the appropriate version of the project at run time (using " "``pkg_resources``)." msgstr "" +"easy_install permesas samtempan instaladon de malsamaj versioj de la sama " +"projekto en unu medio komuna por pluraj programoj, kiuj devas postuli taŭgan " +"version de la projekto rultempe (per ``pkg_resources``)." #: ../source/guides/multi-version-installs.rst:16 msgid "" @@ -7435,6 +9368,10 @@ msgid "" "environment shared by multiple applications, such as the system Python in a " "Linux distribution." msgstr "" +"Por multaj uzkazoj, virtuala medio solvas tion sen la komplikaĵo de la " +"direktivo ``require``. Tamen, la avantaĝo de paralelaj instalaĵoj en la sama " +"medio estas, ke tio funkcias por medio uzata de pluraj programoj, ekzemple " +"por la sistema Python en Linux-distribuo." #: ../source/guides/multi-version-installs.rst:22 msgid "" @@ -7568,6 +9505,10 @@ msgid "" "global interpreter lock around long-running operations (regardless of " "whether those operations are CPU or IO bound)." msgstr "" +"Unu rimarkinda trajto de C-etendaĵo estas, ke ĝi povas liberigi la mallokan " +"interpretilan seruron de CPython dum longdaŭra operacio, se ĝi ne bezonas " +"alvoki interpretilan rultempon reen (por kaj ĉefprocesoraj kaj eneligaj " +"operacioj)." #: ../source/guides/packaging-binary-extensions.rst:59 msgid "" @@ -7579,6 +9520,12 @@ msgid "" "concurrent execution of vectorised operations and to tightly control the " "exact memory layout of created objects." msgstr "" +"Ne ĉia etendaĵo-modulo estas sole en unu el la ĉi-supraj kategorioj. La " +"etendaĵo-modulo en NumPy, ekzemple, estas por ĉiuj tri uzkazoj – ĝi movas " +"internajn iteraciojn al C por rapidigo, volvas eksterajn bibliotekojn en C, " +"Fortrano kaj aliaj lingvoj, kaj uzas malaltnivelajn sistemajn interfacojn " +"por kaj CPython kaj la mastruma sistemo por samtempa rulado de vektorigitaj " +"operacioj kaj por regi la precizan memoraranĝon de kreitaj objektoj." #: ../source/guides/packaging-binary-extensions.rst:69 msgid "Disadvantages" @@ -7593,6 +9540,11 @@ msgid "" "any language that can bind to the CPython C API) typically require that " "custom binaries be created for different platforms." msgstr "" +"La ĉefmalavantaĝo de duuma etendaĵo estas, ke posta distribuado de la " +"programo estas malfacila. Unu el la avantaĝoj de Python estas la " +"plurplatformeco. La lingvoj por etendaĵa modulo (ofte C aŭ C++, sed povas " +"esti ajna lingvo bindebla al la C API de CPython) ordinare postulas kreadon " +"de duumaĵoj po unu por ĉiu platformo." #: ../source/guides/packaging-binary-extensions.rst:78 msgid "This means that binary extensions:" @@ -7635,6 +9587,9 @@ msgid "" "introducing additional complexity in the test suite to ensure both versions " "are always executed." msgstr "" +"malfaciligas mastrumadon (se pure Python-a alternativo estas provizita), " +"postulante duoblan realigon de ĉiuj ŝanĝoj kaj komplikante la testaron pri " +"rulado de ambaŭ versioj." #: ../source/guides/packaging-binary-extensions.rst:99 msgid "" @@ -7643,6 +9598,10 @@ msgid "" "zipfiles) often won't work for extension modules (as the dynamic loading " "mechanisms on most platforms can only load libraries from disk)." msgstr "" +"Alia malavantaĝo de dependado je duuma etendaĵo estas, ke alternativa " +"importa meĥanismo (kiel importado de modulo rekte el zip-arĥivo) ofte ne " +"funkcias por etendaĵmodulo (ĉar la dinamika ŝargada meĥanismo en la " +"plejmulto de platformoj nur povas ŝargi bibliotekon el disko)." #: ../source/guides/packaging-binary-extensions.rst:106 msgid "Alternatives to handcoded accelerator modules" @@ -7655,6 +9614,9 @@ msgid "" "additional maintenance effort), a number of other alternatives should also " "be considered:" msgstr "" +"Se oni uzus etendaĵan modulon nur por plirapidigi kodon (post kiam profilo " +"markis tiujn partojn de la kodo, por kiuj la plirapidigo sufiĉe necesas " +"malgraŭ la plia bezonata mastrumado), oni konsideru kelkajn alternativojn:" #: ../source/guides/packaging-binary-extensions.rst:113 msgid "" @@ -7678,6 +9640,15 @@ msgid "" "having one live reference instead of two often won't break anything, but no " "references instead of one is a major problem)." msgstr "" +"por longe ruliĝanta programo, la ĝustatempe tradukita `interpretilo PyPy " +"`__ povas esti taŭga alternativo al la norma " +"interpretilo CPython. La ĉefobstaklo kontraŭ ekuzado de PyPy estas ofte " +"dependo de alia duumaĵa etendaĵo-modulo – dum PyPy ja imitas la C API de " +"CPython, modulo dependanta de tiu API kaŭzas problemojn por la ĝustatempa " +"tradukilo de PyPy, kaj la imitada tavolo ofte reliefigas kaŝitajn makulojn " +"en etendaĵo-modulo aktuale toleratan de CPython (ofte pri eraroj pri " +"referenco-kalkulado – objekto havanta unu vivan referencon anstatŭ du ne " +"estas problema, sed neniu referenco anstataŭ unu estas grave problema)." #: ../source/guides/packaging-binary-extensions.rst:130 msgid "" @@ -7690,6 +9661,13 @@ msgid "" "benefit of having a reduced barrier to entry for Python programmers " "(relative to other languages like C or C++)." msgstr "" +"`Cython `__ estas matura statika tradukilo, kiu povas " +"traduki la plejparton de Python-kodo al C-etendaĵomoduloj. La komenca " +"tradukado povas iom rapidigi la kodon (preterpasante la interpretilon " +"CPython), kaj la nedeviga statika tipado de Cython povas plu rapidi la " +"kodon. Uzado de Cython ankoraŭ havas la `malavantaĝojn `_ pri " +"duumaj etendaĵoj, sed havas la avantaĝon de kutimeco por Python-programantoj " +"(relative al aliaj lingvoj kiel C aŭ C++)." #: ../source/guides/packaging-binary-extensions.rst:139 msgid "" @@ -7700,6 +9678,11 @@ msgid "" "code is running, but can provide significant speed increases, especially for " "operations that are amenable to vectorisation." msgstr "" +"`Numba `__ estas pli nova ilo, kreita de anoj de " +"la scienca Python-komunumo, celanta uzi LLVM por rultempa tradukado de " +"partoj de Python-programo al maŝinkodo. Ĝi postulas la haveblon de LLVM je " +"tiu sistemo, sur kiu ruliĝas la kodo. Tamen ĝi povas multe plirapidigi la " +"kodon, speciale por operacioj vektorigeblaj." #: ../source/guides/packaging-binary-extensions.rst:148 msgid "Alternatives to handcoded wrapper modules" @@ -7720,6 +9703,8 @@ msgid "" "but they *can* significantly reduce the maintenance burden of keeping " "wrapper modules up to date." msgstr "" +"La ĉi-subaj manieroj ne simpligas la kazon de distribuo sed *ja* povas " +"simpligi la taskon de ĝisdatigado de volvantaj moduloj." #: ../source/guides/packaging-binary-extensions.rst:160 msgid "" @@ -7732,6 +9717,14 @@ msgid "" "automatic wrapping with Cython. It also supports performance-oriented Python " "implementations that provide a CPython-like C-API, such as PyPy and Pyston." msgstr "" +"Krom sia utileco por krei akcelilan modulon, `Cython `__ estas ankaŭ vaste uzata por krei volvantan modulon de API en C aŭ C++. " +"Por tio oni volvas la interfacojn malaŭtomate. Ekzistas multo da libereco " +"pri fasonado kaj optimumado de la volvanta kodo. Tamen, tio eble ne estas " +"bona elekto por rapide volvi grandegan API. Vidu la `liston de triapartiaj " +"iloj `_ por aŭtomata volvado " +"per Cython. Ĝi ankaŭ subtenas rapidajn Python-realigojn kun CPython-eca C-" +"API kiel PyPy kaj Pyston." #: ../source/guides/packaging-binary-extensions.rst:171 msgid "" @@ -7742,6 +9735,12 @@ msgid "" "`__, " "but doesn't require the Boost libraries or BJam." msgstr "" +":doc:`pybind11 ` estas pure C++11-a biblioteko provizanta " +"puran C++-interfacon al la API de CPython (kaj PyPy). Ĝi ne postulas " +"antaŭtraktadon; ĝi estas plene en ŝablona C++. Helpiloj inkluziviĝas por " +"konstruado kun Setuptools aŭ CMake. Ĝi estis bazita sur `Boost.Python " +"`__, " +"sed ne postulas la Boost-bibliotekojn aŭ BJam." #: ../source/guides/packaging-binary-extensions.rst:178 msgid "" @@ -7758,6 +9757,9 @@ msgid "" "JIT, allowing CFFI wrapper modules to participate fully in PyPy's tracing " "JIT optimisations." msgstr "" +"Unu el la ĉefavantaĝoj de ``cffi`` estas kongrueco kun la ĝustatempa " +"tradukado de PyPy, tiel ke volvanta modulo uzanta CFFI povas plene " +"partopreni en la spuradaj optimumigoj de la ĝustatempa tradukilo de PyPy." #: ../source/guides/packaging-binary-extensions.rst:188 msgid "" @@ -7874,6 +9876,10 @@ msgid "" "module against one version of Python, it is only guaranteed to work with the " "same minor version of Python and not with any other minor versions." msgstr "" +"La C API de CPython ne garantias stabilecon de ABI inter minoraj eldonoj " +"(3.2, 3.3, 3.4 ktp). Tio tipe signifas, ke se oni konstruas etendaĵo-modulon " +"por unu versio de Python, do ĝi nur garantiite funkcias por la sama minora " +"versio de Python kaj ne por aliaj minoraj versioj." #: ../source/guides/packaging-binary-extensions.rst:270 msgid "" @@ -7890,6 +9896,9 @@ msgid "" "information about the API / ABI stability guarantees, how to use the Limited " "API and the exact contents of the \"Limited API\"." msgstr "" +"La paĝo de CPython pri :doc:`stabileco de C API ` " +"detalas informojn pri la garantioj de la stabileco de API kaj ABI, kiel uzi " +"la Limigitan API, kaj la ekzakta enhavo de la «Limigita API»." #: ../source/guides/packaging-binary-extensions.rst:283 msgid "Building binary extensions" @@ -7918,6 +9927,9 @@ msgid "" "intend to support. This means that the number of wheels you need to build is " "the product of::" msgstr "" +"Por tipaj etendaĵoj, oni devas konstrui wheel-ojn por ĉiuj subtenataj " +"platformoj. Tio signifas, ke la nombro de konstruendaj wheel-oj estas la " +"jena produto::" #: ../source/guides/packaging-binary-extensions.rst:302 msgid "" @@ -7941,6 +9953,11 @@ msgid "" "extensions, install `Visual Studio Community Edition `__ - any recent version is fine." msgstr "" +"Antaŭ ol konstrui duuman etendaĵon, oni devas havi taŭgan tradukilon. Sur " +"Windows, la oficiala CPython-interpretilo estis konstruita per Visual C, kaj " +"oni uzu ĝin por konstrui kongruan duuman etendaĵon. Por starigi konstruan " +"medion por duuma etendaĵo, instalu `Visual Studio Community Edition `__ – ajna lastatempa versio taŭgas." #: ../source/guides/packaging-binary-extensions.rst:318 msgid "" @@ -7970,6 +9987,13 @@ msgid "" "structures, and so on. Tools for generating extension modules usually avoid " "these things for you." msgstr "" +"Ni ne rekomendas konstruadon por versio de Python antaŭ 3.5, ĉar malnova " +"versio de Visual Studio ne plu haveblas de Microsoft. Se oni devas konstrui " +"por malnova versio, oni agordu ``DISTUTILS_USE_SDK=1`` kaj `MSSdk=1`` por " +"uzi la aktuale aktivan version de MSVC, kaj oni zorge fasonu la etendaĵon ne " +"uzante ``malloc``/``free`` el malsamaj bibliotekoj, evitante dependon de " +"ŝanĝitaj datenstrukturoj ktp. Ilo por generado de etendaĵa modulo ofte " +"aŭtomate evitas tion." #: ../source/guides/packaging-binary-extensions.rst:337 msgid "Binary extensions for Linux" @@ -7982,6 +10006,10 @@ msgid "" "images provide a build environment with a glibc old enough to support most " "current Linux distributions on common architectures." msgstr "" +"Linux-duumaĵo devas uzi sufiĉe malnovan ``glibc`` por kongrueco kun malnovaj " +"distribuoj. La Docker-diskokopio por `manylinux `_ estas konstrua medio kun ``glibc`` sufiĉe malnova por la " +"plejmulto de aktualaj Linux-distribuoj sur oftaj arĥitekturoj." #: ../source/guides/packaging-binary-extensions.rst:345 msgid "Binary extensions for macOS" @@ -7998,6 +10026,13 @@ msgid "" "Spinning Wheels wiki `_." msgstr "" +"Binara kongrueco sur macOS dependas de la celata minimuma disponiga sistemo, " +"ekz. *10.9*, kio estas ordinare specifita per la media variablo " +"``MACOSX_DEPLOYMENT_TARGET`` dum konstruaĵo de duumaĵoj sur macOS. Dum " +"konstruado kun setuptools / distutils, oni specifas la disponiga celo per la " +"flago ``--plat-name``, ekz. kun la valoro ``macosx-10.9-x86_64``. Por oftaj " +"disponigaj celoj por Python-distribuoj por macOS, vidu `MacPython Spinning " +"Wheels Wiki `_." #: ../source/guides/packaging-binary-extensions.rst:357 msgid "Publishing binary extensions" @@ -8010,6 +10045,10 @@ msgid "" "using the build-backend and upload it to PyPI using :doc:`twine `." msgstr "" +"Eldonado de duuma etendaĵo al PyPI uzas la saman alŝutan meĥanismon kiel " +"eldonado de pure Python-a pako. Oni konstruas wheel-dosieron por la etendaĵo " +"per la konstrua malfasado kaj alŝutas ĝin al PyPI per :doc:`twine `." #: ../source/guides/packaging-binary-extensions.rst:365 msgid "Avoid binary-only releases" @@ -8023,6 +10062,10 @@ msgid "" "certain Linux distributions that build from source within their own build " "systems for the distro package repositories." msgstr "" +"Estas forte rekomendate, ke vi eldonu kaj la duumajn etendaĵojn kaj la " +"fontkodon por konstrui ilin. Tio permesas al uzantoj laŭbezone konstrui la " +"etendaĵon de fonto. Speciale, tio necesas por tiuj Linux-distribuoj, kiuj " +"konstruas de fonto per siaj propraj konstrusistemoj por siaj pakdeponejoj." #: ../source/guides/packaging-binary-extensions.rst:374 msgid "Weak linking" @@ -8055,6 +10098,12 @@ msgid "" "system generator `_ for Python binary extension modules." msgstr "" +"La pako `scikit-build `_ " +"helpas abstraktigi interplatforman konstruadon kaj provizas pliajn kapablojn " +"pri kreado de duumaj etendaĵaj pakoj. Pliaj informoj disponeblas ĉe la " +"paragrafo pri `la C-rultempo, tradukilo, kaj konstrusistema generilo " +"`_ por duumaj " +"etendaĵmoduloj de Python." #: ../source/guides/packaging-binary-extensions.rst:398 msgid "Introduction to C/C++ extension modules" @@ -8065,6 +10114,8 @@ msgid "" "For a more in depth explanation of how extension modules are used by CPython " "on a Debian system, see the following articles:" msgstr "" +"Por plia klarigo pri kiel CPython uzas etendaĵan modulon sur Debian-sistemo, " +"vidu la jenajn artikolojn:" #: ../source/guides/packaging-binary-extensions.rst:403 msgid "" @@ -8099,6 +10150,10 @@ msgid "" "aims to provide an overview of the most important packaging issues for such " "projects, with in-depth explanations and references." msgstr "" +"La retejo `pypackaging-native `_ " +"havas pliajn detalojn pri pakado de Python-pako kun indiĝena kodo. Ĝi estas " +"resumo de la plej gravaj problemoj pri pakado de tia projekto kune kun " +"detalaj klarigoj kaj referencoj." #: ../source/guides/packaging-binary-extensions.rst:415 msgid "" @@ -8106,6 +10161,9 @@ msgid "" "dependencies\"), the importance of the ABI (Application Binary Interface) of " "native code, dependency on SIMD code and cross compilation." msgstr "" +"Jen ekzemploj de diskutotaj temoj: ne-Python-a tradukita dependeco " +"(«indiĝena dependeco»), la graveco de la ABI (aplika binara interfaco) de " +"indiĝena kodo, dependeco sur SIMD-kodo, intertradukado." #: ../source/guides/packaging-namespace-packages.rst:5 msgid "Packaging namespace packages" @@ -8257,6 +10315,10 @@ msgid "" "need compatibility with packages already using this method. Also, :doc:" "`pkg_resources ` has been deprecated." msgstr "" +"Tiuj du metodoj por krei nomspacopakojn antaŭ :pep:`420`, nun estas " +"malnoviĝintaj kaj evitindaj krom se oni bezonas kongruecon kun pako jam " +"uzanta tiun metodon. Ankaŭ, :doc:`pkg_resources ` " +"estas evitinda." #: ../source/guides/packaging-namespace-packages.rst:165 msgid "" @@ -8290,6 +10352,10 @@ msgid "" "and Python 3. This is the recommended approach for the highest level of " "compatibility." msgstr "" +"Python 2.3 enkondukis la modulon :doc:`pkgutil ` kaj " +"la funkcion :py:func:`python:pkgutil.extend_path`. Oni povas uzi tiujn por " +"deklari nomspacopakon kongruan kun kaj Python 2.3+ kaj Python 3. Tio estas " +"la rekomendata metodo por la plej alta nivelo de kongrueco." #: ../source/guides/packaging-namespace-packages.rst:181 msgid "" @@ -8339,6 +10405,14 @@ msgid "" "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 "" +":doc:`Setuptools ` provizas la funkcion `pkg_resources." +"declare_namespace`_ kaj la argumenton ``namespace_packages`` de :func:" +"`~setuptools.setup`. Oni uzas tiujn kune por deklari nomspacan pakon. " +"Kvankam tiu maniero ne plu estas rekomendata, ĝi estas vaste uzata en " +"ekzistantaj nomspacaj pakoj. Se oi verkas novan distribuon en ekzistanta " +"nomspaca pako uzanta tiun metodon, estas rekomendate daŭre uzi tion, ĉar la " +"diversaj metodoj ne kongruas inter si, kaj ne konsilindas provi migri " +"ekzistantan pakon." #: ../source/guides/packaging-namespace-packages.rst:228 msgid "" @@ -8364,6 +10438,11 @@ msgid "" "cross-compatible. If the presence of setuptools is a concern then the " "package should just explicitly depend on setuptools via ``install_requires``." msgstr "" +"La kialo estis, ke en la malofta kazo kiam setuptools ne estas havebla, pako " +"povas funkcii kiel pkgutil-stila pako. Tio ne estas konsilinda, ĉar pkgutil " +"kaj pkg_resources-stilaj nomspacopakoj ne kongruas inter si. Se la ĉeesto de " +"setuptools estas problema, do la pako simple eksplicite dependu de " +"setuptools per ``install_requires``." #: ../source/guides/packaging-namespace-packages.rst:271 msgid "" @@ -8474,6 +10553,8 @@ 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 "" +"Viaj «estontaj» eldonantoj nun pretas por unua uzo kaj kreos viajn " +"projektojn aŭtomate post unua uzo." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:72 msgid "" @@ -8516,16 +10597,20 @@ msgid "" "Start it with a meaningful name and define the event that should make GitHub " "run this workflow:" msgstr "" +"Uzu signifan nomon, kaj difinu tiun eventon, kiu igos GitHub ruli la " +"laborfluon:" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:101 msgid "Checking out the project and building distributions" -msgstr "" +msgstr "Elpreni la projekton kaj konstrui distribuojn" #: ../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 "" +"Ni difinus du taskojn por eldoni al PyPI kaj Prova PyPI respektive kaj " +"ekstran taskon por konstrui la distribuajn pakojn." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 msgid "" @@ -8548,6 +10633,9 @@ 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 "" +"Nun ni povas konstrui la distribuojn el fonto kaj konservi ilin. En ĉi tiu " +"ekzemplo, ni uzos la pakon ``build``. Do aldonu la jenon al la listo de " +"paŝoj:" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:128 msgid "Defining a workflow job environment" @@ -8563,6 +10651,13 @@ msgid "" "acquiring an OpenID Connect token that the ``pypi-publish`` actions needs to " "implement secretless trusted publishing to PyPI." msgstr "" +"Nun, ni aldonu komencan agordon por la tasko eldoni al PyPI. Ĝi estas " +"procezo, kiu rulos komandojn difinotajn. En ĉi tiu gvidilo, ni uzas la plej " +"novan stabilan longdaŭre subtenatan version de Ubuntu provizitan de GitHub-" +"Agoj. Tio ankaŭ difinas GitHub-Medio por ruli la taskon, kaj retadreson por " +"montrado en la grafika fasado de GitHub. Plie ĝi subtenas akiri ĵetonon de " +"OpenID Connect, kiun la ago ``pypi-publish`` bezonas por sensekreta fidata " +"eldonado al PyPI." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:144 msgid "" @@ -8587,6 +10682,9 @@ msgid "" "action, it uploads the contents of the ``dist/`` folder into PyPI " "unconditionally." msgstr "" +"Tiu paŝo uzas la GitHub-ago `pypa/gh-action-pypi-publish`_: post elŝuto de " +"la distribua pako per la ago `download-artifact`_, ĝi alŝutas la enhavon de " +"la dosierujo ``dist/`` al PyPI senkondiĉe." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:163 msgid "Signing the distribution packages" @@ -8610,6 +10708,11 @@ msgid "" "further customised. See the `gh release documentation `_ as a reference." msgstr "" +"Unue, ĝi uzas la `GitHub-ago sigstore/gh-action-sigstore-python `_ por subskribi la distribuajn pakojn. " +"Sekve, ĝi kreas malplenan eldonon ĉe GitHub el la aktuala etikedo per la " +"komandlinia ilo ``gh``. Notu, ke tiu paŝo estas modifebla; vidu la " +"`dokumentaron pri gh release `_." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:176 msgid "" @@ -8621,6 +10724,12 @@ msgid "" "instructions. Specifically, the token needs the ``contents: write`` " "permission." msgstr "" +"Vi eble devas administri la permesojn de ``GITHUB_TOKEN`` por ŝalti krei la " +"GitHub-eldonon. Vidu `la dokumentaron de GitHub `_ por " +"instrukcioj. Specife, la ĵetono bezonas la permeson ``contents: write``." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:182 msgid "Finally, the signed distributions are uploaded to the GitHub Release." @@ -8632,6 +10741,9 @@ msgid "" "`removed from PyPI `_. " "However, this job is not mandatory for uploading to PyPI and can be omitted." msgstr "" +"Tio anstataŭigas GPG-subskribon, kiun `PyPI ne plu subtenas `_. Tamen, tiu tasko ne estas deviga " +"kaj estas ellasebla por alŝutado al PyPI." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:198 msgid "Separate workflow for publishing to TestPyPI" @@ -8642,6 +10754,8 @@ msgid "" "Now, repeat these steps and create another job for publishing to the " "TestPyPI package index under the ``jobs`` section:" msgstr "" +"Nun ripetu tiujn paŝojn, kreante alian taskon por eldonado al la pakindekso " +"Prova PyPI sub la sekcio ``jobs``:" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:210 msgid "" @@ -8649,6 +10763,9 @@ msgid "" "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 "" +"Postuli malaŭtomatan aprobadon en la GitHub-medio ``testpypi`` ordinare ne " +"necesas, ĉar ĝi laŭfasone ruliĝas post ĉiu enmeto en la ĉefbranĉon kaj ofte " +"indikas sanan eldonadan ĉenstablon." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:214 msgid "The whole CI/CD workflow" @@ -8749,6 +10866,10 @@ msgid "" "github.com>`_ or `Bitbucket `_) and run your " "project's test suite every time a new commit is made." msgstr "" +"Ekzistas pluraj gastigaj servoj por aŭtomata testado. Tiaj servoj ordinare " +"observadas la fontkodan deponejon (ekz. ^©e `GitHub `_ " +"aŭ `Bitbucket `_) kaj rulas la testaron post ĉiu " +"modifo." #: ../source/guides/supporting-multiple-python-versions.rst:55 msgid "" @@ -8756,6 +10877,9 @@ msgid "" "*multiple versions of Python*, giving rapid feedback about whether the code " "will work, without the developer having to perform such tests themselves." msgstr "" +"Tiaj servoj ankaŭ ofertas funkcion por ruli la testaron sur *multaj versioj " +"de Python*, rapide sciigante pri ĉu la kodo funkcias, sen malaŭtomata " +"testado far la aŭtoro." #: ../source/guides/supporting-multiple-python-versions.rst:59 msgid "" @@ -8764,6 +10888,10 @@ msgid "" "integration systems. There are two hosted services which when used in " "conjunction provide automated testing across Linux, Mac and Windows:" msgstr "" +"Vikipedio havas detalan `komparon `_ inter pluraj sistemoj por " +"kontinua integrado. Ekzistas du gastigitajn servojn, kiuj kune provizas " +"aŭtomatan testadon por Linux, Mac kaj Windows:" #: ../source/guides/supporting-multiple-python-versions.rst:65 msgid "" @@ -8789,12 +10917,17 @@ msgid "" "formatted file as specification for the instructions for testing. If any " "tests fail, the output log for that specific configuration can be inspected." msgstr "" +"Kaj `Travis CI`_ kaj Appveyor_ postulas `YAML `_-dosieron " +"specifantan la instrukciojn pri testado. Se iu testo malsukcesos, la eliga " +"protokolo pri tiu estas inspektebla." #: ../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 "" +"Por Python-projekto disponigota sur kaj Python 2 kaj Python 3 per unufonta " +"strategio, ekzistas kelkaj opcioj." #: ../source/guides/supporting-multiple-python-versions.rst:88 msgid "Tools for single-source Python packages" @@ -8811,6 +10944,13 @@ msgid "" "Armin Ronacher, can be used to automatically apply the code modifications " "provided by six_." msgstr "" +"'six '_ estas ilo verkita de Benjamin " +"Peterson por glatigi la diferencojn inter Python 2 kaj Python 3. La pako " +"six_ ĝuas vastan uzadon kaj estas rigardata kiel fidinda maniero verki unu-" +"fontan Python-modulon por kaj Python 2 kaj Python 3. La modulo six_ estas " +"uzebla ekde Python 2.5. Ilo nomita `modernize `_, verkita de Armin Ronacher, povas aŭtomate efektivigi la kodo-" +"modifojn per six_." #: ../source/guides/supporting-multiple-python-versions.rst:99 msgid "" @@ -8820,14 +10960,18 @@ msgid "" "interoperability between Python 2 and Python 3 with a language syntax that " "matches one of the two Python versions: one may use" msgstr "" +"Simile al six_, `python-future `_ " +"estas pako por kongrueco inter Python 2 kaj Python 3. Malkiel six_, tiu pako " +"celas kunfunkciigi Python 2 kaj Python 3 per lingva sintakso de unu el la du " +"Python-versioj: oni povas uzi" #: ../source/guides/supporting-multiple-python-versions.rst:106 msgid "a Python 2 (by syntax) module in a Python 3 project." -msgstr "modulo de sintakso Python 2 en projekto de Python 3." +msgstr "modulon de sintakso Python 2 en projekto de Python 3." #: ../source/guides/supporting-multiple-python-versions.rst:107 msgid "a Python 3 (by syntax) module in a *Python 2* project." -msgstr "modulo de sintakso Python 3 en projekto de *Python 2*." +msgstr "modulon de sintakso Python 3 en projekto de *Python 2*." #: ../source/guides/supporting-multiple-python-versions.rst:109 msgid "" @@ -8838,6 +10982,11 @@ msgid "" "``futurize`` and ``pasteurize`` that can be applied to either a Python 2 " "module or a Python 3 module respectively." msgstr "" +"Per la dudirekteco, python-future_ ofertas manieron konverti pakon de Python " +"2 al la sintakso de Python 3 modulon post modulo. Tamen, malkiel six_, " +"python_future_ nur subtenas Python 2.6+. Kiel six_, python_future_ provizas " +"du programetojn, ``futurize`` kaj ``pasteurize``, por modulo de Python 2 kaj " +"de Python 3 respektive." #: ../source/guides/supporting-multiple-python-versions.rst:116 msgid "" @@ -8847,6 +10996,11 @@ msgid "" "provides for forward-compatibility to Python 3. Any remaining compatibility " "problems would require manual changes." msgstr "" +"Uzo de six_ aŭ python_future_ aldonas ekstran rultempan dependecon al la " +"pako: kun python-future_, oni rulu la programon ``futurize`` kun la flago " +"``--stage1`` por efektivigi nur tiajn ŝanĝojn, kiajn Python 2.6+ jam " +"provizas por kongrueco kun Python 3. Ajna restanta problemo pri kongrueco " +"postulas malaŭtomatan modifon." #: ../source/guides/supporting-multiple-python-versions.rst:123 msgid "What's in which Python?" @@ -8861,6 +11015,12 @@ msgid "" "com/blog/201803/whats_in_which_python_3436.html>`__. These lists may be used " "to check whether any changes between Python versions may affect your package." msgstr "" +"Ned Batchelder listigas la ŝanĝojn en ĉiu eldono de Python por `Python 2 " +"`__, " +"`Python 3.0–3.3 `__ kaj `Python 3.4-3.6 `__. Per tiuj listoj oni " +"povas kontroli, ĉu ŝanĝoj inter versioj de Python gravas pri onia pako." #: ../source/guides/supporting-windows-using-appveyor.rst:5 msgid "Supporting Windows using Appveyor" @@ -8877,6 +11037,10 @@ msgid "" "the code on Windows, and building Windows-targeted binaries for projects " "that use C extensions." msgstr "" +"Tiu paragrafo temas pri kiel uzi la senkostan servon `Appveyor`_ de kontinua " +"integrado, por subteni Windows por via projekto. Tio inkluzivas testi la " +"kodon sur Windows, kaj konstrui Windows -duumaĵojn por projektoj uzantaj C-" +"etendaĵojn." #: ../source/guides/supporting-windows-using-appveyor.rst:19 msgid "" @@ -8884,6 +11048,9 @@ msgid "" "support can be a challenge, because setting up a suitable Windows test " "environment is non-trivial, and may require buying software licenses." msgstr "" +"Multaj projektoj estas verkitaj sur Unikso, kaj subteni Windows povas esti " +"malfacile, ĉar starigado de taŭga Windows-testmedio estas malsimpla kaj " +"povas postuli aĉetadon de programaj licencoj." #: ../source/guides/supporting-windows-using-appveyor.rst:23 msgid "" @@ -8893,6 +11060,10 @@ msgid "" "are Windows hosts and have the necessary compilers installed to build Python " "extensions." msgstr "" +"La servo Appveyor estas servo por kontinua integrado simile al la pli bone " +"konata servo `Travis`_ ofte uzata por testado de projektoj sur `GitHub`_. " +"Tamen, malkiel Travis, la konstruaj procezoj sur Appveyor gastigas Windows " +"kaj havas taŭgajn tradukilojn por konstrui Python-etendaĵojn." #: ../source/guides/supporting-windows-using-appveyor.rst:29 msgid "" @@ -8920,6 +11091,10 @@ msgid "" "given in `the Appveyor documentation `__. " "The free tier of account is perfectly adequate for open source projects." msgstr "" +"Por uzi Appveyor por konstrui wheel por Windows por via projekto, oni devas " +"havi konton ĉe Appveyor. La `dokumentaro de Appveyor `__ priskribas instrukciojn por krei konton. La senkosta konto " +"sufiĉas por malfermitkoda projekto." #: ../source/guides/supporting-windows-using-appveyor.rst:44 msgid "" @@ -8927,6 +11102,8 @@ msgid "" "your project is hosted on one of those two services, setting up Appveyor " "integration is straightforward." msgstr "" +"Appveyor integriĝas kun `GitHub`_ kaj `Bitbucket`_. Se via projekto estas " +"gastigata en unu el tiuj du servoj, ekstarigo de Appveyor facilas." #: ../source/guides/supporting-windows-using-appveyor.rst:48 msgid "" @@ -8934,6 +11111,9 @@ msgid "" "will automatically build your project each time a commit occurs. This " "behaviour will be familiar to users of Travis." msgstr "" +"Post starigo de konto ĉe Appveyor kaj agordado de la projekto, Appveyor " +"aŭtomate konstruos la projekton post ĉiu modifo. Tiu konduto similas al " +"Travis." #: ../source/guides/supporting-windows-using-appveyor.rst:53 msgid "Adding Appveyor support to your project" @@ -8946,6 +11126,10 @@ msgid "" "be included in the file are covered in the Appveyor documentation. This " "guide will provide the details necessary to set up wheel builds." msgstr "" +"Por difini la tielan manieron, kiel Appveyor konstruos vian projekton, oni " +"aldonu dosieron :file:`appveyor.yml` al via projekto. La plenaj detaloj pri " +"la dosiero troviĝas en la dokumentaro de Appveyor. Ĉi tiu gvidilo provizas " +"tiajn detalojn, kiaj necesas por konstrui wheel-on." #: ../source/guides/supporting-windows-using-appveyor.rst:60 msgid "" @@ -8957,6 +11141,12 @@ msgid "" "version of Visual Studio used includes 64-bit compilers with no additional " "setup)." msgstr "" +"Appveyor apriore inkluzivas ĉiujn tradulkilĉenojn necesajn por konstrui " +"etendaĵojn por Python. Por Python 2.7, 3.5+ kaj 32-bitaj versioj de 3.3 kaj " +"3.4, la iloj funkcias senmodife. Sed por 64-bitaj versioj de Python 3.3 kaj " +"3.4, oni devas iomete agordi por sciigi distutils pri la loko de la 64-bita " +"tradukilo. (Ekde versio 3.5, la uzata versio de Visual Studio inkluzivas 64-" +"bitan tradukilon sen plia agordo.)" #: ../source/guides/supporting-windows-using-appveyor.rst:68 msgid "appveyor.yml" @@ -8991,6 +11181,13 @@ msgid "" "support 2.6 in this document (as Windows users still using Python 2 are " "generally able to move to Python 2.7 without too much difficulty)." msgstr "" +"La sekcio ``environment`` gravas por difini tiujn versiojn de Python, por " +"kiuj wheel-oj kreiĝos. La Python-versioj 2.6, 2.7, 3.3, 3.4 kaj 3.5, en kaj " +"32-bitaj kaj 64-bitaj konstruoj, estas apriore instalitaj en Appveyor. La " +"ekzempla dosiero konstruas por ĉiuj el tiuj medioj krom Python 2.6. " +"Instalado por Python 2.6 estas pli komplika, ĉar pip ne estas apriore " +"inkluzivita. Ni ne subtenas 2.6 en ĉi tiu dokumento (uzanto de Windows " +"ankoraŭ uzanta Python 2 ordinare povas facile migri al Python 2.7)." #: ../source/guides/supporting-windows-using-appveyor.rst:87 msgid "" @@ -9028,6 +11225,13 @@ msgid "" "you are using ``tox`` there are some additional configuration changes you " "will need to consider, which are described below." msgstr "" +"La sekcio ``test_script`` estas la loko, kie oni rulas la testojn de la " +"projekto. La donita dosiero rulas la testaron per ``setup.py test``. Se oni " +"nur interesiĝas pri konstruado de wheel-oj kaj ne pri rulado de testoj sur " +"Windows, oni povas anstataŭigi tiun sekcion per neniaĵo kiel ``echo " +"Preterpasis Testojn``. Oni eble deziras uzi alian testilon kiel ``nose`` aŭ :" +"file:`py.test`. Aŭ oni deziras uzi testozorgilon kiel ``tox`` – tamen, se " +"oni uzas ``tox``, oni konsideru la ĉi-subajn pliajn ŝanĝojn pri agordoj." #: ../source/guides/supporting-windows-using-appveyor.rst:108 msgid "" @@ -9036,12 +11240,18 @@ msgid "" "(specifically, ``setuptools``) then the ``setup.py bdist_wheel`` command " "will build your wheels." msgstr "" +"La ``after_test`` ruliĝas post fino de la testoj; tial oni konstruas la " +"wheel tie. Supozante, ke via projekto uzas la rekomendatajn ilojn (specife " +"``setuptools``), do la komando ``setup.py bdist_wheel`` konstruos la wheel." #: ../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 "" +"Notu, ke wheel konstruiĝos nur, se la testoj sukcesos. Se oni atendas " +"malsukceson de testoj sur Windows, oni povas preterpasi ilin laŭ la maniero " +"ĉi-supra." #: ../source/guides/supporting-windows-using-appveyor.rst:118 msgid "Support script" @@ -9054,6 +11264,10 @@ msgid "" "and 3.4. For projects which do not need a compiler, or which don't support " "3.3 or 3.4 on 64-bit Windows, only the :file:`appveyor.yml` file is needed." msgstr "" +"La dosiero :file:`appveyor.yml` dependas de unu helpa programeto, kiu " +"agordas la medion por uzi la SDK-tradukilon por 64-bitaj konstruoj je Python " +"3.3 kaj 3.4. Tiuj projektoj, kiuj ne bezonas tradukilon aŭ ne subtenas 3.3 " +"aŭ 3.4 sur 64-bita Windows, nur bezonas la dosieron :file:`appveyor.yml`." #: ../source/guides/supporting-windows-using-appveyor.rst:125 msgid "" @@ -9066,6 +11280,13 @@ msgid "" "Python 3.3 or 3.4, so don't set the environment variable for any other " "builds." msgstr "" +"`build.cmd `__ estas programeto " +"por Windows rulanta unu komandon en medio kun la taŭga tradukilo por la " +"elektita versio de Python. Oni nur bezonas difini la median variablon " +"``DISTUTILS_USE_SDK`` kiel ``1``, kaj la programeto aŭtomatigas ĉion. Tio " +"starigas la SDK por 64-bita Python 3.3 or 3.4; tial ne difinu la median " +"variablon por alia konstruo." #: ../source/guides/supporting-windows-using-appveyor.rst:132 msgid "" @@ -9089,6 +11310,12 @@ msgid "" "architecture. You can download those wheels and upload them to PyPI as part " "of your release process." msgstr "" +"Post fino de konstruado, la konstruitaj wheel-dosieroj estos haveblaj ĉe la " +"stirpanelo de Appveyor por via projekto. Ili troviĝas ĉe la konstruo-" +"statopaĝo por ĉiu konstruo. Ĉe la supro de la eligaĵo de la konstruo estas " +"hiperligoj, unu el kiuj estas «Artefaktoj». Tiu paĝo inkluzivas hiperligojn " +"al la wheel-oj por la Python-versio kaj arĥikteturo. Vi povas elŝuti tiujn " +"wheel-ojn kaj alŝuti ilin al PyPI dum via eldona procedo." #: ../source/guides/supporting-windows-using-appveyor.rst:149 msgid "Testing with tox" @@ -9100,6 +11327,9 @@ msgid "" "ensures that tests are run in an isolated environment using the exact files " "that will be distributed by the project." msgstr "" +"Multaj projektoj uzas la ilon :doc:`Tox ` por testado. Tio " +"certigas, ke testoj ruliĝu en izolita medio uzante la ekzaktajn dosierojn " +"distribuotajn de la projekto." #: ../source/guides/supporting-windows-using-appveyor.rst:155 msgid "" @@ -9107,6 +11337,9 @@ msgid "" "considerations (in actual fact, these issues are not specific to Appveyor, " "and may well affect other CI systems)." msgstr "" +"Por uzi ``tox`` sur Appveyor, ekzistas kelkaj pliaj konsideroj (fakte tiaj " +"problemoj ne estas specifaj al Appveyor kaj povas ekzisti en aliaj sistemoj " +"de kontinua integrado)." #: ../source/guides/supporting-windows-using-appveyor.rst:159 msgid "" @@ -9115,6 +11348,9 @@ msgid "" "control the compiler, this \"test isolation\" feature will cause the tests " "to use the wrong compiler by default." msgstr "" +"Apriore ``tox`` nur liveras subaron da mediaj variablojn al la testo-" +"procezoj. Ĉar ``distutils`` uzas mediajn variablojn por regi la tradukilon, " +"tia «testo-izolanta» funkcio kaŭzos miselektadon de tradukilo en testo." #: ../source/guides/supporting-windows-using-appveyor.rst:164 msgid "" @@ -9123,6 +11359,10 @@ msgid "" "list the additional environment variables to be passed to the subprocess. " "For the SDK compilers, you need" msgstr "" +"Por devigi ``tox`` pasi la necesajn mediajn variablojn al subprocezo, oni " +"devas agordi la opcion ``passenv`` de ``tox`` inkluzivante la necesajn " +"mediajn variablojn liverotajn al subprocezo. Por la SDK-tradukilo, oni uzas " +"la jenon:" #: ../source/guides/supporting-windows-using-appveyor.rst:169 msgid "``DISTUTILS_USE_SDK``" @@ -9148,6 +11388,10 @@ msgid "" "supplied :file:`build.cmd` script does this by default whenever " "``DISTUTILS_USE_SDK`` is set." msgstr "" +"La opcio ``passenv`` estas agordebla en :file:`tox.ini`, aŭ (se oni preferas " +"ne inkluzivi Windows-specifajn agordojn en ĝeneralaj projektaj dosieroj) per " +"la media variablo ``TOX_TESTENV_PASSENV``. La provizita programeto :file:" +"`build.cmd` faras tion implicite, se ``DISTUTILS_USE_SDK`` ekzistas." #: ../source/guides/supporting-windows-using-appveyor.rst:180 msgid "" @@ -9166,6 +11410,9 @@ msgid "" "where there are (for example) two installations of Python 3.4 (32-bit and 64-" "bit) available, but only one ``py34`` environment in ``tox``." msgstr "" +"Tamen, tio *ne* funkcias bone kun sistemo de kontinua integrado por Windows, " +"kiel ekzemple Appveyor, en kiu ekzistas du instaloj de Python 3.4 (32-bita " +"kaj 64-bita), sed nur unu medio ``py34`` en ``tox``." #: ../source/guides/supporting-windows-using-appveyor.rst:191 msgid "" @@ -9174,6 +11421,10 @@ msgid "" "that was used to run ``tox``. This will ensure that when Appveyor runs the " "tests, they will be run with the configured interpreter." msgstr "" +"Por ruli testojn per ``tox``, tial, projekto uzu la aprioran medion ``py`` " +"en ``tox``, kiu uzas la Python-interpretilon interpretantan ``tox``. Tio " +"certigas, ke kiam Appveyor rulos testojn, ilin interpretos la agordita " +"interpretilo." #: ../source/guides/supporting-windows-using-appveyor.rst:196 msgid "" @@ -9182,6 +11433,9 @@ msgid "" "their :file:`tox.ini` file. Doing so is, however, outside the scope of this " "document." msgstr "" +"Por subteni ruladon en la medio ``py``, projekto de komplika agordo por " +"``tox`` eble devas modifi la dosieron :file:`tox.ini`. Tio, tamen, estas " +"ekster la temo de ĉi tiu dokumento." #: ../source/guides/supporting-windows-using-appveyor.rst:202 msgid "Automatically uploading wheels" @@ -9202,6 +11456,10 @@ msgid "" "clear that uploading new wheels after every commit is desirable (although " "some projects may wish to do this)." msgstr "" +"Alternative, oni povas aldoni paŝon ``twine upload`` al la konstruo. La " +"donita dosiero :file:`appveyor.yml` ne faras tion, ĉar ne certas, ĉu oni " +"deziras alŝuti novan wheel post ĉiu enmeto (kvankam kelkaj projektoj fakte " +"deziras tion)." #: ../source/guides/supporting-windows-using-appveyor.rst:215 msgid "External dependencies" @@ -9212,6 +11470,8 @@ msgid "" "The supplied scripts will successfully build any distribution that does not " "rely on 3rd party external libraries for the build." msgstr "" +"La donitaj programetoj sukcese konstruos ĉian ajn distribuon ne dependantan " +"de triapartia ekstera biblioteko por la konstruado." #: ../source/guides/supporting-windows-using-appveyor.rst:220 msgid "" @@ -9272,6 +11532,9 @@ msgid "" "`virtualenv` (PyPA project) and :doc:`venv ` (part of " "the Python standard library, though missing some features of virtualenv)." msgstr "" +"La normaj iloj por krei kaj uzi virtualan medion malaŭtomate estas :ref:" +"`virtualenv` (projekto de PyPA) kaj :doc:`venv ` (parto " +"de la norma biblioteko de Python, sed sen kelkaj funkcioj de virtualenv)." #: ../source/guides/tool-recommendations.rst:28 msgid "Installing packages" @@ -9285,7 +11548,7 @@ msgid "" "in most Python installations through the standard library package :doc:" "`ensurepip `." msgstr "" -":ref:`Pip` estas la norma ilo por instali pakojn el:term:`PyPI `. Vi eble volas legi la rekomendojn de pip pri :doc:" "`sekura instalado `. Pip estas havebla apriore " "en multaj instaloj de Python per la norma biblioteka pako :doc:`ensurepip " @@ -9301,6 +11564,12 @@ msgid "" "wide applications making use of the same Python interpreter (especially on " "Linux)." msgstr "" +"Alternative, konsideru :ref:`pipx` por la specifa uzkado de instalado de " +"Python-programo distribuata per PyPI kaj rulebla ĉe la komandlinio. Pipx " +"estas volvaĵo ĉirkaŭ pip kaj venv, kiu instalas programon en ĝian propran " +"virtualan medion. Tio avertas konfliktojn inter la dependecoj de diversaj " +"programoj kaj kun sistemaj programoj uzantaj la saman Python-interpretilon " +"(speciale sur Linux)." #: ../source/guides/tool-recommendations.rst:43 msgid "" @@ -9337,6 +11606,9 @@ msgid "" "files, which contain the exact versions of all packages installed into an " "environment, for reproducibility purposes." msgstr "" +":ref:`pip-tools` kaj :ref:`Pipenv` estas du konataj iloj por krei " +"serurdosierojn, enhavantajn la ekzaktajn versiojn de ĉiuj pakoj instalitaj " +"en medion por reproduktebleco." #: ../source/guides/tool-recommendations.rst:63 msgid "Build backends" @@ -9348,6 +11620,9 @@ msgid "" "particular tool, only to enumerate common tools. Different use cases often " "need specialized workflows." msgstr "" +"Bonvolu konscii, ke ĉi tiu dokumento ne celas direkti la leganton al iu ilo; " +"ĝi nur celas listigi oftajn ilojn. Diversaj uzkazoj ofte bezonas specialajn " +"laborfluojn." #: ../source/guides/tool-recommendations.rst:71 msgid "" @@ -9372,7 +11647,7 @@ msgid "" "Hatchling_ -- developed with but separate from :ref:`Hatch`. Supports " "plugins." msgstr "" -"Hatchling_ – evoluigata kun sed aparte de:ref:`Hatch`. Subtenas " +"Hatchling_ – evoluigata kun sed aparte de :ref:`Hatch`. Subtenas " "kromprogramojn." #: ../source/guides/tool-recommendations.rst:79 @@ -9380,7 +11655,7 @@ msgid "" "PDM-backend_ -- developed with but separate from :ref:`PDM`. Supports " "plugins." msgstr "" -"PDM-backend_ – evoluigata kun sed aparte de:ref:`PDM`. Subtenas " +"PDM-backend_ – evoluigata kun sed aparte de :ref:`PDM`. Subtenas " "kromprogramojn." #: ../source/guides/tool-recommendations.rst:81 @@ -9414,6 +11689,8 @@ msgid "" "standardisation efforts are now deprecated and only *temporarily kept* for " "compatibility." msgstr "" +"Se vi uzas setuptools, atentu, ke kelkaj funkcioj estiĝintaj antaŭ normigado " +"estas nun evitindaj kaj nur *provizore ekzistantaj* pro kongrueco." #: ../source/guides/tool-recommendations.rst:96 msgid "" @@ -9432,6 +11709,10 @@ msgid "" "table ` in :file:`pyproject.toml` " "instead), and the ``easy_install`` command (cf. :ref:`pip vs easy_install`)." msgstr "" +"Jen aliaj evitindaj trajtoj, kiujn oni **ne** uzu: la argumento " +"``setup_requires`` de ``setup()`` (anstataŭe uzu :ref:`la tabelon [build-" +"system] ` en :file:`pyproject.toml`), " +"kaj la komando ``easy_install`` (vidu :ref:`pip vs easy_install`)." #: ../source/guides/tool-recommendations.rst:108 msgid "" @@ -9439,6 +11720,9 @@ msgid "" "from the standard library in Python 3.12, although it still remains " "available from setuptools." msgstr "" +"**Ne** uzu :ref:`distutils`, kiu estas evitinda kaj forigita el la norma " +"biblioteko en Python 3.12, kvankam ĝi estas ankoraŭ disponebla per " +"setuptools." #: ../source/guides/tool-recommendations.rst:112 msgid "" @@ -9446,6 +11730,8 @@ msgid "" "to use a build system with dedicated support for the language the extension " "is written in, for example:" msgstr "" +"Por pako kun :term:`etendaĵa modulo `, oni uzu " +"konstrusistemon subtenantan la lingvon de la etendaĵo. Ekzemple:" #: ../source/guides/tool-recommendations.rst:116 msgid "" @@ -9486,6 +11772,10 @@ msgid "" "`build`. It will invoke whichever build backend you :ref:`declared " "` in :file:`pyproject.toml`." msgstr "" +"La norma ilo por konstrui :term:`fontan distribuon ` kaj :term:`wheel ` alŝuteblajn al PyPI estas :ref:" +"`build`. Ĝi rulas la malfasadon :ref:`deklaritan ` en :file:`pyproject.toml`." #: ../source/guides/tool-recommendations.rst:130 msgid "" @@ -9503,6 +11793,9 @@ msgid "" "distribute wheels for multiple platforms, use :ref:`cibuildwheel` as part of " "your CI setup to build distributable wheels." msgstr "" +"Se vi havas :term:`etendaĵan modulo ` kaj volas distribui " +"wheel-ojn por pluraj platformoj, uzu :ref:`cibuildwheel` kiel parton de via " +"kontinua integrado por konstrui distribueblajn wheel-ojn." #: ../source/guides/tool-recommendations.rst:140 msgid "Uploading to PyPI" @@ -9617,6 +11910,10 @@ msgid "" "without worrying about affecting the real index. TestPyPI is hosted at `test." "pypi.org `_" msgstr "" +"Prova PyPI estasa aparta servilo de la :term:`Python-Pakindekso ` permesanta al vi elprovi la distribuadajn ilojn kaj " +"procezojn sen perturbado de la reala indekso. Prova PyPI troviĝas ĉe `test." +"pypi.org `_" #: ../source/guides/using-testpypi.rst:13 msgid "Registering your account" @@ -9628,6 +11925,9 @@ msgid "" "separate user account specifically for TestPyPI. Go to https://test.pypi.org/" "account/register/ to register your account." msgstr "" +"Ĉar Prova PyPI havas datenbankon apartan de la vera PyPI, oni bezonas " +"apartan konton specifan por Prova PyPI. Iru al https://test.pypi.org/account/" +"register/ por registri vin mem." #: ../source/guides/using-testpypi.rst:19 msgid "" @@ -9656,6 +11956,10 @@ msgid "" "``sampleproject`` is the name of your project that you uploaded. It may take " "a minute or two for your project to appear on the site." msgstr "" +"Vi povas kontroli, ĉu via pako estis sukcese alŝutita, vizitante la " +"retadreson ``https://test.pypi.org/project/``, en kiu " +"```` estas la nomo de via alŝutita projekto. Eblas, ke vi devas " +"atendi unu aŭ du minutojn." #: ../source/guides/using-testpypi.rst:39 msgid "Using TestPyPI with pip" @@ -9675,6 +11979,9 @@ msgid "" "specify ``--extra-index-url`` to point to PyPI. This is useful when the " "package you're testing has dependencies:" msgstr "" +"Se oni volas permesi al pip elŝuti pakojn el PyPI, oni specifas ``--extra-" +"index-url`` por montri PyPI. Tio utilas, se la testata pako havas " +"dependecojn:" #: ../source/guides/using-testpypi.rst:73 msgid "Setting up TestPyPI in :file:`.pypirc`" @@ -9698,6 +12005,9 @@ msgid "" "as other tools such as linters, type checkers, etc. There are three possible " "TOML tables in this file." msgstr "" +"``pyproject.toml`` estas agorda dosiero uzata de iloj pri pakado kaj aliaj " +"iloj kiel sintakskontroliloj, tipkontroliloj ktp. Ekzistas tri eblaj TOML-" +"tabeloj en tiu dosiero." #: ../source/guides/writing-pyproject-toml.rst:11 msgid "" @@ -9705,6 +12015,9 @@ msgid "" "declare which :term:`build backend` you use and which other dependencies are " "needed to build your project." msgstr "" +"La tabelo ``[build-system]`` estas **rekomendegata**. Ĝi permesas deklari " +"la :term:`konstruan malfasadon ` uzotan kaj la dependecojn " +"necesajn por konstrui la projekton." #: ../source/guides/writing-pyproject-toml.rst:15 msgid "" @@ -9723,6 +12036,10 @@ msgid "" "because its contents are defined by each tool. Consult the particular tool's " "documentation to know what it can contain." msgstr "" +"La ilo ``[tool]`` havas ilo-specifajn subtabelojn kiel ``[tool.hatch]``, " +"``[tool.black]``, ``[tool.mypy]``. Ni nur mencias tiun tabelon, ĉar ĝiajn " +"enhavojn difinas iloj. Legu la dokumentaron de iu ilo por la enhavo de la " +"subtabelo." #: ../source/guides/writing-pyproject-toml.rst:25 msgid "" @@ -9742,29 +12059,35 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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 "" -"Je Aŭgusto 2024, Poetry_ estas notinda konstrua malfasado ne uzanta la " -"tabelon ``[project]``. Anstataŭe ĝi uzas la tabelon ``[tool.poetry]``. Ankaŭ " -"la konstrua malfasado setuptools_ subtenas kaj la tabelon ``[project]`` kaj " -"la malnovan formon en ``setup.cfg`` aŭ ``setup.py``." +"Notinda escepto estas Poetry_, kiu antaŭ versio 2.0 (eldonita je la 5a de " +"Januaro 2025) ne uzis la tabelon ``[project]``. Anstataŭe ĝi uzis la tabelon " +"``[tool.poetry]``. Ekde versio 2.0, ĝi subtenas ambaŭ. Ankaŭ la konstrua " +"malfasado setuptools_ subtenas kaj la tabelon ``[project]`` kaj la malnovan " +"formon en ``setup.cfg`` aŭ ``setup.py``." -#: ../source/guides/writing-pyproject-toml.rst:37 +#: ../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 "" +"Por niva projekto, uzu la tabelo ``[project]``. Uzu ``setup.py`` nur se ia " +"programa agornado necesas (ekz. por konstrui C-etendaĵon). Tamen, la formoj " +"``setup.cfg`` kaj ``setup.py`` ankoraŭ validas. Vidu :ref:`setup-py-" +"deprecated`." -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "Deklari la konstruan malfasadon" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -9773,30 +12096,41 @@ msgid "" "dependencies. You can also constrain the versions, e.g., ``requires = " "[\"setuptools >= 61.0\"]``." msgstr "" +"La tabelo ``[build-system]`` enhavas ŝlosilon ``build-backend`` specifantan " +"la uzotan konstruan malfasadon. Ĝi ankaŭ enhavas ŝlosilon ``requires`` " +"listigantan dependecojn por konstrui la projekton – tio estas tipe nur la " +"pako de la konstrua malfasado,sed ĝi povas enhavi aliajn dependecojn. Vi " +"povas ankaŭ limigi la versiojn, ekzemple ``requires = [\"setuptools >= " +"61.0\"]``." -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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 "" +"Ordinare oni simple kopias la sugestojn de la dokumentaro de la konstrua " +"malfasado (post after :ref:`elekto de la konstrua malfasado `). Jen la valoroj por oftaj konstruaj malfasadoj:" -#: ../source/guides/writing-pyproject-toml.rst:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "Statikaj kaj dinamikaj metadatenoj" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "La resto de ĉi tiu gvidilo temas pri la tabelo ``[project]``." -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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 "" +"Plejparte, vi rekte skribas la valoron de kampo ``[project]``. Ekzemple: " +"``requires-python = \">= 3.8\"``, aŭ ``version = \"1.0\"``." -#: ../source/guides/writing-pyproject-toml.rst:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -9804,24 +12138,26 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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 "" +"La konstrua malfasado respondecas por plenigi dinamikajn kampojn. Vidu la " +"dokumentaron de via konstrua malfasado por la preciza maniero de plenigado." -#: ../source/guides/writing-pyproject-toml.rst:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "Bazaj informoj" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "``name``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 msgid "" "Put the name of your project on PyPI. This field is required and is the only " "field that cannot be marked as dynamic." @@ -9829,7 +12165,7 @@ msgstr "" "Uzu la nomon de via projekto ĉe PyPI. Ĉi tiu kampo estas necesa kaj estas la " "ununura kampo ne markebla kiel dinamika." -#: ../source/guides/writing-pyproject-toml.rst:133 +#: ../source/guides/writing-pyproject-toml.rst:134 msgid "" "The project name must consist of ASCII letters, digits, underscores " "\"``_``\", hyphens \"``-``\" and periods \"``.``\". It must not start or end " @@ -9839,7 +12175,7 @@ msgstr "" "«``_``», streketoj «``-``» kaj punktoj «``.``». Ĝi devas ne komenciĝi nek " "finiĝi per substreko, streketo aŭ punkto." -#: ../source/guides/writing-pyproject-toml.rst:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -9853,18 +12189,18 @@ msgstr "" "dependecon sur ĝi per la jenaj nomoj: ``Bonaj-Ajhoj``, ``bonaj.ajhoj``, " "``BONAJ_AJHOJ``, ``BoNaJ__-.-__aJhOJ``." -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "``version``" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "Enmetu la version de via projekto." -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 msgid "" "Some more complicated version specifiers like ``2020.0.0a1`` (for an alpha " "release) are possible; see the :ref:`specification ` for " @@ -9873,31 +12209,34 @@ msgstr "" "Eblas pli komplika versio-specifilo kiel ``2020.0.0a1`` (por alfa-eldono); " "vidu la :ref:`specifon ` por plenaj detaloj." -#: ../source/guides/writing-pyproject-toml.rst:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "Ĉi tiu kampo estas deviga, sed ĝi estas ofte markita dinamika per" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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 "" +"Tio permesas uzkazon kiel generadon de version el atributo ``__version__`` " +"aŭ etikedo ĉe Git. Vidu la diskuton :ref:`single-source-version` por pliaj " +"detaloj." -#: ../source/guides/writing-pyproject-toml.rst:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "Dependecoj kaj postuloj" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies``/``optional-dependencies``" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "Se via projekto havas dependecojn, listigu ilin jene:" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." @@ -9905,27 +12244,32 @@ msgstr "" "Vidu :ref:`Dependeco-specifilojn ` por la plena " "sintakso por limigi versiojn." -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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 "" +"Oni eble volas laŭvoligi kelkajn dependecojn, se ili nur necesas por specifa " +"funkcio de la pako. Tiukaze, metu ilin en ``optional-dependencies``." -#: ../source/guides/writing-pyproject-toml.rst:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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 "" +"Ĉiu ŝlosilo difinas «pakan ekstraĵon». En la ĉi-supra ekzemplo, oni povus " +"uzi ekzemploe ``pip install nomo-de-via-projekto[gui]`` por instali vian " +"projekton kun subteno por grafika fasado, aldonante dependecon sur PyQt5." -#: ../source/guides/writing-pyproject-toml.rst:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "``requires-python``" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." @@ -9933,11 +12277,11 @@ msgstr "" "Tio ebligas deklari la minimuman version de Python subtenatan [#requires-" "python-upper-bounds]_." -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "Krei ruleblajn komandojn" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." @@ -9945,28 +12289,36 @@ msgstr "" "Por instali komandon kiel parton de via pako, deklaru ĝin en la tabelo " "``[project.scripts]]``." -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"be available. Executing this command will do the equivalent of ``import sys; " +"from spam import main_cli; sys.exit(main_cli())``." msgstr "" +"En ĉi tiu ekzemplo, instalado de la projekto disponigos la komandon ``spam-" +"cli``. Rulado de tiu komando ekvivalentas ``import sys; from spam import " +"main_cli; sys.exit(main_cli())``." -#: ../source/guides/writing-pyproject-toml.rst:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 "" +"Sur Windows, programeto tiel pakita bezonus terminalon; tial, se oni lanĉus " +"ĝin el grafika programo, terminalo ŝprucus. Por malhelpi tion, uzu la " +"tabelon ``[project.gui-scripts]`` anstataŭ ``[project.scripts]``." -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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 "" +"Tiukaze, lanĉado de via programo el la komandlinio tuj redonos regpovon al " +"vi, lastante la programon ruliĝi malfone." -#: ../source/guides/writing-pyproject-toml.rst:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." @@ -9974,16 +12326,16 @@ msgstr "" "La diferenco inter ``[project.scripts]`` kaj ``[project.gui-scripts]`` nur " "gravas sur Windows." -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "Pri via projekto" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "``authors``/``maintainers``" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 msgid "" "Both of these fields contain lists of people identified by a name and/or an " "email address." @@ -9991,13 +12343,13 @@ msgstr "" "Ambaŭ tiuj kampoj enhavas listojn de homoj identigitaj per nomoj kaj/aŭ " "retpoŝtaj adresoj." -#: ../source/guides/writing-pyproject-toml.rst:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "``description``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 msgid "" "This should be a one-line description of your project, to show as the " "\"headline\" of your project page on PyPI (`example `_), and " @@ -10007,55 +12359,116 @@ msgstr "" "projekta paĝo ĉe PyPI (`jene `_), kaj interalie en listoj de " "serĉrezultoj (`jene `_)." -#: ../source/guides/writing-pyproject-toml.rst:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "``readme``" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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 "" +"Tiu estas longa priskribo de via projekto montrota sur la projekta paĝo ĉe " +"PyPI. Ofte, oni simple metas la dosiernomon de dosiero ``README.md`` aŭ " +"``README.rst``." -#: ../source/guides/writing-pyproject-toml.rst:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "La dosierformo de README estas aŭtomate divenita el la dosiersufikso:" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "``README.md`` → `GitHub-stila Markdown `_," -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "``README.rst`` → `reStructuredText `_ (sen etendaĵoj Sphinx)." -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "Vi povas ankaŭ eksplici la dosierformon jene:" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "``license``" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" +":pep:`639` (akceptita en la Aŭgusto de 2024) ŝanĝis la manieron deklari la " +"kampon ``license``. Certigu, ke via preferata konstrua malfasado komprenas :" +"pep:`639` antaŭ ol provi uzi la novajn gvidliniojn. Je la Februaro de 2025, " +"ankoraŭ nek :doc:`setuptools ` nek :" +"ref:`flit ` subtenas :pep:`639`." + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "Licenco-deklaro laŭ :pep:`639`" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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 "" +"Tiu estas valida :term:`SPDX-licenco-esprimo ` " +"konstistanta el unu aŭ pluraj :term:`licenco-identigiloj `. La plena listo de licencoj troviĝas ĉe `la retejo de SPDX " +"`_. La subtenataj versioj de la listo estas 3.17 aŭ pli " +"novaj." + +#: ../source/guides/writing-pyproject-toml.rst:352 +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 "" +"Ĝenerale, estas bone uzi norman, bone konatan licencon, kaj por eviti " +"konfuziĝon, kaj ĉar kelkaj organizaĵoj evitas programon sen aprobita licenco." + +#: ../source/guides/writing-pyproject-toml.rst:356 +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 "" +"Se via projekto havas licencon sen ekzistanta SPDX-identigilo, vi povas krei " +"propran identigilo de la formo ``LicenseRef-[identigilo]``. La propra " +"identigilo devas obei `paragrafon 10.1 `_ de la normo SPDX, " +"versio 2.2 aŭ ajna pli nova kongrua versio." + +#: ../source/guides/writing-pyproject-toml.rst:367 +msgid "Legacy license declaration" +msgstr "Malnovstila licenco-deklaro" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" "Vi povas esti unu el du formoj. Vi povas meti vian licencon en dosieron, " -"ofte ``LICENSE`` aŭ ``LICENSE.txt``, kaj ligi la dosieron al ĉi tie:" +"ofte :file:`LICENSE` aŭ :file:`LICENSE.txt`, kaj ligi la dosieron al ĉi tie:" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "aŭ vi povas skribi la nomon de la licenco:" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -10063,14 +12476,93 @@ msgid "" "standard, well-known license, both to avoid confusion and because some " "organizations avoid software whose license is unapproved.)" msgstr "" +"Se oni uzas norman, vaste konatan licencon, oni ne devas uzi ĉi tiun kampon; " +"anstataŭe, oni uzu unu el la :ref:`klasigiloj ` komenciĝantaj " +"per ``License::``. (Ĝenerale, estas bone uzi norman, bone konatan licencon, " +"kaj por eviti konfuziĝon, kaj ĉar kelkaj organizaĵoj evitas programon sen " +"aprobita licenco.)" + +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "``license-files``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" +":pep:`639` (akceptita je la Aŭgusto de 2024) enkondukis la kampon ``license-" +"files``. Certigu, ke via preferata konstrua malfasado subtenas :pep:`639` " +"antaŭ ol deklari la kampon. Je la Februaro de 2025, :doc:`setuptools " +"` kaj :ref:`flit ` ankoraŭ ne subtenas :pep:`639`." + +#: ../source/guides/writing-pyproject-toml.rst:402 +msgid "" +"This is a list of license files and files containing other legal information " +"you want to distribute with your package." +msgstr "" +"Tio estas listo de licenco-dosieroj kaj dosieroj enhavantaj aliajn jurajn " +"informojn, kiujn vi volas distribui kun via pako." + +#: ../source/guides/writing-pyproject-toml.rst:410 +msgid "The glob patterns must follow the specification:" +msgstr "La patroneo devas observi la specifon:" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" +"Literoj, ciferoj, substrekoj (``_``), streketoj (``-``) kaj punktoj (``.``) " +"prezentas sin laŭlitere." + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "La metasignoj ``*``, ``?``, ``**`` kaj signintervaloj [] eblas." + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "Dosierloko-apartigilo devas esti la suprenstreko (``/``)." + +#: ../source/guides/writing-pyproject-toml.rst:416 +msgid "" +"Patterns are relative to the directory containing :file:`pyproject.toml`, " +"and thus may not start with a slash character." +msgstr "" +"Patroneo estas relativa al la dosierujo enhavanta :file:`pyproject.toml`, " +"kaj tial ne povas komenciĝi per suprenstreko." + +#: ../source/guides/writing-pyproject-toml.rst:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "Indikilo de patra dosierujo (``..``) devas esti ne uzita." + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "Ĉiu patroneo devas kongrui kun almenaŭ unu dosiero." + +#: ../source/guides/writing-pyproject-toml.rst:421 +msgid "" +"Literal paths are valid globs. Any characters or character sequences not " +"covered by this specification are invalid." +msgstr "" +"Eksplicita dosierloko estas valida patroneo. Ajna skribsigno aŭ signoĉeno ne " +"diskutita de ĉi tiu specifo estas nevalida." -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "``keywords``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 msgid "" "This will help PyPI's search box to suggest your project when people search " "for these keywords." @@ -10078,13 +12570,13 @@ msgstr "" "Tio helpos la serĉilon de PyPI sugesti vian projekton, kiam oni serĉas tiujn " "ŝlosilvortojn." -#: ../source/guides/writing-pyproject-toml.rst:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "``classifiers``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." @@ -10092,7 +12584,7 @@ msgstr "" "Listo de PyPI-klasigiloj rilataj al via projekto. Jen la `plena listo de " "klasigiloj `_." -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -10101,20 +12593,23 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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 "" +"Por malhelpi alŝuti pakon al PyPI, uzu la specialan klasigilon ``Private :: " +"Do Not Upload``. PyPI ĉiam malakceptas pakon de klasigilo komenciĝanta per " +"``Private ::``." -#: ../source/guides/writing-pyproject-toml.rst:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "``urls``" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 msgid "" "A list of URLs associated with your project, displayed on the left sidebar " "of your PyPI project page." @@ -10122,15 +12617,19 @@ msgstr "" "Listo de retadresoj asociitaj al via projekto, montrotaj sur la maldekstra " "flankpanelo de via projekta paĝo ĉe PyPI." -#: ../source/guides/writing-pyproject-toml.rst:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 "" +"Vidu :ref:`well-known-labels` por listo de etikedoj bone konataj de PyPI kaj " +"aliaj pakiloj, kaj `la dokumentaron de PyPI pri projektaj metadatenoj " +"`_ por PyPI-specifa " +"pritraktado de retadresoj." -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 msgid "" "Note that if the label contains spaces, it needs to be quoted, e.g., " "``Website = \"https://example.com\"`` but ``\"Official Website\" = \"https://" @@ -10140,14 +12639,17 @@ msgstr "" "``Website = \"https://example.com\"`` sed ``\"Official Website\" = \"https://" "example.com\"``." -#: ../source/guides/writing-pyproject-toml.rst:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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 "" +"Uzanto uzu :ref:`bone konatajn etikedojn ` por projektaj " +"retadresoj taŭge, ĉar iloj pri metadatenoj (kiel pakindeksoj) povas pli bone " +"montri tiujn." -#: ../source/guides/writing-pyproject-toml.rst:434 +#: ../source/guides/writing-pyproject-toml.rst:508 msgid "" "For example in the following metadata, neither ``MyHomepage`` nor " "``\"Download Link\"`` is a well-known label, so they will be rendered " @@ -10156,41 +12658,50 @@ msgstr "" "Ekzemple, en la jenaj metadatenoj, ne ``MyHomepage`` nek ``\"Download " "Link\"`` estas bone konata etikedo kaj tial montriĝos laŭvorte:" -#: ../source/guides/writing-pyproject-toml.rst:444 +#: ../source/guides/writing-pyproject-toml.rst:518 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 "" +"Tamen en ĉi tiu metadateno, ambaŭ ``HomePage`` kaj ``DOWNLOAD`` ekvivalentas " +"bone konatajn etikedojn (``homepage`` kaj ``download``) kaj estas " +"prezenteblaj tiel (kiel la ĉefpaĝo kaj la elŝutejo de la projekto " +"respektive)." -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "Altnivelaj kromprogramoj" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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 "" +"Kelkaj pakoj estas etendeblaj per kromprogramoj, ekzemple Pytest_ kaj " +"Pygments_. Por krei tian kromprogramon, oni devas deklari ĝin en subtabelo " +"de ``[project.entry-points]`` jene:" -#: ../source/guides/writing-pyproject-toml.rst:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" "Vidu la :ref:`Gvidilon pri kromprogramoj ` por pliaj " "informoj." -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "Plena ekzemplo" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " "information regarding possible problems." msgstr "" +"Estu singarda pri supraj limoj kiel ``requires-python = \"<= 3.10\"`` ĉi " +"tie. `Jen artikolo `_ pri eblaj problemoj." #: ../source/index.rst:-1 msgid "" @@ -10237,6 +12748,9 @@ msgid "" "continuous improvement are key to success. The overview and flow sections " "provide a starting point for understanding the Python packaging ecosystem." msgstr "" +"Komprenado de pakado de Python estas vojaĝo. Pacienco kaj daŭra plibonigado " +"necesas por sukceso. La paragrafoj pri superrigardo kaj laborfluo estas " +"deirpunkto por kompreni la Python-pakadan ekosistemon." #: ../source/index.rst:44 msgid "" @@ -10292,6 +12806,8 @@ msgid "" "users who are already familiar with Python packaging and are looking for " "specific information." msgstr "" +"Gvidilo detalas paŝojn por iu tasko. Gvidilo estas por uzanto jam konanta " +"pakadon de Python kaj serĉas specifajn informojn." #: ../source/index.rst:75 msgid "" @@ -10460,6 +12976,12 @@ msgid "" "interoperability, resolve dependencies, manage package resources, and do " "other similar functions." msgstr "" +"``distlib`` estas biblioteko de malaltnivelaj funkcioj pri pakado kaj " +"distribuado de Python-programoj. ``distlib`` realigas plurajn rilatajn PEP-" +"ojn (normojn Python Enhancement Proposal) kaj utilas por verki triapartian " +"pakilon, kiu faras kaj alŝutas duumajn kaj fontajn :term:`distribuojn " +"` kunfunkcipove, solvas dependecojn, administras " +"pakajn resursojn, ktp." #: ../source/key_projects.rst:82 msgid "" @@ -10501,6 +13023,10 @@ msgid "" "in Python 3.12. Setuptools bundles the standalone copy of distutils, and it " "is injected even on Python < 3.12 if you import setuptools first or use pip." msgstr "" +"Tial :ref:`distutils` iĝis evitinda ekde Python 3.10 per :pep:`632` kaj " +"estis :doc:`forigita ` el la norma biblioteko je " +"Python 3.12. Setuptools enhavas memstaran kopion de distutils kaj injektas " +"ĝin, eĉ por Python < 3.12, kiam oni unue importas setuptools aŭ uzas pip." #: ../source/key_projects.rst:116 msgid "flit" @@ -10563,6 +13089,11 @@ msgid "" "to configure, version, specify dependencies for, and publish packages to " "PyPI. Its plugin system allows for easily extending functionality." msgstr "" +"Hatch estas unuigita komandlinia ilo por facile administri dependecojn kaj " +"izoli mediojn por Python-programistoj. Aŭtoroj de Python-pako uzas Hatch kaj " +"ĝian :term:`konstruan malfasadon ` por agordi pakojn, spuri " +"versiojn, specifi dependecojn, kaj eldoni pakojn al PyPI. La kromprograma " +"sistemo de Hatch faciligas etendado de ĝiaj funkcioj." #: ../source/key_projects.rst:157 msgid "packaging" @@ -10635,6 +13166,9 @@ msgid "" "incorporated into a wide range of development workflows via its command-line " "interface (CLI)." msgstr "" +"Ĝi provizas la necesajn ĉeffunkciojn por serĉi, elŝuti, kaj instali pakojn " +"el PyPI kaj aliaj Python-pakindeksoj kaj estas integrebla en multajn " +"evoluajn laborfluojn per la komandlinia fasado (CLI)." #: ../source/key_projects.rst:204 msgid "Pipenv" @@ -10658,6 +13192,10 @@ msgid "" "txt`` and also check for CVEs in `Pipfile`_ using `safety `_." msgstr "" +"Pipenv estas projekto celanta provizi ĉiajn bonaĵojn al la mondo de Python. " +"Ĝi jungas :ref:`Pipfile`, :ref:`pip`, kaj :ref:`virtualenv` al unu ilĉenon. " +"Ĝi povas aŭtomate importi ``requirements.txt`` kaj kontroli vundeblecojn en " +"`Pipfile`_ per `safety `_." #: ../source/key_projects.rst:216 msgid "" @@ -10667,6 +13205,11 @@ msgid "" "with hash-locked dependency specifiers, and eases uninstallation of packages " "and dependencies." msgstr "" +"Pipenv helpas uzantoj komandlinie administri mediojn, dependecojn kaj " +"importitajn pakojn. Ĝi ankaŭ funkcias bone sur Windows (malkiel kelkaj aliaj " +"iloj), faras kaj kontrolas haketaĵojn de dosieroj (por obei haketaĵe " +"ŝlositajn dependeco-specifilojn), kaj faciligas malinstaladon de pakoj kaj " +"dependaĵoj." #: ../source/key_projects.rst:225 msgid "Pipfile" @@ -10761,6 +13304,10 @@ msgid "" "Python :term:`distributions `, especially ones that " "have dependencies on other packages." msgstr "" +"Setuptools (kiu inkluzivas ``easy_install``) estas kolekto de plibonigaĵoj " +"por la modulo ``distutils`` de Python permesanta pli facile konstrui kaj " +"distribui :term:`distribuojn ` por Python, speciale " +"tiujn dependantajn de aliaj pakoj." #: ../source/key_projects.rst:289 msgid "trove-classifiers" @@ -10800,6 +13347,14 @@ msgid "" "the project hosts discussions on proposed classifiers and requests for new " "classifiers." msgstr "" +"La pako ``trove-classifiers`` enhavas liston de validaj klasigiloj kaj " +"evitindaj klasigiloj (parigitaj kun la anstataŭantaj klasigiloj). Uzu tiun " +"pakon por konfirmi klasigilon en pako alŝutota al PyPI. Ĉar tiu listo de " +"klasigiloj estas kodo, oni povas instali kaj importi ĝin, por pli facila " +"laborfluo ol la `listo ĉe PyPI `_. La " +"`cimdatenbanko `_ de la " +"projekto gastigas diskutojn pri proponitaj klasigiloj kaj petoj por novaj " +"klasigiloj." #: ../source/key_projects.rst:314 msgid "twine" @@ -10868,7 +13423,7 @@ msgid "" "downloads." msgstr "" "La aktuala programaro funkciiganta la :term:`Python-Pakindekson )`. Ĝi troviĝas ĉe `pypi.org `_. La " +"Package Index (PyPI)>)`. Ĝi troviĝas ĉe `pypi.org `_. La " "implicita fonto de elŝutado per :ref:`pip`." #: ../source/key_projects.rst:364 @@ -10891,6 +13446,9 @@ msgid "" "extension for creating :term:`wheel distributions `. Additionally, " "it offers its own command line utility for creating and installing wheels." msgstr "" +"Precipe, la projekto wheel provizas la :ref:`setuptools`-etendaĵon " +"``bdist_wheel`` por krei :term:`wheel-distribuon `. Krome, ĝi " +"provizas komandlinian ilaĵon por krei kaj instali wheel-on." #: ../source/key_projects.rst:375 msgid "" @@ -10900,6 +13458,11 @@ msgid "" "check metadata for compliance, and repair the wheel and metadata to properly " "link and include external shared libraries in a package." msgstr "" +"Vidu ankaŭ `auditwheel `__, kiu estas " +"ilo por kontroli kaj ripari Python-pakon en la duuma formo wheel. Ĝi povas " +"malkovri dependecojn, kontroli la observecon de metadatenoj, kaj ripari la " +"wheel kaj metadatenojn, ligante kaj inkluzivante eksterajn komunajn " +"bibliotekojn en pakon." #: ../source/key_projects.rst:384 msgid "Non-PyPA Projects" @@ -10926,6 +13489,9 @@ msgid "" "based. It lets you create a buildout configuration and reproduce the same " "software later." msgstr "" +"Buildout estas Python-baza konstrusistemo por krei, kombini kaj disponigi " +"programon el pluraj partoj, eble ne-Python-bazaj. Verkinte agordon por " +"buildout, oni povas reprodukti la saman programon poste." #: ../source/key_projects.rst:403 msgid "conda" @@ -10965,6 +13531,10 @@ msgid "" "virtual environment management and deployment of binary extensions and other " "binary code." msgstr "" +"Conda estas komplete aparta de :ref:`pip`, virtualenv kaj wheel, sed " +"provizas multajn el la funkcioj de tiuj, kiel administradon de pakoj, " +"administradon de virtualaj medioj kaj disponigadon de duumaj etendaĵoj kaj " +"alia duuma kodo." #: ../source/key_projects.rst:420 msgid "" @@ -10976,6 +13546,12 @@ msgid "" "are a wide variety of packages from the community supported `conda-forge " "project `__" msgstr "" +"Conda ne instalas pakojn el PyPI – ĝi povas nur administri pakojn specife " +"por conda, disponeblajn ĉe «conda-kanalo», kiel tiujn sur `anaconda.org " +"`__, aŭ ĉe loka (ekz. intrareta) pakservilo. Krom la " +"«aprioraj» kanaloj administrataj de `Anaconda, Inc. `__, ekzistas multaj pakoj en la komunume subtenata `projekto conda-" +"forge `__" #: ../source/key_projects.rst:426 msgid "" @@ -10986,6 +13562,12 @@ msgid "" "latest/user-guide/tutorials/build-pkgs-skeleton.html>`__: a tool to " "automatically make conda packages from Python packages available on PyPI." msgstr "" +"Notu, ke oni povas instali :ref:`pip` en conda, funkciigante ĝin apud conda " +"por administri :term:`distribuojn ` el PyPI. Oni ankaŭ " +"povas konstrui conda-pakon el Python-fontpako per ilo kiel `conda skeleton " +"`__, kiu aŭtomate faras conda-pakon el Python-pako " +"ĉe PyPI." #: ../source/key_projects.rst:435 msgid "devpi" @@ -11028,6 +13610,10 @@ msgid "" "the package index. It supports serving the hash, core-metadata, and yank-" "status." msgstr "" +"dumb-pypi estas simpla :term:`pakindeksa ` statikdosiera " +"retejogenerilo, kies generitaj dosieroj devas esti gastigitaj de servilo de " +"statikaj dosieroj por funkcii kiel pakindekso. Ĝi subtenas haketaĵojn, " +"kernajn metadatenojn, kaj fortiritecon." #: ../source/key_projects.rst:464 msgid "enscons" @@ -11052,6 +13638,14 @@ msgid "" "sdists that can be automatically built by :ref:`pip`, and wheels that are " "independent of enscons." msgstr "" +"Enscons estas pakilo por Python surbaze de `SCons`_. Ĝi konstruas fontajn " +"distribuojn kaj wheel-ojn kongruajn kun :ref:`pip` sen uzado de distutils aŭ " +"setuptools, eĉ por distribuoj kun C-etendaĵoj. La arĥitekturo kaj filozofio " +"de Enscons diferencas de :ref:`distutils`. Anstataŭ aldoni funkcion por " +"konstruado al Python-pakada sistemo, enscons aldonas Python-specifajn " +"funkciojn al ĝeneralcela konstrusistemo. Enscons helpas konstrui fontan " +"distribuon aŭtomate konstrueblan per :ref:`pip` kaj wheel-on sendependan de " +"enscons." #: ../source/key_projects.rst:485 msgid "Flask-Pypi-Proxy" @@ -11101,6 +13695,13 @@ msgid "" "distribution stateless, cached, and branchable. It is used by some " "researchers but has been lacking in maintenance since 2016." msgstr "" +"Hashdist estas biblioteko por konstrui neradikan programan distribuon. " +"Hashdist celas esti «la Debiano por tiuj kazoj, en kiuj Debiano ne taŭgas». " +"Python-uzanto pensu pri Hashdist kiel potenca hibrido de :ref:`virtualenv` " +"kaj :ref:`buildout`. Ĝi celas solvi la problemon de instalado de scienca " +"programo kaj igi distribuadon de pakoj senstata, enkaŝmemorigita kaj " +"branĉebla. Ĝi estas uzata de kelkaj esploristoj, sed ne estas prizorgata " +"ekde 2016." #: ../source/key_projects.rst:516 msgid "Maturin" @@ -11120,6 +13721,10 @@ msgid "" "It supports building wheels for python 3.7+ on Windows, Linux, macOS and " "FreeBSD, can upload them to PyPI and has basic PyPy and GraalPy support." msgstr "" +"Maturin estas konstrua malfasado por etendaĵo-modulo verkita en Rust, kaj " +"estas mem verkita en Rust. Ĝi subtenas konstrui wheel por Python 3.7+ sur " +"Windows, Linux, macOS kaj FreeBSD. Ĝi povas alŝuti wheel al PyPI kaj ankaŭ " +"baze subtenas PyPY kaj GraalPy." #: ../source/key_projects.rst:529 msgid "meson-python" @@ -11140,6 +13745,10 @@ msgid "" "package. It supports a wide variety of languages, including C, and is able " "to fill the needs of most complex build configurations." msgstr "" +"``meson-python`` estas konstrua malfasado uzanta la konstrusistemon Meson_. " +"Ĝi permesas al aŭtoroj de Python-pakoj uzi Meson_ kiel la konstrusistemon de " +"sia pako. Ĝi subtenas diversajn lingvojn inkluzive de C kaj povas plenumi la " +"bezonojn de plej komplikaj konstruagordoj." #: ../source/key_projects.rst:544 msgid "multibuild" @@ -11155,6 +13764,9 @@ msgid "" "`wheels ` for Linux, macOS, and (less flexibly) Windows. Also see :" "ref:`cibuildwheel`." msgstr "" +"Multibuild estas kontinuintegrada programaro por konstrui kaj testi Python-:" +"term:`wheel ` por Linux, macOS, kaj (malpli flekseble) Windows. Ankaŭ " +"vidu :ref:`cibuildwheel`." #: ../source/key_projects.rst:554 msgid "nginx_pypi_cache" @@ -11244,6 +13856,12 @@ msgid "" "their program, update all dependencies (a feature :ref:`pip` currently does " "not provide), and create layers of constraints for the program to obey." msgstr "" +"pip-tools estas ilaro por tiuj sistemadministrantoj kaj eldonmastrumistoj de " +"Python, kiuj volas determinisman konstruadon kaj ĝisdatajn versiojn de " +"dependecoj. Uzanto povas specifi iun eldono de dependeco per haketaĵo, " +"facile fari liston de postuloj el informoj en aliaj partoj de la programo, " +"ĝisdatigi ĉiujn dependecojn (jen funkcio mankanta en :ref:`pip` aktuale), " +"kaj krei tavolojn da limigoj obeotaj de la programo." #: ../source/key_projects.rst:612 msgid "pip2pi" @@ -11282,6 +13900,11 @@ msgid "" "that are optimized for installation onto Raspberry Pi computers. Raspberry " "Pi OS pre-configures pip to use piwheels.org as an additional index to PyPI." msgstr "" +"piwheels estas retejo, kaj programo funkciiganta la retejon, kiu elŝutas " +"fontajn distribuajn pakojn el PyPI kaj tradukas ilin al duumaj wheel-oj " +"optimumigitaj por komputiloj Raspberry Pi. La mastruma sistemo Raspberry Pi " +"OS apriore agordas pip por uzi piwheels.org kiel ekstran indekson kune kun " +"PyPI." #: ../source/key_projects.rst:638 msgid "poetry" @@ -11341,6 +13964,10 @@ msgid "" "`Pulp `_. Pulp-python supports mirrors backed by " "local or `AWS S3`_, package upload, and proxying to multiple package indexes." msgstr "" +"Pulp-python estas la Python-a :term:`pakindeksa ` " +"kromprogramo por `Pulp `_. Pulp-python subtenas " +"spegulon bazitan sur lokaj dosieroj aŭ `AWS S3`_, alŝutadon de pakoj, kaj " +"peradon al pluraj pakindeksoj." #: ../source/key_projects.rst:679 msgid "PyPI Cloud" @@ -11361,6 +13988,9 @@ msgid "" "redirect/cached proxying for PyPI, as well as authentication and " "authorisation." msgstr "" +"PyPI Cloud estas :term:`pakindeksa ` servilo uzanta `AWS S3`_ " +"aŭ alian nubkonservejan servon aŭ lokajn dosierojn. PyPI Cloud subtenas " +"redirektadon kaj kaŝmemoran peradon al PyPI, aŭtentikigon kaj rajtigon." #: ../source/key_projects.rst:695 msgid "pypiprivate" @@ -11404,6 +14034,12 @@ msgid "" "Organizations who use pypiserver usually download packages both from " "pypiserver and from PyPI." msgstr "" +"pypiserver estas minimumisma programo servanta privantan :term:`Python-" +"pakindekson ` (el loka dosierujo) por organizaĵo, realiganta " +"simplan API kaj TTT-legilan fasadon. Oni povas alŝuti privatan pakon per " +"norma alŝutilo, uzanto povas elŝuti kaj instali pakon per :ref:`pip`, sen " +"publika eldonado. Organizaĵo uzanta pypiserver kutime elŝutas pakojn el kaj " +"pypiserver kaj PyPI." #: ../source/key_projects.rst:722 msgid "PyScaffold" @@ -11469,6 +14105,13 @@ msgid "" "large projects, the user can install `ninja `__ (also available on PyPI)." msgstr "" +"Scikit-build estas volvilo de :ref:`setuptools` por CPython konstruanta C/C+" +"+/Fortran/Cython-etendaĵojn. Ĝi uzas `cmake `__ (haveblan ĉe PyPI) por pli bone subteni pliajn tradukilojn, " +"konstrusistemojn, intertradukadon, kaj lokigado de dependecoj kaj rilataj " +"konstruo-postuloj. Por rapidigi kaj paraleligi konstruadon de granda " +"projekto, oni povas instali `ninja `__ " +"(ankaŭ haveblan ĉe PyPI)." #: ../source/key_projects.rst:769 msgid "scikit-build-core" @@ -11493,6 +14136,12 @@ msgid "" "dependencies and their associated build requirements. CMake/Ninja are " "automatically downloaded from PyPI if not available on the system." msgstr "" +"Scikit-build-core estas konstrua malfasado por etendaĵoj por CPython en C/C+" +"+/Fortran/Cython. Ĝi permesas verki etendaĵojn per `cmake `__ (havebla ĉe PyPI) por pli bone subteni pliajn tradukilojn, " +"konstrusistemojn, intertradukadon, kaj serĉadon de dependecoj kaj asociitaj " +"konstruaj postuloj. Ĝi aŭtomate elŝutos CMake/Ninja el PyPI, se ili ne jam " +"ekzistas sur la sistemo." #: ../source/key_projects.rst:785 msgid "shiv" @@ -11513,6 +14162,9 @@ msgid "" "Its primary goal is making distributing Python applications and command line " "tools fast & easy." msgstr "" +"shiv estas komandlinia ilo por konstrui plene memsufiĉa Python-zip-aplikaĵo " +"laŭ :pep:`441`, sed inkluzivante ĉiajn dependaĵojn. Ĝi ĉefe celas rapidigi " +"kaj faciligi distribuadon de Python-programoj kaj komandliniaj iloj." #: ../source/key_projects.rst:799 msgid "simpleindex" @@ -11533,6 +14185,10 @@ msgid "" "for example `AWS S3`_, with a custom plugin) directories of packages, and " "supports custom plugins." msgstr "" +"simpleindex estas :term:`pakindekso `, kiu enkursigas " +"retadresojn al pluaj pakindeksoj (inkluzive de PyPI), disponigas lokajn (aŭ " +"nube gastigitajn, ekzemple ĉe `AWS S3`_, per kromprogramo) dosierujojn de " +"pakoj, kaj subtenas kromprogramojn." #: ../source/key_projects.rst:814 msgid "" @@ -11586,6 +14242,10 @@ msgid "" "automate incrementing package version numbers, updating changelogs, tagging " "releases in source control, and uploading new packages to PyPI." msgstr "" +"``zest.releaser`` estas Python-paka eldonilo, kiu estas abstrakta tavolo " +"sur :ref:`twine`. Python-programisto uzas ``zest.releaser`` por aŭtomatigi " +"alkrementadon de versiaj numeroj, ĝisdatigadon de ŝanĝoprotokolo, etikedigon " +"de eldonoj en versikontrola sistemo, kaj alŝutadon de nova pako al PyPI." #: ../source/key_projects.rst:846 msgid "Standard Library Projects" @@ -11610,6 +14270,9 @@ msgid "" "environment. In most cases, end users won't use this module, but rather it " "will be used during the build of the Python distribution." msgstr "" +"Pako en la Norma Biblioteko de Python, kiu ebligas instaladon de :ref:`pip` " +"al ekzistanta Python-instalo aŭ virtuala medio. Ordinare uzanto ne rekte " +"uzas tiun modulon; ĝi estas uzata dum la konstruado de la Python-distribuo." #: ../source/key_projects.rst:864 msgid "http.server" @@ -11629,6 +14292,9 @@ msgid "" "website, for example as a :term:`package index ` (see :ref:" "`Hosting your Own Simple Repository`)." msgstr "" +"Pako kaj komandlinia interfaco, kiu gastigas dosierujon al retejo, ekzemple " +"kiel :term:`pakindekson ` (vidu :ref:`Gastigi vian Propran " +"Simplan Deponejon `)." #: ../source/key_projects.rst:876 msgid "venv" @@ -11649,6 +14315,10 @@ msgid "" "information, see the section on :ref:`Creating and using Virtual " "Environments`." msgstr "" +"Pako en la Norma Biblioteko de Python (ekde Python 3.3) por krei :term:" +"`Virtualan Medion `. Por pli da informoj, vidu la " +"paragrafon :ref:`Krei kaj uzi virtualajn mediojn `." #: ../source/news.rst:2 msgid "News" @@ -11669,7 +14339,7 @@ msgstr "Septembro 2019" #: ../source/news.rst:10 msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" msgstr "" -"Aldonis gvidilon pri eldonado de distribuoj per GitHub Actions. (:pr: '647 ')" +"Aldonis gvidilon pri eldonado de distribuoj per GitHub Actions. (:pr:`647`)" #: ../source/news.rst:13 msgid "August 2019" @@ -12348,7 +15018,7 @@ msgid "" msgstr "" "Kiel ĝeneralcela programlingvo, Python estas uzebla por multaj celoj. Vi " "povas verki retejon aŭ industrian roboton aŭ ludon por viaj amikoj, kaj " -"multe pli, uzante la saman kernan teknikon." +"multe pli, uzante la saman kernan teĥnikon." #: ../source/overview.rst:12 msgid "" @@ -12365,6 +15035,9 @@ msgid "" "Python's plethora of packaging options. Read on to choose the best " "technology for your next project." msgstr "" +"Jen superrigardo de ĝeneralcela decidarbo por elekti inter la abundo da " +"opcioj pri pakado de Python. Legu ĝin por elekti la plej bonan teĥnikon por " +"via projekto." #: ../source/overview.rst:23 msgid "Thinking about deployment" @@ -12375,6 +15048,8 @@ 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 "" +"Pako ekzistas por instalado (aŭ *disponigado*). Tial, antaŭ ol paki ion ajn, " +"oni havu respondojn al la jenaj demandoj pri disponigo:" #: ../source/overview.rst:29 msgid "" @@ -12418,6 +15093,9 @@ msgid "" "code to developers, which you can read about in :doc:`guides/distributing-" "packages-using-setuptools`." msgstr "" +"Eble vi konas PyPI, ``setup.py``, kaj ``wheel``-dosieroj. Jen kelkaj iloj de " +"la ekosistemo de Python por distribui Python-kodon al programistoj; vi povas " +"legi pri ili en :doc:`guides/distributing-packages-using-setuptools`." #: ../source/overview.rst:50 msgid "" @@ -12437,6 +15115,9 @@ msgid "" "redistributed and reused. You will also need to ensure it's written for the " "right version of Python, and only relies on the standard library." msgstr "" +"Python-dosiero dependanta nur de la norma biblioteko estas redistribuebla " +"kaj reuzebla. Oni ankaŭ devas certigi, ke ĝi estis verkita por la ĝusta " +"versio de Python kaj nur dependas de la norma biblioteko." #: ../source/overview.rst:63 msgid "" @@ -12453,6 +15134,9 @@ msgid "" "files, need additional libraries, or need a specific version of Python, " "hence the options below." msgstr "" +"Tamen, tiu metodo ne funkcias bone por projekto konsistanta el multaj " +"dosieroj, bezonanta pliajn bibliotekojn, au postulanta specifan version de " +"Python; tial la ĉi-subaj opcioj." #: ../source/overview.rst:75 msgid "Python source distributions" @@ -12464,6 +15148,9 @@ msgid "" "a directory structure. Any directory containing Python files can comprise " "an :term:`Import Package`." msgstr "" +"Se via kodo konsistas el pluraj Python-dosieroj, ĝi estas kutime organizita " +"en dosierujan strukturon. Dosierujo enhavanta Python-dosierojn povas esti :" +"term:`Importa Pako `." #: ../source/overview.rst:81 msgid "" @@ -12489,6 +15176,10 @@ msgid "" "depend on other Python packages, you can go to the :ref:`source-distribution-" "format` specification to learn more." msgstr "" +"La *sdist* de Python estas densigita arĥivo (de dosiersufikso ``.tar.gz``) " +"enhavanta unu aŭ plurajn pakojn aŭ modulojn. Se via kodo konsistas nur el " +"Python kaj vi nur dependas de aliaj pakoj verkitaj en Python, vi povas lerni " +"plu ĉe la normo :ref:`source-distribution-format`." #: ../source/overview.rst:97 msgid "" @@ -12498,6 +15189,11 @@ msgid "" "org/project/numpy>`_), you will need to use the format detailed in the next " "section, which also has many advantages for pure-Python libraries." msgstr "" +"Se vi dependas de ne Python-a kodo aŭ ne-Python-a pako (kiel `libxml2 " +"`_ por `lxml `_ aŭ BLAS-bibliotekoj por `numpy `_), vi devas uzi la formon detalitan en la sekva paragrafo, kiu estas " +"ankaŭ utila eĉ por pure Python-a biblioteko." #: ../source/overview.rst:104 msgid "" @@ -12507,6 +15203,11 @@ msgid "" "package, and so does `Pillow `_, an " "actively-maintained fork of PIL!" msgstr "" +"Python kaj PyPI subtenas plurajn distribuojn de malsamaj realigoj de la sama " +"pako. Ekzemple, la ne plu mastrumata sed origina `distribuo PIL `_ provizas la pakon PIL, ankaŭ provizatan de `Pillow " +"`_, kiu estas aktive mastrumata forko de " +"PIL!" #: ../source/overview.rst:111 msgid "" @@ -12514,6 +15215,9 @@ msgid "" "in replacement for PIL, just by changing your project's ``install_requires`` " "or ``requirements.txt``." msgstr "" +"Per ĉi tiu pakada kapablo de Python, Pillow povas esti plena anstataŭigaĵo " +"por PIL simple per ŝanĝo de la ``install_requires`` aŭ ``requirements.txt`` " +"de via projekto." #: ../source/overview.rst:116 msgid "Python binary distributions" @@ -12572,7 +15276,7 @@ msgid "" "Excerpted from `The Packaging Gradient (2017) `_." msgstr "" -"La rekomendataj aprioraj biblioteko- kaj ilo-pakadaj teknikoj por Python. El " +"La rekomendataj aprioraj biblioteko- kaj ilo-pakadaj teĥnikoj por Python. El " "`The Packaging Gradient (2017) `_." @@ -12587,12 +15291,17 @@ msgid "" "target environments which have Python, and an audience who knows how to " "install Python packages." msgstr "" +"Ĝis nun ni nur diskutis la indiĝenajn distribuilojn de Python. Tiuj " +"indiĝenaj manieroj nur celas mediojn jam havantajn Python kaj tiujn " +"uzantojn, kiuj scias kiel instali Python-pakon." #: ../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 "" +"Pro la diverseco de mastrumaj sistemoj, agordoj, kaj homoj, oni nur povas " +"supozi tion celante programistojn." #: ../source/overview.rst:163 msgid "" @@ -12602,6 +15311,11 @@ msgid "" "technologies like :doc:`setuptools entry_points `." msgstr "" +"La indiĝena pakada meĥanismo de Python estas plejparte por distribui " +"reuzeblan kodon (t.e. bibliotekon) inter programistoj. Oni povas ankaŭ " +"distribui **ilojn** (bazajn programojn por programistoj) per la pakada " +"meĥanismo por bibliotekoj uzante teĥnikojn kiel :doc:`entry_points de " +"setuptools `." #: ../source/overview.rst:169 msgid "" @@ -12609,7 +15323,7 @@ msgid "" "applications, there's a whole new world of technologies out there." msgstr "" "Biblioteko estas konstrua bloko, ne kompleta aplikprogramo. Por distribui " -"aplikprogramon, ekzistas mondo da teknikoj." +"aplikprogramon, ekzistas mondo da teĥnikoj." #: ../source/overview.rst:173 msgid "" @@ -12617,6 +15331,9 @@ msgid "" "to their dependencies on the target environment, so you can choose the right " "one for your project." msgstr "" +"La sekvaj paragrafoj organizas tiujn opciojn pri pakado de programo laŭ la " +"dependeco de la cela medio, por helpi vin elekti taŭgan opcion por via " +"projekto." #: ../source/overview.rst:178 msgid "Depending on a framework" @@ -12630,6 +15347,10 @@ msgid "" "frontends and mobile clients, are complex enough to target that a framework " "becomes more than a convenience." msgstr "" +"Kelkaj specoj de Python-programoj, kiel reteja malfasado aŭ alia reta servo, " +"estas tiel oftaj, ke kadroj ebligas la verkadon kaj pakadon de tiaj " +"programoj. Aliaj specoj de programoj, kiel dinamika TTT-fasado aŭ poŝaparata " +"kliento, estas tiel komplikaj, ke kadro necesas." #: ../source/overview.rst:186 msgid "" @@ -12667,6 +15388,8 @@ msgid "" "If you're developing software that will be deployed to machines you own, " "users' personal computers, or any other arrangement, read on." msgstr "" +"Se vi evoluigas programon disponigotan al maŝinoj posedataj de vi, aŭ la " +"personaj komputiloj de uzantoj, aŭ alia loko, legu plu." #: ../source/overview.rst:209 msgid "Web browsers and mobile applications" @@ -12678,12 +15401,17 @@ msgid "" "write a mobile app or web application frontend in Python. While the language " "may be familiar, the packaging and deployment practices are brand new." msgstr "" +"La progresado de Python gvidas ĝin en novajn spacojn. Nuntempe oni povas " +"verki poŝaparatan programon aŭ retprograman fasadon per Python. Dum la " +"lingvo estas konata, la praktiko pri pakado kaj disponigado estas nova." #: ../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 "" +"Se vi planas eldonadon al tiuj novaj limoj, vi volas esplori la jenajn " +"kadrojn kaj iliajn gvidilojn pri pakado:" #: ../source/overview.rst:220 #, fuzzy @@ -12708,6 +15436,8 @@ msgid "" "about some of the technologies and techniques utilized by the frameworks " "above, continue reading below." msgstr "" +"Se vi *ne* interesiĝas pri kadro aŭ platformo, aŭ simple scivolas pri la " +"teĥnikoj uzitaj de la ĉi-supraj kadroj, legu plu." #: ../source/overview.rst:230 msgid "Depending on a pre-installed Python" @@ -12724,7 +15454,7 @@ msgstr "" #: ../source/overview.rst:238 msgid "Technologies which support this model:" -msgstr "Jen teknikoj subtenantaj tiun modelon:" +msgstr "Jen teĥnikoj subtenantaj tiun modelon:" #: ../source/overview.rst:240 msgid ":gh:`PEX ` (Python EXecutable)" @@ -12748,6 +15478,9 @@ msgid "" "most on the target environment. Of course, this also makes for the smallest " "package, as small as single-digit megabytes, or even kilobytes." msgstr "" +"El tiuj metodoj, dependado de antaŭinstalita Python-interpretilo plej " +"dependas de la cela medio. Tio ankaŭ signifas, ke tiu metodo rezultigas la " +"plej malgrandan pakon, de kelkaj megabajtoj aŭ eĉ kilobajtoj." #: ../source/overview.rst:249 msgid "" @@ -12755,6 +15488,9 @@ msgid "" "size of our package, so the solutions here are roughly arranged by " "increasing size of output." msgstr "" +"Ĝenerale, ju malpli la pako dependas de la cela sistemo, des pli granda " +"estas la pako. Tial, la opcioj estas ordigitaj proksimume laŭ kreskanta " +"grando de la eligaĵo." #: ../source/overview.rst:256 msgid "Depending on a separate software distribution ecosystem" @@ -12767,6 +15503,10 @@ msgid "" "\"app stores\", but even those focus on consumer applications and offer " "little for developers." msgstr "" +"Delonge je multaj mastrumaj sistemoj, inkluzive de macOS kaj Windows, mankis " +"enkonstruita pakadministrilo. Nur ĵus tiuj mastrumaj sistemoj ekhavas la " +"tiel nomitajn «programbutikojn», sed eĉ tiaj programbutikoj temas pri " +"programoj por ordinaraj uzantoj kaj ne por programistoj." #: ../source/overview.rst:263 msgid "" @@ -12830,6 +15570,8 @@ msgid "" "operating system natively supports one or more formats of programs they can " "natively execute." msgstr "" +"Komputadon difinas la kapablo ruli programojn. Ĉiu mastruma sistemo difinas " +"unu aŭ plurajn formojn de indiĝene ruleblaj programoj." #: ../source/overview.rst:294 msgid "" @@ -12837,6 +15579,9 @@ msgid "" "into one of these formats, most of which involve embedding the Python " "interpreter and any other dependencies into a single executable file." msgstr "" +"Ekzistas multaj teĥnikoj por paki Python-programon en unu el tiuj formoj, " +"kiuj ofte enkorpigas la Python-interpretilon kaj aliajn dependaĵojn en unu " +"ruleblan dosieron." #: ../source/overview.rst:299 msgid "" @@ -12844,6 +15589,8 @@ msgid "" "user experience, though often requires multiple technologies, and a good " "amount of effort." msgstr "" +"Tio, nomita «frostigo», provizas larĝan kongruecon kaj senjuntan sperton, " +"kvankam tio ofte postulas plurajn teĥnikojn kaj multon da klopodo." #: ../source/overview.rst:303 msgid "A selection of Python freezers:" @@ -12908,13 +15655,17 @@ msgid "" "level virtualization `_, or *containerization*." msgstr "" +"Multaj mastrumaj sistemoj – inkluzive de Linux, macOS kaj Windows – povas " +"ruli programon pakitan kiel leĝeran diskokopion, uzante la relative modernan " +"manieron de `mastrumasistemo-nivela virgualigo `_, aŭ *ujigo*." #: ../source/overview.rst:328 msgid "" "These techniques are mostly Python agnostic, because they package whole OS " "filesystems, not just Python or Python packages." msgstr "" -"Tiaj teknikoj estas plejparte sendependaj de Python, ĉar ili pakas tutajn " +"Tiaj teĥnikoj estas plejparte sendependaj de Python, ĉar ili pakas tutajn " "mastrumsistemajn dosiersistemojn, ne sole Python aŭ Python-pakojn." #: ../source/overview.rst:331 @@ -12922,8 +15673,8 @@ msgid "" "Adoption is most extensive among Linux servers, where the technology " "originated and where the technologies below work best:" msgstr "" -"Tio estas plej ofta por Linux-servilo, por kiu tiaj teknikoj estis " -"inventitaj kaj por kiu tiaj teknikoj funkcias plej bone:" +"Tio estas plej ofta por Linux-servilo, por kiu tiaj teĥnikoj estis " +"inventitaj kaj por kiu tiaj teĥnikoj funkcias plej bone:" #: ../source/overview.rst:334 msgid "`AppImage `_" @@ -12952,6 +15703,9 @@ msgid "" "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 " +"sistemo. Ruli tian virtualan maŝinon (VM) oftas, speciale en datencentro." #: ../source/overview.rst:347 msgid "" @@ -12959,6 +15713,9 @@ msgid "" "centers, though certain complex applications can benefit from this " "packaging. The technologies are Python agnostic, and include:" msgstr "" +"Tiuj teĥnikoj estas plejparte por grandskalaj disponigoj en datencentroj, " +"kvankam iuj kompleksaj programoj povas profiti el tia pakado. La teĥnikoj ne " +"dependas de Python kaj inkluzivas la jenon:" #: ../source/overview.rst:351 msgid "`Vagrant `_" @@ -12992,6 +15749,9 @@ msgid "" "already-installed on some hardware. This way, your software's user would " "require only electricity." msgstr "" +"La plej totala maniero disponigi vian programon estas sendi ĝin jam " +"instalita sur iu aparato. Tiel, la uzanto de via programo postulas nur " +"elektron." #: ../source/overview.rst:362 msgid "" @@ -12999,6 +15759,9 @@ msgid "" "tech-savvy, you can find hardware appliances being used by everyone from the " "most advanced data centers to the youngest children." msgstr "" +"Dum la ĉi-supraj virtualaj maŝinoj estas ĉefe uzataj de fakuloj, aparatoj " +"estas uzataj de ĉiuj, de la plej komplikaj datencentroj ĝis la plej junaj " +"infanoj." #: ../source/overview.rst:366 msgid "" @@ -13007,15 +15770,19 @@ msgid "" "ship it to the datacenter or your users' homes. They plug and play, and you " "can call it a day." msgstr "" +"Metu vian kodon sur :gh:`Adafruit `, `MicroPython " +"`_, aŭ pli potencan aparaton kapablan ruli Python, " +"kaj sendu ĝin al la datencentro aŭ la hejmo de viaj uzantoj. Ili povos " +"ekuzi, kaj vi povos ekmalstreĉi." #: ../source/overview.rst:375 msgid "A summary of technologies used to package Python applications." -msgstr "Resumo pri teknikoj por paki Python-programojn." +msgstr "Resumo pri teĥnikoj por paki Python-programojn." #: ../source/overview.rst:375 msgid "" "The simplified gamut of technologies used to package Python applications." -msgstr "La simpligita gamo de teknikoj uzataj por paki Python-programojn." +msgstr "La simpligita gamo de teĥnikoj uzataj por paki Python-programojn." #: ../source/overview.rst:378 msgid "What about..." @@ -13045,6 +15812,14 @@ msgid "" "fpm.readthedocs.io/en/latest/cli-reference.html#virtualenv>`_ to generate " "both deb and RPMs from the same source." msgstr "" +"Laŭ la ĉi-supra paragrafo :ref:`depending-on-a-separate-ecosystem`, kelkaj " +"mastrumaj sistemoj havas siajn proprajn pakadministrilojn. Se oni certegas " +"pri la celata mastruma sistemo, oni povas dependi rekte de formo kiel `deb " +"`_ (por Debian, Ubuntu " +"ktp.) aŭ `RPM `_ (por Red " +"Hat, Fedora ktp.), kaj uzi tiun indiĝenan pakadministrilon por instalado kaj " +"eĉ disponigo. Oni povas eĉ uzi `FPM `_ por generi kaj deb kaj RPM el la sama fonto." #: ../source/overview.rst:397 msgid "" @@ -13070,6 +15845,9 @@ msgid "" "from the Internet into a virtualenv, as one might do in a development " "environment. The overview above is full of much better solutions." msgstr "" +"Por grava disponigo, ne dependu de rulado de ``python - m pip install`` de " +"la Interreto al virtuala medio, simile al evoluada medio. La ĉi-supra " +"superrigardo priskribas multe pli bonajn solvojn." #: ../source/overview.rst:417 msgid "Security" @@ -13080,6 +15858,8 @@ msgid "" "The further down the gradient you come, the harder it gets to update " "components of your package. Everything is more tightly bound together." msgstr "" +"Ju pli suben vi iras, des pli malfacile estas ĝisdatigi komponantojn de via " +"pako, ĉar ĉiuj estas des pli kunligitaj." #: ../source/overview.rst:422 msgid "" @@ -13104,6 +15884,11 @@ msgid "" "to realize that the varied landscape is a small price Python programmers pay " "for using one of the most balanced, flexible languages available." msgstr "" +"La publika reputacio estas, ke pakado en Python povas esti malglata. Tio " +"estas plejparte rezulto de la diversaj celoj de Python. Post kiam oni scias " +"la naturajn limojn inter la pakadaj manieroj, oni komprenos, ke la diversa " +"pejzaĝo estas malgranda prezo pagata de Python-programistoj por uzi unu el " +"la plej ekvilibraj, flekseblaj lingvoj haveblaj." #: ../source/specifications/binary-distribution-format.rst:7 msgid "Binary distribution format" @@ -13127,6 +15912,12 @@ msgid "" "tool while preserving enough information to spread its contents out onto " "their final paths at any later time." msgstr "" +"Wheel estas ZIP-forma arĥivo kun speciale aranĝita dosiernomo kaj la " +"dosiersufikso ``.whl''. Ĝi enhavas unu distribuon preskaŭ ekzakte kiel la " +"instalon laŭ PEP 376 kun specifa instala skemo. Kvankam speciala instalilo " +"estas rekomendata, oni povas instali wheel-dosieron simple per maldensigado " +"al site-packages uzante la norman ilon ``unzip``, koonservante sufiĉon da " +"informoj por transloki la enhavojn al la finaj dosierlokoj poste." #: ../source/specifications/binary-distribution-format.rst:22 msgid "Details" @@ -13186,6 +15977,11 @@ msgid "" "headers|scripts|data)``. These subdirectories are :ref:`installation paths " "defined by sysconfig `." msgstr "" +"Movu ĉiun subarbon de ``distribution-1.0.data/`` al la cela dosierloko. Ĉiu " +"subdosierujo de ``distribution-1.0.data/`` estas ŝlosilo en vortaro da celaj " +"dosierujoj, kiel ``distribution-1.0.data/(purelib|platlib|headers|scripts|" +"data)``. Tiuj subdosierujoj estas :ref:`instalaj dosierlokoj difinitaj de " +"sysconfig `." #: ../source/specifications/binary-distribution-format.rst:48 msgid "" @@ -13228,6 +16024,11 @@ msgid "" "python'``, rewrite to point to the correct interpreter. Unix installers may " "need to add the +x bit to these files if the archive was created on Windows." msgstr "" +"En wheel, programeto troviĝas en ``{distribuo}-{versio}.data/scripts/``. Se " +"la unua linio de dosiero en ``scripts/`` komenciĝas precize per ``b'#!" +"python'``, modifu ĝin montrante la ĝustan interpretilon. Instalilo por " +"Unikso eble devas aldoni la biton +x al tiaj dosieroj, se la arĥivo estis " +"kreita sur Windows." #: ../source/specifications/binary-distribution-format.rst:66 msgid "" @@ -13247,6 +16048,8 @@ msgid "" "accompanying .exe wrappers. Windows installers may want to add them during " "install." msgstr "" +"En wheel, programeto pakita sur Uniksa sistemo ne havas ``.exe``-volvilon. " +"Instalilo por Windows povas provizi tiun dum instalado." #: ../source/specifications/binary-distribution-format.rst:75 msgid "Recommended archiver features" @@ -13264,7 +16067,7 @@ msgid "" "archive." msgstr "" "Arĥivilo metu la dosierojn ``.dist-info`` fizike ĉe la fino de la arĥivo. " -"Tio ebligas utilajn teknikojn pri arĥivoj, inkluzive de la kapablo modifi la " +"Tio ebligas utilajn teĥnikojn pri arĥivoj, inkluzive de la kapablo modifi la " "metadatenojn sen reskribado de la tuta arĥivo." #: ../source/specifications/binary-distribution-format.rst:85 @@ -13311,6 +16114,12 @@ msgid "" "item tuple with the first item being the initial digits as an ``int``, and " "the second item being the remainder of the tag as a ``str``." msgstr "" +"Nedeviga konstruo-numero. Devas komenciĝi per cifero. Oni uzas tiun por " +"komparo, se du wheel-dosiernomoj estas samaj ĉiel alie (ekz. laŭ nomo, " +"versio kaj aliaj etikedoj). Por ordigado, konsideru ĝin kiel malplenan " +"opon, se ĝi mankas; se ne, konsideru ĝin kiel duopo, kies unua ero estas la " +"komencaoj ciferoj kiel ``int``, kaj kies dua ero estas la restaĵo de la " +"etikedo kiel ``str``." #: ../source/specifications/binary-distribution-format.rst:109 msgid "" @@ -13318,6 +16127,9 @@ msgid "" "to a change in the build environment, like when using the manylinux image to " "build distributions using pre-release CPython versions." msgstr "" +"Ofta uzkazo por konstrunumero estas rekonstrui duuman distribuon pro ŝanĝo " +"en la konstrua medio, ekzemple por uzi la diskokopion manylinux por konstrui " +"distribuojn kun antaŭeldonaj versioj de CPython." #: ../source/specifications/binary-distribution-format.rst:116 msgid "" @@ -13334,6 +16146,9 @@ msgid "" "distribution. Instead a **new distribution version** should be created for " "such cases." msgstr "" +"Pro tiu limigo, nova distribuo, kiun oni referencas ekstere, **ne uzu** " +"konstruo-numerojn dum konstruado de la nova distribuo. Por tiu bezono, oni " +"kreu **novan distribuo-version**." #: ../source/specifications/binary-distribution-format.rst:127 msgid "language implementation and version tag" @@ -13379,6 +16194,9 @@ msgid "" "\"compatibility tags.\" The compatibility tags express the package's basic " "interpreter requirements and are detailed in PEP 425." msgstr "" +"La lastaj tri komponantj de la dosiernomo antaŭ la sufikso nomiĝas " +"«kongruecaj etikedoj». Tiaj etikedoj esprimas la bazajn postulojn de la " +"pako pri interpretilo kaj estas difinitaj en PEP 425." #: ../source/specifications/binary-distribution-format.rst:145 msgid "Escaping and Unicode" @@ -13404,6 +16222,13 @@ msgid "" "prepared to accept ``.`` (FULL STOP) and uppercase letters, however, as " "these were allowed by an earlier version of this specification." msgstr "" +"En nomo de distribuo, ajna sinsekvo de skribsignoj ``-_.`` (HYPHEN-MINUS, " +"LOW LINE kaj FULL STOP) estu anstataŭigita per ``_`` (LOW LINE), kaj " +"majuskloj estu anstataŭigitaj per la respondantaj minuskloj. Tio " +"ekvivalentas ordinaran :ref:`normigon de nomo ` sekvitan " +"de anstataŭigado de ``-`` per ``_``. Ilo konsumanta wheel devas akcepti ``." +"`` (FULL STOP) kaj majusklojn, ĉar tiuj estis permesataj de malnova versio " +"de ĉi tiu specifo." #: ../source/specifications/binary-distribution-format.rst:157 msgid "" @@ -13428,6 +16253,8 @@ msgid "" "contain ``-``, as the resulting file may not be processed correctly if they " "do." msgstr "" +"Ilo generanta wheel konfirmu, ke la dosiernomo-komponantoj ne enhavas ``-``, " +"ĉar alie la rezulta dosiero eble ne estos ĝuste pritraktita." #: ../source/specifications/binary-distribution-format.rst:165 msgid "" @@ -13435,6 +16262,9 @@ msgid "" "updated to support non-ASCII filenames, but they are supported in this " "specification." msgstr "" +"La arĥiva dosiernomo estas Unikoda. Povas esti, ke iloj ankoraŭ ne estas " +"ĝisdatigitaj por ne-Askia dosiernomo, sed ĉi tiu specifo subtenas tian " +"dosiernomon." #: ../source/specifications/binary-distribution-format.rst:169 msgid "" @@ -13442,6 +16272,9 @@ msgid "" "clients in common use do not properly display UTF-8 filenames, the encoding " "is supported by both the ZIP specification and Python's ``zipfile``." msgstr "" +"La dosiernomoj *en* la arĥivo estas konditaj laŭ UTF-8. Kvantam kelkaj ofte " +"uzataj ZIP-klientoj ne ĝuste montras dosiernomon en UTF-8, tiu kodado estas " +"subtenata kaj de la normo ZIP kaj la modulo ``zipfile`` de Python." #: ../source/specifications/binary-distribution-format.rst:175 msgid "File contents" @@ -13449,23 +16282,39 @@ msgstr "Dosieraj enhavoj" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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 "" +"La enhavo de wheel-dosiero, en kiu {distribution} estas anstataŭigita per " +"la :ref:`normigita ` de la pako, ekz. ``beaglevote``, " +"kaj {version} estas anstataŭigita per la :ref:`normigita versio `, ekz. ``1.0.0``, konsistas el la jeno:" -#: ../source/specifications/binary-distribution-format.rst:181 +#: ../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 "" +"``/``, la radiko de la arĥivo, enhavas ĉiujn dosierojn instalotajn al " +"``purelib`` aŭ ``platlib`` laŭ la specifo en ``WHEEL``. Kaj ``purelib`` kaj " +"``platlib`` estas ofte ``site-packages``." -#: ../source/specifications/binary-distribution-format.rst:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "``{distribuo}-{versio}.dist-info/`` enhavas metadatenojn." -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../source/specifications/binary-distribution-format.rst:188 +msgid "" +":file:`{distribution}-{version}.dist-info/licenses/` contains license files." +msgstr "" +":file:`{distribution}-{version}.dist-info/licenses/` enhavas licenco-" +"dosierojn." + +#: ../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 " @@ -13477,15 +16326,20 @@ msgstr "" "subdosierujo estas indico de vortaro de instalaj dosierlokoj (ekz. ``data``, " "``scripts``, ``headers``, ``purelib``, ``platlib``)." -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../source/specifications/binary-distribution-format.rst:193 msgid "" "Python scripts must appear in ``scripts`` and begin with exactly ``b'#!" "python'`` in order to enjoy script wrapper generation and ``#!python`` " "rewriting at install time. They may have any or no extension. The " "``scripts`` directory may only contain regular files." msgstr "" +"Python-programeto devas ekzisti en ``scripts`` kaj komenciĝi ekzakte per " +"``b'#!python'``, se oni deziras generi programeto-volvaĵon kaj reskribadon " +"de ``#!python`` dum instalado. Ĝi povas havi iun ajn aŭ neniun " +"dosiersufikson. La dosierujo ``scripts`` povas enhavi nur ordinarajn " +"dosierojn." -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../source/specifications/binary-distribution-format.rst:197 msgid "" "``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " "greater format metadata." @@ -13493,7 +16347,7 @@ msgstr "" "``{distribution}-{version}.dist-info/METADATA`` estas metadatenoj de la " "formo Metadatenoj versio 1.1 aŭ pli nova." -#: ../source/specifications/binary-distribution-format.rst:195 +#: ../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::" @@ -13501,11 +16355,11 @@ msgstr "" "``{distribuo}-{versio}.dist-info/WHEEL`` estas metadatenoj pri la arĥivo mem " "en la sama baza formo «ŝlosilo: valoro»::" -#: ../source/specifications/binary-distribution-format.rst:205 +#: ../source/specifications/binary-distribution-format.rst:209 msgid "``Wheel-Version`` is the version number of the Wheel specification." msgstr "``Wheel-Version`` estas la versia numero de la specifo pri Wheel." -#: ../source/specifications/binary-distribution-format.rst:206 +#: ../source/specifications/binary-distribution-format.rst:210 msgid "" "``Generator`` is the name and optionally the version of the software that " "produced the archive." @@ -13513,14 +16367,16 @@ msgstr "" "``Generator`` estas la nomo kaj, nedevige, la versio de la programo " "generinta la arĥivon." -#: ../source/specifications/binary-distribution-format.rst:208 +#: ../source/specifications/binary-distribution-format.rst:212 msgid "" "``Root-Is-Purelib`` is true if the top level directory of the archive should " "be installed into purelib; otherwise the root should be installed into " "platlib." msgstr "" +"``Root-Is-Purelib`` estas vera, se la supranivela dosierujo de la arĥivo " +"instaliĝu al purelib, se ne, la radiko instaliĝu al platlib." -#: ../source/specifications/binary-distribution-format.rst:211 +#: ../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``." @@ -13528,14 +16384,14 @@ msgstr "" "``Tag`` estas la pliigitaj kongruecaj etikedoj de la wheel; en la ekzemplo, " "la dosiernomo enhavus ``py2.py3-none-any``." -#: ../source/specifications/binary-distribution-format.rst:213 +#: ../source/specifications/binary-distribution-format.rst:217 msgid "" "``Build`` is the build number and is omitted if there is no build number." msgstr "" "``Build`` estas la numero de la konstro; ĝi estas preterlasita, se mankas " "numero de la konstruo." -#: ../source/specifications/binary-distribution-format.rst:214 +#: ../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 " @@ -13545,7 +16401,7 @@ msgstr "" "subtenata versio, kaj devas malsukcesi, se ``Wheel-Version`` havas pli " "grandan maĵoran version ol la subtenatan version." -#: ../source/specifications/binary-distribution-format.rst:217 +#: ../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." @@ -13553,24 +16409,28 @@ msgstr "" "Wheel, estante instaleblaĵon por pluraj versioj de Python, ne ĝenerale " "inkluzivas ``.pyc``-dosierojn." -#: ../source/specifications/binary-distribution-format.rst:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "Wheel ne enhavas setup.py aŭ setup.cfg." -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 "" +"Ĉi tiu versio de la wheel-normo baziĝas sur la instalo-skemo de " +"``distutils`` kaj ne difinas kiel instali dosierojn al aliaj lokoj. La " +"aranĝo estas superaro de la funkcioj provizitaj de la ekzistantaj duumaj " +"formoj wininst kaj egg." -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../source/specifications/binary-distribution-format.rst:232 #: ../source/specifications/recording-installed-packages.rst:23 msgid "The .dist-info directory" msgstr "La dosierujo .dist-info" -#: ../source/specifications/binary-distribution-format.rst:230 +#: ../source/specifications/binary-distribution-format.rst:234 msgid "" "Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " "RECORD." @@ -13578,7 +16438,7 @@ msgstr "" "La dosierujoj .dist-info de Wheel inkluzivas, minimume, METADATA, WHEEL, kaj " "RECORD." -#: ../source/specifications/binary-distribution-format.rst:232 +#: ../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." @@ -13586,11 +16446,11 @@ msgstr "" "METADATA estas la pakaj metadatenoj, en la sama formo kiel PKG-INFO en la " "radiko de fontaj distribuoj." -#: ../source/specifications/binary-distribution-format.rst:234 +#: ../source/specifications/binary-distribution-format.rst:238 msgid "WHEEL is the wheel metadata specific to a build of the package." msgstr "WHEEL estas la wheel-metadatenoj specifaj al iu konstruo de la pako." -#: ../source/specifications/binary-distribution-format.rst:235 +#: ../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 " @@ -13598,56 +16458,91 @@ msgid "" "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 "" +"RECORD estas listo de (preskaŭ) ĉiuj dosieroj en la wheel kaj iliaj sekuraj " +"haketaĵoj. Male al PEP 376, ĉiu dosiero krom RECORD, kiu ne povas enhavi " +"haketaĵon de si mem, devas inkluzivi sian haketaĵon. La haketaĵa algoritmo " +"devas esti sha256 aŭ pli fortika; specife, md5 kaj sha1 estas malpermesataj, " +"ĉar subskribita wheel-dosiero dependas de la fortikaj haketaĵoj en RECORD " +"por la integrecon de la arĥivo." -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../source/specifications/binary-distribution-format.rst:245 msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." msgstr "" "La INSTALLER kaj REQUESTED de PEP 376 ne estas inkluzivitaj en la arĥivo." -#: ../source/specifications/binary-distribution-format.rst:242 +#: ../source/specifications/binary-distribution-format.rst:246 msgid "" "RECORD.jws is used for digital signatures. It is not mentioned in RECORD." msgstr "" "RECORD.jws estas uzataj por ciferecaj subskriboj. Ĝi ne estas menciita en " "RECORD." -#: ../source/specifications/binary-distribution-format.rst:244 +#: ../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 "" +"RECORD.p7s estas permesata por tiuj, kiuj preferas uzi S/MIME-subskribon por " +"sekurigi wheel-dosieron. Ĝi ne menciiĝas en RECORD." -#: ../source/specifications/binary-distribution-format.rst:247 +#: ../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 "" +"Dum maldensigado, instalilo de wheel kontrolas ĉiujn haketaĵojn en " +"``RECORD`` kaj la dosierajn enhavojn. Krom ``RECORD`` kaj subskriboj, " +"instalado malsukcesos, se ajna dosiero en la arĥivo ne estas menciita en " +"``RECORD`` aŭ ne kongruas kun sia haketaĵo." + +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "La dosierujo :file:`.dist-info/licenses/`" + +#: ../source/specifications/binary-distribution-format.rst:260 +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 "" +"Se la metadatena versio estas 2.4 aŭ pli nova kaj unu aŭ pli da kampoj " +"``License-File`` ekzistas, do la dosierujo :file:`.dist-info/` DEVAS enhavi " +"la subdosierujon :file:`licenses/`, kiu DEVAS enhavi la dosierojn en la " +"kampoj ``License-File`` en la dosiero :file:`METADATA` ĉe la respektivaj " +"dosierlokoj relativaj al la dosierujo :file:`licenses/`." -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:268 msgid "The .data directory" msgstr "La dosierujo .data" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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 "" +"Iu ajn dosiero ne ordinare instalita al site-packages iras en la dosierujon ." +"data, nomitan kiel la dosierujon .dist-info sed kun la sufikso .data/::" -#: ../source/specifications/binary-distribution-format.rst:264 +#: ../source/specifications/binary-distribution-format.rst:278 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 "" +"La dosierujo ``.data`` enhavas subdosierujojn de la programetoj, ĉapoj, " +"dokumentoj ktp de la distribuo. Dum instalado, la enhavoj de tiuj " +"dosierujoj kopiiĝas al siaj celaj dosierlokoj." -#: ../source/specifications/binary-distribution-format.rst:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "Subskribitaj wheel-dosieroj" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -13656,16 +16551,26 @@ msgid "" "possible entries are hashed, including any generated files such as .pyc " "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" +"Wheel-dosiero inkluzivas etenditan ``RECORD`` por ciferecaj subskriboj. La " +"``RECORD`` de PEP 376 estas modifita por inkluzivi sekuran haketaĵon " +"``digestname=urlsafe_b64encode_nopad(digest)`` (URL-sekura base64-kodado sen " +"finaj signoj ``=``) kiel la duan kolumnon anstataŭ md5sum. Ĉiaj eblaj eroj " +"havu haketaĵojn, inkluzive de generitaj dosieroj kiel ``.pyc``-dosieroj, " +"krom ``RECORD`` mem, kiu ne povas enhavi sian propran haketaĵon. Ekzemple::" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 "" +"La subskribo-dosiero(j) RECORD.jws kaj RECORD.p7s ne menciiĝas en RECORD, " +"ĉar ili estas nur aldoneblaj post la generado de RECORD. Ĉiu alia dosiero en " +"la arĥivo devas havi ĝustan haketaĵon en RECORD; se ne, la instalado " +"malsukcesos." -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -13673,11 +16578,11 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "(La haketaĵa valoro estas la sama formo uzata en RECORD.)" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." @@ -13685,23 +16590,27 @@ msgstr "" "Se RECORD.p7s estas uzata, ĝi devas enhavi malligitan S/MIME-forman " "subskribon de RECORD." -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 "" +"Instalilo de wheel ne devas kompreni ciferecan subskribon sed DEVAS kompari " +"la haketaĵojn en ``RECORD`` al la enhavoj de la maldensigitaj dosieroj. Kiam " +"instalilo komparas la dosierajn haketaĵojn kaj ``RECORD``, aparta subskribo-" +"kontrolilo devas nur kontroli, ĉu ``RECORD`` kongruas kun la subskribo." -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "Vidu" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "https://datatracker.ietf.org/doc/html/rfc7515" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" @@ -13709,26 +16618,26 @@ msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "https://datatracker.ietf.org/doc/html/rfc7517" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "Oftaj demandoj" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "Wheel difinas dosierujon .data. Ĉu mi metu ĉiom da miaj datenoj tien?" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -13738,11 +16647,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "Kial wheel inkluzivas alkroĉitajn subskribojn?" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -13755,22 +16664,25 @@ msgstr "" "subskribitaj, la arĥivo estas redensigebla sen eksvalidigi la subskribon, " "kaj individuaj dosieroj estas kontroleblaj sen reelŝutado de la tuta arĥivo." -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "Kial wheel permesas JWS-subskribojn?" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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 "" +"La normoj JOSE, de kiuj JWS estas parto, estas laŭfasone facile realigebla; " +"tio estas ankaŭ unu el la fasonaj ĉefceloj de wheel. JWS ebligas utilan, " +"mallongan pure Python-an realigon." -#: ../source/specifications/binary-distribution-format.rst:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "Kial wheel ankaŭ permesas S/MIME-subskribojn?" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 msgid "" "S/MIME signatures are allowed for users who need or want to use existing " "public key infrastructure with wheel." @@ -13778,7 +16690,7 @@ msgstr "" "S/MIME-subskribo estas permesata por tiuj uzantoj, kiuj devas aŭ volas uzi " "ekzistantan publikŝlosilan infrastrukturon kun wheel." -#: ../source/specifications/binary-distribution-format.rst:354 +#: ../source/specifications/binary-distribution-format.rst:368 msgid "" "Signed packages are only a basic building block in a secure package update " "system. Wheel only provides the building block." @@ -13786,38 +16698,49 @@ msgstr "" "Subskribita pako estas nur baza briko de sekura pako-ĝisdatiga sistemo. " "Wheel nur provizas la bazan brikon." -#: ../source/specifications/binary-distribution-format.rst:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "Kio temas pri «purelib» kontraste kun «platlib»?" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " "packages to '/usr/lib/pythonX.Y/site-packages' and platform dependent " "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" +"Wheel konservas la distingon inter «purelib» kaj «platlib», kio gravas sur " +"kelkaj platformoj. Ekzemple, Fedora instalas pure Python-ajn pakojn al «/usr/" +"lib/pythonX.Y/site-packages» kaj platformo-dependajn pakojn al «/usr/lib64/" +"pythonX.Y/site-packages»." -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 msgid "" "A wheel with \"Root-Is-Purelib: false\" with all its files in ``{name}-" "{version}.data/purelib`` is equivalent to a wheel with \"Root-Is-Purelib: " "true\" with those same files in the root, and it is legal to have files in " "both the \"purelib\" and \"platlib\" categories." msgstr "" +"Wheel kun «``Root-Is-Purelib: false``», kies ĉiuj dosieroj troviĝas en " +"``{nomo}-{versio}.data/purelib``, ekvivalentas al wheel kun «``Root-Is-" +"Purelib: true``» kun la samaj dosieroj en la radiko. Estas valide havi " +"dosierojn en kaj «purelib» kaj «platlib»." -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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 "" +"Praktike, wheel havu nur unu el ``purelib`` aŭ ``platlib``, depende de ĉu ĝi " +"estas pure Python-a aŭ ne, kaj tiaj dosieroj estu ĉe la radiko kun taŭgaj " +"agordoj pri ``Root-is-purelib``." -#: ../source/specifications/binary-distribution-format.rst:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "Ĉu eblas importi Python-kodon rekte el wheel-dosiero?" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -13826,7 +16749,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -13837,7 +16760,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -13867,7 +16790,7 @@ msgstr "" "ĝuste uzas la abstraktajn rimedajn API-ojn interne, interagado kun eksteraj " "komponantoj povas postuli realan surdiskan dosieron." -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -13876,31 +16799,31 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "Historio" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "Februaro 2013: Ĉi tiu specifo estis aprobita per :pep:`427`." -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 msgid "" "February 2021: The rules on escaping in wheel filenames were revised, to " "bring them into line with what popular tools actually do." @@ -13908,7 +16831,7 @@ msgstr "" "Februaro 2021: La reguloj pri kodŝanĝado en wheel-dosiernomoj estis " "reviziitaj konforme al la fakta konduto de popularaj iloj." -#: ../source/specifications/binary-distribution-format.rst:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -13920,11 +16843,28 @@ msgstr "" "simbola ligilo aŭ subdosierujo en tiu dosierujo; tial kondutoj povas " "diferenci inter iloj)." -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" +"Decembro 2024: La dosierujo :file:`.dist-info/licenses/` estis specifita " +"per :pep:`639`." + +#: ../source/specifications/binary-distribution-format.rst:446 +msgid "" +"January 2025: Clarified that name and version needs to be normalized for ``." +"dist-info`` and ``.data`` directories." +msgstr "" +"Januaro 2025: Klarigis, ke nomo kaj versio devas esti normigitaj por la " +"dosierujoj ``.dist-info`` kaj ``.data``." + +#: ../source/specifications/binary-distribution-format.rst:451 msgid "Appendix" msgstr "Apendico" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "Ekzempla realigo de urlsafe-base64-nopad::" @@ -13973,6 +16913,8 @@ 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 "" +"Se metadatenoj seriiĝas al bajta fluo (ekzemple, por konservado sur " +"dosieron), signoĉenoj devas esti koditaj laŭ UTF-8." #: ../source/specifications/core-metadata.rst:30 msgid "" @@ -13981,6 +16923,10 @@ msgid "" "format. The need for tools to work with years worth of existing packages " "makes it difficult to shift to a new format." msgstr "" +"Kvankam :pep:`566` difinis manieron transformi metadatenojn en JSON-kongruan " +"vortaron, ĝi ankoraŭ ne estas uzata kiel norma interŝanĝa dosierformo. Por " +"iloj, la bezono kunfunkcii kun jaroj da ekzistantaj pakoj malfaciligas " +"adoptadon de nova dosierformo." #: ../source/specifications/core-metadata.rst:35 msgid "" @@ -14019,6 +16965,9 @@ msgid "" "metadata using the lowest metadata version that includes all of the needed " "fields." msgstr "" +"Por pli larĝa kongrueco, konstruilo POVAS generi distribuajn metadatenojn " +"uzante la plej malnovan metadatenan version inkluzivantan ĉiujn necesajn " +"kampojn." #: ../source/specifications/core-metadata.rst:64 #: ../source/specifications/core-metadata.rst:82 @@ -14038,8 +16987,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "Ekzemple::" @@ -14057,6 +17006,8 @@ msgid "" "distribution. It must conform to the :ref:`name format specification `." msgstr "" +"La nomo de la distribuo. La kampo ``name`` estas la ĉefa identigilo de " +"distribuo. Ĝi devas observi la :ref:`specifon pri nomformoj `." #: ../source/specifications/core-metadata.rst:86 msgid "" @@ -14090,6 +17041,9 @@ msgid "" "``Name``, ``Version``, and ``Metadata-Version`` may not be specified in this " "field." msgstr "" +"Signoĉeno enhavanta la nomon de alia kerna metadatena kampo. La kamponomoj " +"``Name``, ``Version`` kaj ``Metadata-Version`` devas esti ne specifitaj en " +"ĉi tiu kampo." #: ../source/specifications/core-metadata.rst:115 msgid "" @@ -14106,12 +17060,19 @@ msgid "" "field is not in the sdist, and not marked as ``Dynamic``, then it MUST NOT " "be present in the wheel." msgstr "" +"Se kampo *ne* estas markita kiel ``Dynamic``, do la valoro de la kampo en " +"ajna wheel konstruita el la fonta distribuo DEVAS egali la valoron en la " +"fonta distribuo. Se la kampo mankas en la fonta distribuo kaj ne estas " +"markita kiel ``Dynamic``, do ĝi DEVAS NE ekzisti en la wheel." #: ../source/specifications/core-metadata.rst:122 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 "" +"Se kampo estas markita kiel ``Dynamic``, ĝi povas enhavi iun ajn validan " +"valoron en wheel konstruita el la fonta distribuo (inkluzive de manko de " +"valoro)." #: ../source/specifications/core-metadata.rst:125 msgid "" @@ -14156,8 +17117,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "Ekzemploj::" @@ -14172,6 +17133,10 @@ msgid "" "binary distribution was compiled. The semantics of the Supported-Platform " "field are not specified in this PEP." msgstr "" +"Duuma distribuo enhavanta dosieron :file:`PKG-INFO` enhavos la kampon " +"``Supported-Platform`` en metadatenoj specifantan la mastruman sistemon kaj " +"ĉ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:173 msgid "Summary" @@ -14192,6 +17157,9 @@ msgid "" "size for this field, though people shouldn't include their instruction " "manual as the description." msgstr "" +"Pli longa priskribo de la distribuo, kiu povas esti pluraj paragrafoj. " +"Programo uzanta metadatenojn ne supozu ajnan maksimumon por tiu kampo, " +"kvankam oni ne inkluzivu plenan manlibron kiel la priskribon." #: ../source/specifications/core-metadata.rst:205 msgid "" @@ -14215,6 +17183,9 @@ msgid "" "and a pipe char have to be replaced by a single CRLF when the field is " "unfolded using a RFC822 reader." msgstr "" +"Tiu kodado implicas, ke ajna okazo de CRLF sekvita de 7 spacetoj kaj " +"vertikalo devas esti anstataŭigita per unu CRLF, kiam la kampo estas " +"maldensigita per realigaĵo de RFC822." #: ../source/specifications/core-metadata.rst:232 msgid "" @@ -14222,6 +17193,9 @@ msgid "" "message body (i.e., after a completely blank line following the headers, " "with no indentation or other special formatting necessary)." msgstr "" +"Alternative, la priskribo de la distribuo povas esti en la enhavo de la " +"mesaĝo (t.e. post plene malplena linio post la ĉapoj, sen krommarĝeno aŭ " +"alia speciala aranĝado)." #: ../source/specifications/core-metadata.rst:241 msgid "Description-Content-Type" @@ -14232,6 +17206,8 @@ msgid "" "A string stating the markup syntax (if any) used in the distribution's " "description, so that tools can intelligently render the description." 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:248 msgid "" @@ -14268,6 +17244,9 @@ msgid "" "html>`_). Briefly, this means that it has a ``type/subtype`` part and then " "it can optionally have a number of parameters:" msgstr "" +"La formo de tiu kampo estas sama kiel la ĉapo ``Content-Type`` de HTTP (laŭ " +"`RFC 1341 `_). " +"Resume, ĝi havas parton ``type/subtype`` kun nedeviga(j) parametro(j):" #: ../source/specifications/core-metadata.rst:267 msgid "Format::" @@ -14295,6 +17274,9 @@ msgid "" "the description. The only legal value is ``UTF-8``. If omitted, it is " "assumed to be ``UTF-8``." msgstr "" +"La parametro ``charset`` povas specifi la signokodadon de la priskribo. La " +"ununura valida valoro estas ``UTF-8``. Se ĝi mankas, oni supozas la valoron " +"``UTF-8``." #: ../source/specifications/core-metadata.rst:281 msgid "" @@ -14318,6 +17300,9 @@ msgid "" "attempt to render it as ``text/x-rst; charset=UTF-8`` and fall back to " "``text/plain`` if it is not valid rst." msgstr "" +"Se ``Description-Content-Type`` mankas, programo provu montri la priskribon " +"kiel ``text/x-rst; charset=UTF-8`` kaj, se ĝi ne estas valida " +"reStructuredText, montri ĝin kiel ``text/plain``." #: ../source/specifications/core-metadata.rst:309 msgid "" @@ -14325,6 +17310,9 @@ msgid "" "content type is ``text/plain`` (Although PyPI will probably reject anything " "with an unrecognized value)." msgstr "" +"Se ``Description-Content-Type`` estas nekonata valoro, do la supozata " +"enhavtipo estas ``text/plain`` (kvankam PyPI verŝajne malakceptos ion ajn de " +"nekonata valoro)." #: ../source/specifications/core-metadata.rst:313 msgid "" @@ -14341,6 +17329,9 @@ msgid "" "``variant`` defaults to ``GFM`` and thus it is equivalent to the example " "before it." msgstr "" +"Por la ĉi-supra ekzemplo, ``charset`` estas implicite ``UTF-8``, kaj " +"``varianto`` estas implicite ``GFM``. Tial, ĝi ekvivalentas la ekzemplon " +"antaŭ si." #: ../source/specifications/core-metadata.rst:326 msgid "Keywords" @@ -14413,6 +17404,8 @@ msgid "" "by someone other than the original author: it should be omitted if it is " "identical to ``Author``." 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:408 msgid "Maintainer-email" @@ -14432,6 +17425,9 @@ msgid "" "by someone other than the original author: it should be omitted if it is " "identical to ``Author-email``." 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-" +"email``." #: ../source/specifications/core-metadata.rst:434 msgid "License" @@ -14448,6 +17444,10 @@ msgid "" "``License`` and PyPI will reject uploads. See `PEP 639 `__." msgstr "" +"Ekde Metadatenoj 2.4, ``License`` kaj ``License-Expression`` ne estas " +"samtempe specifeblaj. Se ambaŭ estas specifitaj, ilo pritraktanta " +"metadatenojn ignoros ``License``, kaj PyPI rifuzos alŝutojn. Vidu `PEP 639 " +"`__." #: ../source/specifications/core-metadata.rst:446 msgid "" @@ -14483,6 +17483,9 @@ msgid "" "The path is located within the project source tree, relative to the project " "root directory. For details see :pep:`639`." msgstr "" +"Ĉiu ero estas signoĉena prezento de la dosierloko de licenco-rilata dosiero. " +"La dosierloko troviĝas en la projekta fontarbo relative al la projekta " +"radika dosierujo. Por detaloj, vidu :pep:`639`." #: ../source/specifications/core-metadata.rst:510 msgid "Classifier (multiple use)" @@ -14495,6 +17498,9 @@ msgid "" "Package Index publishes a dynamic list of `currently defined classifiers " "`__." msgstr "" +"Ĉiu ero estas signoĉeno de unu klasigila valoro por la distribuo. Klasigiloj " +"estas priskribitaj en :pep:`301`, kaj la Python-Pakindekso eldonas dinamikan " +"liston de `aktuale difinitaj klasigiloj `__." #: ../source/specifications/core-metadata.rst:520 msgid "" @@ -14555,6 +17561,9 @@ msgid "" "The names MUST conform to the restrictions specified by the ``Provides-Extra:" "`` field." msgstr "" +"Kome disigita listo de nomoj de «ekstraĵoj». Tiuj estas difinitaj de la " +"postulata projekto, por specifaj funkcioj postulantaj ekstrajn dependecojn. " +"La nomoj DEVAS observi la limigojn de la kampo ``Provides-Extra:``." #: ../source/specifications/core-metadata.rst:553 msgid "" @@ -14600,6 +17609,9 @@ msgid "" "compatible with. Installation tools may look at this when picking which " "version of a project to install." msgstr "" +"Tiu kampo specifas tiu(j)n versio(j)n de Python, kun kiu(j) la distribuo " +"kongruas. Instalilo povas konsideri tion dum elektado de instalota versio de " +"projekto." #: ../source/specifications/core-metadata.rst:586 msgid "The value must be in the format specified in :doc:`version-specifiers`." @@ -14635,6 +17647,8 @@ msgid "" "The format of a requirement string is a name of an external dependency, " "optionally followed by a version declaration within parentheses." 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:616 msgid "" @@ -14671,6 +17685,10 @@ msgid "" "known\" labels, which can then be given special presentations when being " "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" +"Ekde :pep:`753`, konsumanto de projektaj metadatenoj (kiel la Python-" +"Pakindekso) povas uzi normigan procedon por trovi «bone konatajn» etikedojn, " +"kiujn oni povas prezenti speciale por homoj. Vidu :ref:`well-known-project-" +"urls`." #: ../source/specifications/core-metadata.rst:656 msgid "Provides-Extra (multiple use)" @@ -14682,6 +17700,9 @@ msgid "" "required). For older metadata versions, value restrictions were brought into " "line with ``Name:`` and normalization rules were introduced." msgstr "" +":pep:`685` limigis validajn valorojn al la malambiguaj valoroj (alivorte, " +"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:664 msgid "" @@ -14691,12 +17712,19 @@ msgid "" "hyphen. Names are limited to those which match the following regex (which " "guarantees unambiguity)::" msgstr "" +"Signoĉeno enhavanta la nomon de nedeviga funkcio. Valida nomo konsistas nur " +"el minusklaj Askiaj literoj, Askiaj ciferoj, kaj streketo. Ĝi devas " +"komenciĝi kaj finiĝi per litero aŭ cifero. Streketo devas ne sekvi alian " +"streketon. Nomo devas konformi al la jena regula esprimo (garantiante " +"malambiguecon)::" #: ../source/specifications/core-metadata.rst:672 msgid "" "The specified name may be used to make a dependency conditional on whether " "the optional feature has been requested." msgstr "" +"La specifita nomo povas esti uzata por igi dependecon kondiĉa pri ĉu la " +"nedeviga funkcio estas petata." #: ../source/specifications/core-metadata.rst:680 msgid "" @@ -14752,6 +17780,10 @@ msgid "" "it isn't at all clear how tools should interpret them in the context of an " "open index server such as `PyPI `__." msgstr "" +"La kampoj en ĉi tiu paragrafo estas nuntempe malofte uzataj, ĉar ili estis " +"fasonitaj simile al meĥanismoj en Linux-pakadministraj sistemoj, kaj ne " +"klasas, kiel ilo interpretu ilin por malfermita indeksoservilo kiel `PyPI " +"`__." #: ../source/specifications/core-metadata.rst:717 msgid "" @@ -14773,6 +17805,9 @@ msgid "" "within this distribution. This field *must* include the project identified " "in the ``Name`` field, followed by the version : Name (Version)." msgstr "" +"Ĉiu ero enhavas signoĉenon nomantan projekton Distutils, kiun ĉi tiu " +"distribuo enhavas. Tiu kampo *devas* inkluzivi la projekton identigitan en " +"la kampo ``Name``, sekvita de la versio: Nomo (Versio)." #: ../source/specifications/core-metadata.rst:739 msgid "" @@ -14800,6 +17835,9 @@ msgid "" "in :doc:`version-specifiers`. The distribution's version number will be " "implied if none is specified." msgstr "" +"Oni povas provizi versio-deklaron, kiu devas observi la regulojn en :doc:" +"`version-specifiers`. Se nenio estas provizita, tio implicas la versian " +"numeron de la distribuo." #: ../source/specifications/core-metadata.rst:769 msgid "Obsoletes-Dist (multiple use)" @@ -14811,6 +17849,9 @@ msgid "" "which this distribution renders obsolete, meaning that the two projects " "should not be installed at the same time." msgstr "" +"Ĉiu ero enhavas signiĉenon priskribantan distribuon de distutils-projekto, " +"kiun ĉi tiu distribuo evitindigas – alivorte, oni ne instalu ambaŭ " +"projektojn samtempe." #: ../source/specifications/core-metadata.rst:780 msgid "" @@ -14826,45 +17867,60 @@ msgid "" "g. Gorgon 2.3 gets subsumed into Torqued Python 1.0. When you install " "Torqued Python, the Gorgon distribution should be removed." msgstr "" +"La plej ofta uzo de tiu kampo estas por ŝanĝo de nomo de projekto. Ekzemple, " +"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:798 msgid "Deprecated Fields" msgstr "Evitindaj Kampoj" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 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:812 +#: ../source/specifications/core-metadata.rst:817 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:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 "" +"Signoĉeno de tiu retadreso, el kiu la versio de la distribuo estas " +"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:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "Requires" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "anstataŭe uzu ``Requires-Dist``" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." @@ -14872,14 +17928,17 @@ msgstr "" "Ĉiu ero enhavas signiĉenon priskribantan alian modulon aŭ pakon postulatan " "de tiu pako." -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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 "" +"La formo de postulo-signoĉeno estas identa al tiu de modulo aŭ paknomo " +"uzebla kun la ``import``-aserto, laŭvole sekvita de versio-deklaro en rondaj " +"krampoj." -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -14890,7 +17949,7 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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." @@ -14898,14 +17957,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:859 +#: ../source/specifications/core-metadata.rst:864 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:862 +#: ../source/specifications/core-metadata.rst:867 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." @@ -14913,15 +17972,15 @@ msgstr "" "Ne ekzistas listo de uzendaj signoĉenoj; la komunumo de Python elektu siajn " "proprajn normojn." -#: ../source/specifications/core-metadata.rst:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "Provides" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "anstataŭe uzu ``Provides-Dist``" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -14930,89 +17989,95 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "Obsoletes" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "anstataŭe uzu ``Obsoletes-Dist``" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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 "" +"Ĉiu ero enhavas tekston priskribantan pakon aŭ modulon, kiun tiu pako " +"malnoviĝintigas, tiel ke la du pakaĵoj ne estu instalitaj kune. Oni povas " +"provizi versio-deklarojn." -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:912 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 "" +"La plej ofta uzo de tiu kampo estas por ŝanĝo de nomo de pako. Ekzemple, " +"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:919 +#: ../source/specifications/core-metadata.rst:924 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:920 +#: ../source/specifications/core-metadata.rst:925 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:921 +#: ../source/specifications/core-metadata.rst:926 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:922 +#: ../source/specifications/core-metadata.rst:927 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:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "Aldonis ``Description-Content-Type`` kaj ``Provides-Extra``." -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "Aldonis kanonan metodon por transformi metadatenojn al JSON." -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "Restriktis la gramatikon de la kampo ``Name``." -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 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:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "Aldonis la kampon ``Dynamic``." -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 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:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "Devigis normigon de nomoj de ekstraĵoj." -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 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:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "Aldonis la kampon ``License-Expression``." -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "Aldonis la kampon ``License-File``." -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "Marklingvo reStructuredText: https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "RFC 822 Long-Ĉapaj Kampoj: :rfc:`822#section-3.1.1`" @@ -15026,6 +18091,9 @@ msgid "" "package requirements in ``pyproject.toml`` files such that they are not " "included in project metadata when it is built." msgstr "" +"Ĉi tiu specifo difinas Dependecan Grupon, kiu estas meĥanismo por konservi " +"pako-postulojn en ``pyproject.toml`` tiel, ke ili ne inkluziviĝas en " +"projektaj metadatenoj post konstruado." #: ../source/specifications/dependency-groups.rst:11 msgid "" @@ -15033,6 +18101,9 @@ msgid "" "linting and testing, as well as for projects which are not built for " "distribution, like collections of related scripts." msgstr "" +"Dependenca Grupo taŭgas por interna evoluada uzokazo kiel sintaksanalizado " +"kaj testado kaj ankaŭ por projekto ne konstruita por distribuado, kiel " +"kolekto de rilataj programetoj." #: ../source/specifications/dependency-groups.rst:15 msgid "" @@ -15040,6 +18111,8 @@ msgid "" "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" +"Fundamente, Dependeca Grupo estas normigita subaro de la kapabloj de dosiero " +"``requirements.txt`` (specifa al ``pip``)." #: ../source/specifications/dependency-groups.rst:20 #: ../source/specifications/dependency-specifiers.rst:26 @@ -15081,6 +18154,9 @@ msgid "" "Dependency Groups MUST :ref:`normalize ` these names " "before comparisons." msgstr "" +"Ŝlosilo de ``[dependency-groups]``, ankaŭ nomita «grupo-nomo», devas esti :" +"ref:`valida nenormigita nomo `. Ilo pritraktanta Dependecan " +"Grupon DEVAS :ref:`normigi ` la nomon antaŭ komparado." #: ../source/specifications/dependency-groups.rst:49 msgid "" @@ -15098,6 +18174,11 @@ msgid "" "Strings must be valid :ref:`dependency specifiers `, " "and tables must be valid Dependency Group Includes." msgstr "" +"Postulo-listoj, t.e. la valoroj en ``[dependency-groups]``, povas enhavi " +"signoĉenojn, tabelojn (``dict`` de Python), aŭ miksaĵo de signoĉenoj kaj " +"tabeloj. La signoĉenoj devas esti validaj :ref:`dependeco-specifiloj " +"`, kaj tabeloj devas esti validaj Dependeco-Grupo-" +"Inkluzivoj." #: ../source/specifications/dependency-groups.rst:59 msgid "Dependency Group Include" @@ -15116,6 +18197,8 @@ msgid "" "An include is a table with exactly one key, ``\"include-group\"``, whose " "value is a string, the name of another Dependency Group." msgstr "" +"Inkluzivo estas tabelo kun ekzakte unu ŝlosilo, ``\"include-group\"``, kies " +"valoro estas signoĉeno, la nomo de alia Dependeca Grupo." #: ../source/specifications/dependency-groups.rst:67 msgid "" @@ -15133,6 +18216,9 @@ msgid "" "SHOULD NOT deduplicate or otherwise alter the list contents produced by the " "include. For example, given the following table:" msgstr "" +"Inklzivo de Dependeca Grupo povas specifi la saman pakon plurfoje. Ilo NE " +"SENDUPLIKATIGU NEK alie MODIFU la enhavon de la enhavojn de listo generita " +"de la inkluzivo. Ekzemple, pri la jena tabelo:" #: ../source/specifications/dependency-groups.rst:90 msgid "" @@ -15161,6 +18247,10 @@ msgid "" "``METADATA`` files should not include referenceable fields containing " "Dependency Groups." msgstr "" +"Konstrua malfasado DEVAS NE inkluzivi datenon pri Dependecaj Grupoj en " +"konstruita distribuo kiel pakan metadatenon. Tio signifas, ke la dosiero " +"``PKG-INFO`` de fonta distribuo kaj la dosiero ``METADATA`` de wheel ne " +"inkluzivu referenceblan kampon enhavantan Dependecan Grupon." #: ../source/specifications/dependency-groups.rst:106 msgid "" @@ -15169,6 +18259,10 @@ msgid "" "``[dependency-groups]``. However, the table's contents are not part of a " "built package's interfaces." msgstr "" +"Tamen validas uzi Dependecan Grupo por solvi dinamikajn metadatenojn, kaj " +"dosiero ``pyproject.toml`` en fonta distribuo ankoraŭ enhavas ``[dependency-" +"groups]``. Tamen, la enhavo de la tabelo ne estas parto de la interfaco de " +"konstruita pako." #: ../source/specifications/dependency-groups.rst:112 msgid "Installing Dependency Groups & Extras" @@ -15180,6 +18274,8 @@ msgid "" "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 " +"de Dependeco-Grupo. Ilo provizu proprajn interfacojn por tiu celo." #: ../source/specifications/dependency-groups.rst:118 msgid "" @@ -15216,6 +18312,8 @@ msgid "" "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 " +"Grupoj, se ĝi ne bezonas tion." #: ../source/specifications/dependency-groups.rst:139 msgid "" @@ -15223,6 +18321,8 @@ msgid "" "allow the ``foo`` group to be used and only error if the ``bar`` group is " "used:" msgstr "" +"Tiu signifas, ke por la jenaj datenoj, iloj ordinare permesos la uzadon de " +"la grupo ``foo``, kaj nur sciigos pri eraro se la grupo ``bar`` estas uzata:" #: ../source/specifications/dependency-groups.rst:150 msgid "" @@ -15230,6 +18330,9 @@ msgid "" "Linters and validators are an example, as their purpose is to validate the " "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 " +"validas." #: ../source/specifications/dependency-groups.rst:155 #: ../source/specifications/inline-script-metadata.rst:123 @@ -15242,6 +18345,9 @@ msgid "" "Group to stdout, newline delimited. The output is therefore valid " "``requirements.txt`` data." msgstr "" +"La jena Referenca Realigo eligas la enhavon de Dependeca Grupo al " +"``stdout``, apartigitan per novlinioj. La eligaĵo estas tial valida dateno " +"por ``requirements.txt``." #: ../source/specifications/dependency-groups.rst:250 msgid "October 2024: This specification was approved through :pep:`735`." @@ -15280,7 +18386,7 @@ msgstr "" #: ../source/specifications/dependency-specifiers.rst:31 msgid "All features of the language shown with a name based lookup::" -msgstr "" +msgstr "Jen ekzemplo de ĉiuj funkcioj de la lingvo kun nombaza postulo::" #: ../source/specifications/dependency-specifiers.rst:35 msgid "A minimal URL based lookup::" @@ -15357,15 +18463,15 @@ msgstr "Restriktoj pri nomoj de kromaĵoj estas difinitaj en :pep:`685`." #: ../source/specifications/dependency-specifiers.rst:113 msgid "Giving us a rule for name based requirements::" -msgstr "" +msgstr "Jen la regulo pri nomo-baza postulo::" #: ../source/specifications/dependency-specifiers.rst:117 msgid "And a rule for direct reference specifications::" -msgstr "Kaj regulo por rektaj referencaj specifoj::" +msgstr "Kaj regulo pri rekta referenca specifo::" #: ../source/specifications/dependency-specifiers.rst:121 msgid "Leading to the unified rule that can specify a dependency.::" -msgstr "" +msgstr "Kaj la unuigita regulo pri specifo de dependeco::" #: ../source/specifications/dependency-specifiers.rst:126 msgid "Whitespace" @@ -15379,11 +18485,11 @@ msgstr "" "Ne-linifina blanka spaco estas plejparte nedeviga sen semantiko. La sola " "escepto estas trovi la finon de retadresa postulo." -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "Nomoj" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -15394,20 +18500,31 @@ msgid "" "redefinition of name may take place in a future metadata PEP. The regex (run " "with re.IGNORECASE) is::" msgstr "" +"Nomoj de Python-distribuo estas aktuale difinitaj en :pep:`345`. Nomo estas " +"la ĉefidentigilo de distribuo. Ĝi ekzistas en ĉiuj specifoj pri dependecoj " +"kaj sufiĉas por sia propra specifo. Tamen, PyPI restrikegas nomojn — nomo " +"devas kongrui kun usklecblinda regula esprimo; alie ĝi malakceptiĝos. Tial " +"ĉi tiu dokumento limigas la akcepteblajn identigilojn al tiu regula esprimo. " +"Plena redifino de nomo povas okazi en verkota metadatena PEP. Jen la regula " +"esprimo (rulu kun ``re.IGNORECASE``)::" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "Ekstraĵoj" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 "" +"Ekstraĵo estas nedeviga parto de distribuo. Distribuo povas specifi tiom da " +"ekstraĵoj kiom necesas, kaj ĉiu ekstraĵo kaŭzas la deklaron de pliaj " +"dependecoj de la distribuo **kiam** la ekstraĵo estas uzata en depenceco-" +"specifo. Ekzemple::" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -15415,17 +18532,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "Se pluraj ekstraĵoj estas listigitaj, ĉiuj dependaĵoj estas kunigitaj." -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "Versioj" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -15436,11 +18552,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "Mediaj Markoj" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -15448,8 +18564,13 @@ msgid "" "older Python versions it has to be installed as a dependency. This can be " "expressed as so::" msgstr "" +"Medio-markilo permesas al dependeco-specifo provizi regulon pri tiam, kiam " +"la dependaĵo estu uzata. Ekzemple, konsideru pakon dependantan de " +"``argparse``. En Python 2.7, ``argparse`` ĉiam ekzistas. Sur pli malnova " +"versio de Python, ĝi devas esti instalita kiel dependeco. Oni esprimas tion " +"jene::" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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." @@ -15457,7 +18578,7 @@ msgstr "" "La valoro de marka esprimo estas aŭ ``True`` aŭ ``False``. Se la valoro " "estas ``False``, oni ignoru la dependecan specifon." -#: ../source/specifications/dependency-specifiers.rst:186 +#: ../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 " @@ -15466,7 +18587,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -15478,8 +18599,16 @@ msgid "" "Python behaviour. Otherwise an error should be raised. e.g. the following " "will result in errors::" msgstr "" +"Komparo en marko-esprimo dependas de la komparo-operatoro. La operatoroj " +" ne en funkcias same kiel la operatoroj por " +"signoĉenoj en Python. La operatoroj funkcias laŭ la reguloj " +"pri komparado de versioj en la :ref:`Specifo pri versio-specifiloj `, se tiuj estas difinitaj (t.e. se ambaŭ flankoj estas validaj " +"versio-specifiloj). Se mankas difinita konduto laŭ ĉi tiu specifo kaj la " +"operatoro ekzistas en Python, do la operatoro sekvas la konduton de Python. " +"Alikaze ilo sciigu pri eraro. Ekzemple, la jeno kaŭzos erarojn::" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -15489,7 +18618,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -15497,7 +18626,7 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 msgid "" "Unknown variables must raise an error rather than resulting in a comparison " "that evaluates to True or False." @@ -15505,14 +18634,16 @@ msgstr "" "Nekonata variablo devas kaŭzi eraro, ne rezultigante komparon de valoro " "``True`` aŭ ``False``." -#: ../source/specifications/dependency-specifiers.rst:219 +#: ../source/specifications/dependency-specifiers.rst:227 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 "" +"Variablo ne komputebla sur iu realigo de Python estu ``0`` por versioj kaj " +"malplena signoĉeno por aliaj variabloj." -#: ../source/specifications/dependency-specifiers.rst:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -15522,39 +18653,39 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "Marko" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "Python-ekvivalentaĵo" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "Ekzemplaj valoroj" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "``os_name``" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr ":py:data:`os.name`" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "``posix``, ``java``" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "``sys_platform``" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr ":py:data:`sys.platform`" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" @@ -15562,63 +18693,64 @@ msgstr "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (notu, ke «linux» estas " "de Python3 kaj «linux2» de Python2)" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "``platform_machine``" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr ":py:func:`platform.machine()`" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "``x86_64``" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "``platform_python_implementation``" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr ":py:func:`platform.python_implementation()`" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "``CPython``, ``Jython``" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "``platform_release``" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr ":py:func:`platform.release()`" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "``platform_system``" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr ":py:func:`platform.system()`" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "``Linux``, ``Windows``, ``Java``" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "``platform_version``" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr ":py:func:`platform.version()`" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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 " @@ -15628,65 +18760,65 @@ msgstr "" "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``" -#: ../source/specifications/dependency-specifiers.rst:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "``python_version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "``'.'.join(platform.python_version_tuple()[:2])``" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "``3.4``, ``2.7``" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "``python_full_version``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr ":py:func:`platform.python_version()`" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "``3.4.0``, ``3.5.0b1``" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "``implementation_name``" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr ":py:data:`sys.implementation.name `" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "``cpython``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "``implementation_version``" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "vidu la difinon ĉi-sube" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "``extra``" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "Eraro, se ne ekzistas kunteksto interpretanta la specifon." -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "``test``" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" @@ -15694,7 +18826,7 @@ msgstr "" "La marka variablo ``implementation_version`` devenas de :py:data:`sys." "implementation.version `:" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." @@ -15702,23 +18834,23 @@ msgstr "" "Tiu paragrafo de media marko, origine difinita per :pep:`508`, eksvalidigas " "la paragrafon pri media marko en :pep:`345`." -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "Kompleta Gramatiko" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "La kompleta gramatiko por parseley::" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "Testa programo – se la gramatiko estas en signoĉeno ``grammar``:" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "Novembro 2015: Ĉi tiu specifo estis aprobita per :pep:`508`." -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -15730,7 +18862,7 @@ msgstr "" "python_version_tuple()[:2])``, por estontaj versioj de Python kun du-ciferaj " "maĵoraj kaj minoraj versioj (ekz. 3.10). [#future_versions]_" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " @@ -15739,7 +18871,7 @@ msgstr "" "Junio 2024: La difino de ``version_many`` estis ŝanĝita por permesi lastan " "komon, konforme al la Python-realigo uzata ekde malfrua 2022." -#: ../source/specifications/dependency-specifiers.rst:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" @@ -15747,12 +18879,12 @@ msgstr "" "pip, la rekomendata instalilo por Python-pakoj (http://pip.readthedocs.org/" "en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 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:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -15772,6 +18904,10 @@ msgid "" "Origin of the distribution. The general structure and usage of ``*.dist-" "info`` directories is described in :ref:`recording-installed-packages`." msgstr "" +"Ĉi tiu dokumento specifas dosieron :file:`direct_url.json` en la dosierujo " +"``*.dist-info`` de instalita distribuo por registri la rektan retadresan " +"originon de la distribuo. La ĝenerala strukturo kaj uzado de dosierujoj ``*." +"dist-info`` troviĝas en :ref:`recording-installed-packages`." #: ../source/specifications/direct-url.rst:17 msgid "" @@ -15779,9 +18915,13 @@ msgid "" "directory by installers when installing a distribution from a requirement " "specifying a direct URL reference (including a VCS URL)." msgstr "" +"La dosiero :file:`direct_url.json` DEVAS esti kreita en la dosierujo :file:" +"`*.dist-info` far instalilo dum instalado de distribuo per postulo " +"specifanta rektan retadresan referencon (inkluzive de versikontrolsistema " +"retadreso)." #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -15890,6 +19030,9 @@ msgid "" "represent URLs to python projects and distribution artifacts such as VCS " "source trees, local source trees, source distributions and wheels." msgstr "" +"Jen dokumento specifanta JSON-seriigeblan abstraktan datenstrukturon, kiu " +"prezentas retadreson al Python-projekto aŭ distribuan artefakton kiel " +"versikontrolsistema fontarbo, loka fontarbo, fonta distribuo kaj wheel." #: ../source/specifications/direct-url-data-structure.rst:13 msgid "" @@ -15914,6 +19057,9 @@ msgid "" "``string``. Its content must be a valid URL according to the `WHATWG URL " "Standard `_." msgstr "" +"Ĝi DEVAS enhavi almenaŭ du kampoj. La unua estas ``url`` de tipo ``string``. " +"Ĝia enhavo devas esti valida URL laŭ la `normo de WHATWG pri URL `_." #: ../source/specifications/direct-url-data-structure.rst:28 msgid "" @@ -15923,6 +19069,11 @@ msgid "" "directory). These info fields have a (possibly empty) subdictionary as " "value, with the possible keys defined below." msgstr "" +"Depende de la celo de ``url``, la dua kampo DEVAS esti unu el ``vcs_info`` " +"(se ``url`` referencas versikontrolan sistemon), ``archive_info`` (se " +"``url`` estas fonta arĥivo aŭ wheel), aŭ ``dir_info`` (se ``url`` estas loka " +"dosierujo). La valoro de tia kampo estas (eble malplena) subvortaro, kies " +"eblaj ŝlosiloj difiniĝas ĉi-sube." #: ../source/specifications/direct-url-data-structure.rst:35 msgid "Security Considerations" @@ -15941,6 +19092,8 @@ msgid "" "The user:password section of the URL MAY however be composed of environment " "variables, matching the following regular expression:" msgstr "" +"La parto «uzanto:pasvorto» de la URL POVAS tamen konsisti el medio-variabloj " +"laŭ la jena regula esprimo:" #: ../source/specifications/direct-url-data-structure.rst:48 msgid "" @@ -15948,12 +19101,15 @@ msgid "" "security sensitive string. A typical example is ``git`` in the case of a URL " "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" +"Krome, la parto «uzanto:pasvorto» de la URL POVAS esti bone konata, ne-" +"sekurece-grava signoĉeno. Tipa ekzemplo estas ``git`` en URL kiel ``ssh://" +"git@gitlab.com/uzanto/deponejo``." -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "Versikontrolsistemaj Retadresoj" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:" @@ -15961,7 +19117,7 @@ msgstr "" "Se ``url`` montras versikontrolsisteman deponejon, la ŝlosilo ``vcs_info`` " "DEVAS ekzisti kiel vortaro kun la jenaj ŝlosiloj:" -#: ../source/specifications/direct-url-data-structure.rst:58 +#: ../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 " @@ -15969,8 +19125,14 @@ msgid "" "MUST be compatible with the corresponding VCS, so an installer can hand it " "off without transformation to a checkout/download command of the VCS." msgstr "" +"Ŝlosilo ``vcs`` (de tipo ``string``) DEVAS ĉeesti, enhavante la nomon de la " +"versikontrola sistemo (unu el ``git``, ``hg``, ``bzr``, ``svn``). Alia " +"versikontrola sistemo ESTU registrita per nova PEP amendanta ĉi tiun " +"specifon. La valoro de ``url`` DEVAS kongrui kun la respondanta " +"versikontrola sistemo tiel, ke instalilo povas facile krei komandon por " +"elŝutado el versikontrola sistemo." -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -15978,19 +19140,23 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 "" +"Ŝlosilo ``commit_id`` (de tipo ``string``) DEVAS ekzisti, kies valoro estas " +"la ekzakta revizia numero intalota. Se la versikontrola sistemo subtenas " +"haketaĵo-baza revizio-identigilo, oni DEVAS uzi tian haketaĵon kiel " +"``commit_id`` por referenci nemodifeblan version de la fontokodo." -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "Arĥivaj Retadresoj" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:" @@ -15998,7 +19164,7 @@ msgstr "" "Se ``url`` montras fontan arĥivon aŭ wheel, la ŝlosilo ``archive_info`` " "DEVAS ekzisti kiel vortaro kun la jenaj ŝlosiloj:" -#: ../source/specifications/direct-url-data-structure.rst:81 +#: ../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." @@ -16006,18 +19172,20 @@ msgstr "" "Ŝlosilo ``hashes`` ĈEESTU kiel vortaro rilatanta haketaĵan nomon al " "deksesume kodita haketaĵo de la dosiero." -#: ../source/specifications/direct-url-data-structure.rst:84 +#: ../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 "" +"Oni povas inkluzivi plurajn haketaĵojn. La konsumanto decidas kion fari pri " +"pluraj haketaĵoj (ĝi povas kontroli ĉiujn, aŭ iujn, aŭ neniun)." -#: ../source/specifications/direct-url-data-structure.rst:88 +#: ../source/specifications/direct-url-data-structure.rst:92 msgid "These hash names SHOULD always be normalized to be lowercase." msgstr "Tiuj haketaĵaj nomoj ESTU normigitaj minuskle." -#: ../source/specifications/direct-url-data-structure.rst:90 +#: ../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 " @@ -16025,8 +19193,13 @@ msgid "" "secure algorithm from :py:data:`hashlib.algorithms_guaranteed` SHOULD always " "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" +"Ajna haketaĵa algoritmo disponebla per :py:mod:`hashlib` (pli precize, " +"donebla al :py:func:`hashlib.new()` sen pliaj parametroj) estas uzebla kiel " +"ŝlosilo por la vortaro ``hashes``. Oni INKLUZIVU almenaŭ unu sekuran " +"algoritmon el :py:data:`hashlib.algorithms_guaranteed`. Aktuale, ni specife " +"rekomendas ``sha256``." -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../source/specifications/direct-url-data-structure.rst:100 msgid "" "A deprecated ``hash`` key (type ``string``) MAY be present for backwards " "compatibility purposes, with value ``=``." @@ -16035,7 +19208,7 @@ msgstr "" "retrokongrueco, kies valoro estas ``=``." -#: ../source/specifications/direct-url-data-structure.rst:99 +#: ../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 " @@ -16043,7 +19216,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -16051,11 +19224,11 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "Lokaj dosierujoj" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:" @@ -16063,7 +19236,7 @@ msgstr "" "Se ``url`` montras lokan dosierujon, la ŝlosilo ``vcs_info`` DEVAS ekzisti " "kiel vortaro kun la jenaj ŝlosiloj:" -#: ../source/specifications/direct-url-data-structure.rst:113 +#: ../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 " @@ -16073,30 +19246,36 @@ msgstr "" "instalita en modifebla reĝimo, ``false`` se ne. Se ĝi mankas, la implicita " "valoro estas ``false``." -#: ../source/specifications/direct-url-data-structure.rst:116 +#: ../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 "" +"Se ``url`` referencas lokan dosierujon, ĝi DEVAS havi la skemon ``file`` kaj " +"observu :rfc:`8089`. Speciale, la dosierloka komponanto devas esti absoluta. " +"Simbola ligo ESTU konservata, dum absolutigo de relativa dosierloko." -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "Projektoj en subdosierujoj" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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 "" +"Supranivela kampo ``subdirectory`` POVAS ekzisti, enhavanta dosierujan lokon " +"relativan al la radiko de la versikontrolsistema deponejo, fonta arĥivo aŭ " +"loka dosierujo, por specifi la lokon de ``pyproject.toml`` aŭ ``setup.py``." -#: ../source/specifications/direct-url-data-structure.rst:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "Registrita Versikontrola Sistemo" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -16106,49 +19285,56 @@ msgid "" "name (lowercased). Additional fields that would be necessary to support such " "VCS SHOULD be prefixed with the VCS command name." msgstr "" +"Jen listo de registritaj versikontrolsistemoj; versikontrolsistemo-specifaj " +"informoj pri kiel uzi la kampojn ``vcs``, ``requested_revision`` kaj aliajn " +"de ``vcs_info``; kaj en kelkaj kazoj suplementaj versikontrolsistemo-" +"specifaj kampoj. Ilo POVAS subteni alian versikontrolan sistemon, sed estas " +"REKOMENDATE registri ĝin per PEP modifanta ĉi tiun specifon. La kampo " +"``vcs`` ESTU la komanda nomo (minuskla). Suplementaj kampoj necesaj por tiu " +"versikontrola sistemo HAVU prefikson de la versikontrolsistema komanda nomo." -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "Git" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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 "Ĉefpaĝo" -#: ../source/specifications/direct-url-data-structure.rst:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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 "komando de versikontrola sistemo" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" msgstr "git" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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 "kampo ``vcs``" -#: ../source/specifications/direct-url-data-structure.rst:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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 "kampo ``requested_revision``" -#: ../source/specifications/direct-url-data-structure.rst:153 +#: ../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." @@ -16156,18 +19342,18 @@ msgstr "" "Nomo de etikedo, nomo de branĉo, referenco de Git, haketaĵo de enmeto, " "mallongigita haketaĵo de enmeto, aŭ io simila." -#: ../source/specifications/direct-url-data-structure.rst:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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 "kampo ``commit_id``" -#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "Haketaĵo de ŝanĝaro (40 deksesumaj signoj por SHA1)." -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -16179,64 +19365,64 @@ msgstr "" "komenciĝanta per ``refs/tags/`` respondas al etikedo, kaj referenco " "komenciĝanta per ``refs/remotes/origin/`` post klonado respondas al branĉo." -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "Mercurial" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" msgstr "hg" -#: ../source/specifications/direct-url-data-structure.rst:180 +#: ../source/specifications/direct-url-data-structure.rst:190 msgid "A tag name, branch name, changeset ID, shortened changeset ID." msgstr "" "Nomo de etikedo, nomo de branĉo, identigilo de ŝanĝaro, mallongigita " "identigilo de ŝanĝaro." -#: ../source/specifications/direct-url-data-structure.rst:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "Identigilo de ŝanĝaro (40 deksesumaj signoj)." -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "Bazaar" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "https://www.breezy-vcs.org/" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" msgstr "bzr" -#: ../source/specifications/direct-url-data-structure.rst:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "Nomo de etikedo, nomo de branĉo, identigilo de revizio." -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "Identigilo de revizio." -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" msgstr "svn" -#: ../source/specifications/direct-url-data-structure.rst:216 +#: ../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``." @@ -16244,7 +19430,7 @@ msgstr "" "``requested_revision`` devas kongrui kun la opcio ``--revision`` de ``svn " "checkout`` . Je Subversion, la branĉo aŭ etikedo estas parto de ``url``." -#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../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." @@ -16252,11 +19438,11 @@ msgstr "" "Ĉar Subversion ne subtenas malloke unikan identigilon, ĉi tiu kampo estas la " "revizinumero de Subversion en la respondanta deponejo." -#: ../source/specifications/direct-url-data-structure.rst:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "JSON-Skemo" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../source/specifications/direct-url-data-structure.rst:237 msgid "" "The following JSON Schema can be used to validate the contents of " "``direct_url.json``:" @@ -16264,23 +19450,23 @@ msgstr "" "Jen JSON-skemo usebla por kontroli la validecon de la enhavo de ``direct_url." "json``:" -#: ../source/specifications/direct-url-data-structure.rst:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "Fonta arĥivo:" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "Git-retadreso kun etikedo kaj haketaĵo:" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "Loka dosierujo:" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "Loka dosierujo en modifebla reĝimo:" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 msgid "" "March 2020: This specification was approved through :pep:`610`, defining the " "``direct_url.json`` metadata file." @@ -16288,7 +19474,7 @@ msgstr "" "Marto 2020: Ĉi tiu specifo estis aprobita per :pep:`610`, difinante la " "metadatenan dosieron ``direct_url.json``." -#: ../source/specifications/direct-url-data-structure.rst:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -16315,6 +19501,9 @@ msgid "" "installs the distribution, it will create a command-line wrapper for each " "entry point." msgstr "" +"Distribuo povas specifi enirpunktojn ``console scripts``, po unu por " +"funkcio. Kiam *pip* (aŭ alia instalilo konanta ``console_scripts``) instalos " +"la distribuon, ĝi kreos komandliniajn volvilojn po unu por enirpunkto." #: ../source/specifications/entry-points.rst:14 msgid "" @@ -16323,6 +19512,10 @@ msgid "" "installed packages. For more about this, see :doc:`/guides/creating-and-" "discovering-plugins`." msgstr "" +"Programo povas uzi enirpunkton por ŝargi kromprogramojn. Ekzemple, la " +"sintaksreliefigilo Pygments povas uzi pliajn sintaksanalizilojn kaj stilojn " +"el aparte instalitaj pakoj. Por pli pri tio, legu :doc:`/guides/creating-and-" +"discovering-plugins`." #: ../source/specifications/entry-points.rst:19 msgid "" @@ -16356,6 +19549,15 @@ msgid "" "of letters, numbers and underscores, separated by dots (regex ``^\\w+(\\." "\\w+)*$``)." msgstr "" +"La **grupo**, al kiu enirpunkto apartenas, indikas tian objekton, kian ĝi " +"provizas. Ekzemple, la grupo ``console_scripts`` estas por enirpunkto al " +"funkcio uzebla kiel komando, dum ``pygments.styles`` estas la grupo por " +"klaso difinanta pygments-stilon. La konsumanto tipe difinas la atendatan " +"interfacon. Por eviti konflikton, konsumanto difinanta novan grupon komencu " +"nomon per nomo ĉe PyPI posedata de la konsumanta projekto sekvita de ``.``. " +"Nomo de grupo devas konsisti el unu aŭ pluraj grupoj de literoj, ciferoj kaj " +"substrekoj, apartigitaj de punktoj (laŭ la regula esprimo ``^\\w+(\\." +"\\w+)*$``)." #: ../source/specifications/entry-points.rst:42 msgid "" @@ -16369,6 +19571,15 @@ msgid "" "is recommended to use only letters, numbers, underscores, dots and dashes " "(regex ``[\\w.-]+``)." msgstr "" +"La **nomo** identigas la enirpunkton en ĝia grupo. La preciza signifo " +"dependas de la uzanto de metadatenoj. Por konzola programeto, la nomo de la " +"enirpunkto estas la komando uzota por lanĉi ĝin. En distribuo, nomoj de " +"enirpunktoj estu unikaj. Se pluraj distribuoj provizas la saman nomon, la " +"uzanto de metadatenoj decidas kion fari. La nomo povas konsisti el ajna " +"skribsigno krom ``=``, sed ĝi povas ne komenciĝi nek finiĝi per blanka " +"spaco, kaj ĝi ne povas komenciĝi per ``[``. Nomo de nova enirpunkto konsistu " +"el literoj, ciferoj, substrekoj, punktoj kaj streketoj (laŭ la regula " +"esprimo ``[\\w.-]+``)." #: ../source/specifications/entry-points.rst:51 msgid "" @@ -16377,6 +19588,10 @@ msgid "" "parts delimited by dots and the colon is a valid Python identifier. It is " "intended to be looked up like this::" msgstr "" +"La **objekta referenco** montras Python-objekton. Ĝi estas aŭ en la formo " +"``importebla.modulo`` aŭ en la formo ``importebla.modulo:objekto.atributo``. " +"Ĉiu parto inter punktoj kaj dupunktoj estas valida Python-identigilo. Oni " +"serĉas ĝin jene::" #: ../source/specifications/entry-points.rst:64 msgid "" @@ -16384,6 +19599,8 @@ msgid "" "for want of a better term, especially where it points to a function to " "launch a program." msgstr "" +"Kelkaj iloj nomas tian objektan referencon mem «enirpunkto», speciale kiam " +"ĝi montras funkcion por lanĉi programon." #: ../source/specifications/entry-points.rst:68 msgid "" @@ -16414,6 +19631,11 @@ msgid "" "distributions, and in :ref:`binary-distribution-format` for wheels. The file " "uses the UTF-8 character encoding." msgstr "" +"Enirpunktoj difiniĝas en dosiero nomita :file:`entry_points.txt` en la " +"dosierujo :file:`*.dist-info` de la distribuo. Tiu estas la dosierujo " +"priskribita en :ref:`recording-installed-packages` por instaleblaj " +"distribuoj kaj en :ref:`binary-distribution-format` por wheel. La dosiero " +"estas kodita laŭ UTF-8." #: ../source/specifications/entry-points.rst:88 msgid "" @@ -16422,6 +19644,10 @@ msgid "" "whereas entry point names are case sensitive. A case-sensitive config parser " "can be made like this::" msgstr "" +"La dosieraj enhavoj estas en la dosierformo INI, legata de la modulo :mod:" +"`configparser` de Python. Tamen, configparser apriore estas usklecoblinda " +"pri nomoj, sed enirpunktoj estas usklecdistinga. Oni povas krei " +"usklecdistingan ``ConfigParser`` jene::" #: ../source/specifications/entry-points.rst:98 msgid "" @@ -16450,6 +19676,14 @@ msgid "" "it is recommended only to insert a space between the object reference and " "the left square bracket." msgstr "" +"En valoro, legilo devas akcepti kaj ignori spacetojn (inkluzive de sinsekvo " +"de pluraj spacetoj) antaŭ aŭ post dupunkto, inter la objekta referenco kaj " +"la malferma rekta krampo, inter la ekstraĵaj nomoj kaj la apartigantaj " +"kvadrataj krampoj kaj dupunktoj, kaj post la ferma rekta krampo. La sintakso " +"de ekstraĵoj estas formale specifita kiel parto de :pep:`508` (kiel " +"``extras``), kaj restriktoj pri valoroj estas formale specifitaj en :pep:" +"`685`. Ilo skribanta la dosieron metu spaceton nur inter la objekta " +"referenco kaj la malferma rekta krampo." #: ../source/specifications/entry-points.rst:128 msgid "Use for scripts" @@ -16465,6 +19699,12 @@ msgid "" "return an integer to be used as a process exit code, and returning ``None`` " "is equivalent to returning ``0``." msgstr "" +"Du grupoj de enirpunktoj havas specialan signifon je pakado: " +"``console_scripts`` kaj ``gui_scripts``. En ambaŭ grupoj, la nomo de la " +"enirpunkto estu uzebla kiel komando en sistema terminalo post instalo de la " +"pako. La objekta referenco montras funkcion alvokotan senargumente, kiam la " +"komando ruliĝos. La funkcio povas livero entjeron kiel procezan elirkodon. " +"Liveri ``None`` ekvivalentas liveri ``0``." #: ../source/specifications/entry-points.rst:138 msgid "" @@ -16484,6 +19724,12 @@ msgid "" "but cannot use standard streams unless application code redirects them. " "Other platforms do not have the same distinction." msgstr "" +"La diferenco inter ``console_scripts`` kaj ``gui_scripts`` nur gravas sur " +"Windows. ``console_scripts`` estas volvita en konzolan ruleblaĵon, alligitan " +"an konzolo, kiu povas uzi :py:data:`sys.stdin`, :py:data:`sys.stdout` kaj :" +"py:data:`sys.stderr` por enigo kaj eligo. ``gui_scripts`` estas volvita en " +"grafikan ruleblaĵon, uzeblan sen konzolo, kiu ne povas uzi la normajn fluojn " +"sen eksplicita redirektado. Aliaj platformoj ne havas tian distingon." #: ../source/specifications/entry-points.rst:153 msgid "" @@ -16500,6 +19746,9 @@ msgid "" "only in case. The behaviour of install tools when names differ only in case " "is undefined." msgstr "" +"Ĉar dosieroj kreiĝas de la nomoj, kaj kelkaj dosiersistemoj estas " +"usklecblidaj, pako ne uzu tiajn nomojn en tiuj grupoj, kiaj nur diferencas " +"usklece. La tiukaza konduto de instaliloj ne estas difinita." #: ../source/specifications/entry-points.rst:166 msgid "" @@ -16520,6 +19769,10 @@ msgid "" "as the operating system package manager in a Linux distribution, or as a " "bundled Python environment in an application with a dedicated installer)." msgstr "" +"Dum kelkaj instalaĵoj de Python estas plene mastrumataj de tiu uzanto, kiu " +"instalis Python, aliaj instalaĵoj povas esti disponigitaj kaj mastrumataj " +"alimaniere (kiel ekzemple la mastrumsistema pakadministrilo en Linux-" +"distribuo, aŭ kiel faskigita Python-medio en programo kun propra instalilo)." #: ../source/specifications/externally-managed-environments.rst:13 msgid "" @@ -16537,6 +19790,10 @@ msgid "" "installation environment, and should instead guide the end user towards " "using :ref:`virtual-environments`." msgstr "" +"Ĉi tiu normo difinas markodosieron ``EXTERNALLY-MANAGED``, per kiu Python-" +"instalo indikas al Python-specifa ilo kiel ``pip``, malhelpante instaladon " +"al aŭ malinstaladon de la implicita instala medio de la interpretilo, kaj " +"sugestante al la uzanton :ref:`virtualan medion `." #: ../source/specifications/externally-managed-environments.rst:24 msgid "" @@ -16557,6 +19814,8 @@ msgid "" "contexts that it spans. For clarity, this specification uses the following " "terms in specific ways:" msgstr "" +"Kelkaj terminoj uzitaj en tiu specifo havas plurajn signifojn tra " +"kuntekstoj. Por klareco, ĉi tiu specifo uzas la jenajn terminojn jene:" #: ../source/specifications/externally-managed-environments.rst:61 msgid "distro" @@ -16570,6 +19829,11 @@ msgid "" "and software written in other languages. That is, this is the sense used in " "phrases such as \"Linux distro\" or \"Berkeley Software Distribution.\"" msgstr "" +"Kolekto de diversaj specoj de programoj, ideale fasonitaj kohere, inkluzive " +"de (en kuntekstoj rilataj al ĉ tiu dokumento) la Python-interpretilo mem, " +"programoj verkitaj en Python, kaj programoj verkitaj en aliaj lingvoj. Tio " +"estas la senco en la terminoj «Linux-distribuo» aŭ «Berkeley-" +"Programdistribuo» (BSD)." #: ../source/specifications/externally-managed-environments.rst:46 msgid "" @@ -16577,6 +19841,9 @@ msgid "" "or FreeBSD. It can also be an overlay distribution that installs on top of " "an existing OS, such as Homebrew or MacPorts." msgstr "" +"Distribuo povas esti memstara mastruma sistemo (OS), kiel Debian, Fedora aŭ " +"FreeBSD. Ĝi ankaŭ povas esti plustavola distribuo instalita sur mastruman " +"sistemon, kiel Homebrew aŭ MacPorts." #: ../source/specifications/externally-managed-environments.rst:51 msgid "" @@ -16588,12 +19855,19 @@ msgid "" "\"distribution\" at all. In the Python packaging sense, it uses the full " "phrase \"distribution package\" or just \"package\" (see below)." msgstr "" +"La termino «distribuo» havas alian signifon en Python-pakada kunteksto: " +"fontan aŭ duuman distribuan pako de iu Python-lingva programo, en la senco " +"de ``setuptools.dist.Distribution`` aŭ «fonta distribuo». Por eviti " +"konfuzon, por la Python-pakada senco, ĉi tiu dokumento uzas la plenan " +"terminon «distribua pako» aŭ simple «pako» (vidu ĉi-sube)." #: ../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 "" +"La provizanto de distribuo – la teamo aŭ firmao kolektanta, eldonanta, kaj " +"laŭbezone modifanta la programaron – estas ĝia **distribuanto**." #: ../source/specifications/externally-managed-environments.rst:79 msgid "package" @@ -16613,6 +19887,9 @@ msgid "" "that contains Python modules, though in many cases, a distribution package " "consists of a single importable package of the same name." msgstr "" +"Ĉi tiu dokumento ne uzas la terminon «pako» en la senco de importebla nomo " +"enhavanta Python-modulojn, kvankam ofte distribua pako ja konsistas el unu " +"samnoma importebla pako." #: ../source/specifications/externally-managed-environments.rst:75 msgid "" @@ -16685,6 +19962,9 @@ msgid "" "\"system's package manager\" to refer to a distro package manager in certain " "contexts." msgstr "" +"Ĉi tiu dokumento ankaŭ uzas terminojn kiel «eksteran pakadministrilon» aŭ " +"«sistema pakadministrilon» signifante la pakadministrilon de la distribuo en " +"kelkaj kuntekstoj." #: ../source/specifications/externally-managed-environments.rst:127 msgid "shadow" @@ -16735,6 +20015,15 @@ msgid "" "packages will not delete (or overwrite) files owned by the external package " "manager." msgstr "" +"Due, ĝi reguligas, ke dum instalado de pako al la malloka kunteksto de " +"interpretilo (aŭ al nemarkita interpretilo, aŭ se oni superregas la " +"markadon), **Python -specifa pakadministrilo modifu aŭ forviŝu dosierojn nur " +"en la dosierujoj de la sysconfig-skemo, en kiu ĝi kreus la dosierojn**. Tio " +"permesas al distribuanto de Python-interpretilo starigi du dosierujojn – unu " +"por siaj propre mastrumataj pakoj, la alia por nemastrumataj pakoj " +"instalitaj de la uzanto –, certigante, ke instalado de nemastrumata pako ne " +"forviŝos (nek superskribos) dosierojn mastrumatajn de la ekstera " +"pakadministrilo." #: ../source/specifications/externally-managed-environments.rst:160 msgid "Marking an interpreter as using an external package manager" @@ -16746,6 +20035,8 @@ msgid "" "not an external tool such as apt) installs a package into a certain Python " "context, it should make the following checks by default:" msgstr "" +"Antaŭ ol Python-specifa instalilo (kiel pip – ne ekstera ilo kiel apt) " +"instalas pakon en Python-kuntekston, ĝi implicite kontrolu la jenon:" #: ../source/specifications/externally-managed-environments.rst:167 msgid "" @@ -16769,6 +20060,9 @@ msgid "" "error message indicating that package installation into this Python " "interpreter's directory are disabled outside of a virtual environment." msgstr "" +"Se ambaŭ kondiĉoj veras, la instalilo ĉesu, sciigante pri la eraro, ke " +"instalado de pako en la dosierujon de ĉi tiu Python-interpretilo ne eblas " +"ekster virtuala medio." #: ../source/specifications/externally-managed-environments.rst:177 msgid "" @@ -16777,6 +20071,9 @@ msgid "" "be enabled by default and should carry some connotation that its use is " "risky." msgstr "" +"La instalilo provizu meĥanismon por superregi tiajn regulojn, ekzemple per " +"flago ``--break-system-packages``. Tia opcio ne estu apriora kaj indiku, ke " +"ĝia uzo estas danĝera." #: ../source/specifications/externally-managed-environments.rst:182 msgid "" @@ -16831,6 +20128,8 @@ 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 "" +"kio provizas utilajn kaj distribuo-rilatajn informojn al uzanto provanta " +"instali pakon. Oni ankaŭ povas provizi tradukaĵojn en la sama dosiero:" #: ../source/specifications/externally-managed-environments.rst:240 msgid "" @@ -16851,6 +20150,10 @@ msgid "" "the scheme returned by ``sysconfig.get_default_scheme()``, but based on " "configuration (e.g. ``pip install --user``), it may use a different scheme." msgstr "" +"Ordinare Python-pakinstalo instalas al dosierujo en skemo liverita de la " +"norma biblioteka pako ``sysconfig``. Ofte tio estas la skemo ``sysconfig." +"get_default_scheme()``, sed oni povas alimaniere agordi tion (ekz. per ``pip " +"install --user``)." #: ../source/specifications/externally-managed-environments.rst:255 msgid "" @@ -16867,12 +20170,16 @@ 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 "" +"Se la instalilo ombras ekzistantan instalon dum ĝisdatigado, ni rekomendas, " +"ke ĝi montru averton post la rulo." #: ../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 "" +"Se la instalilo instalas al loko ekster ``sysconfig``-skemo (ekz. ``pip " +"install --target``), do ĉi tiu subsekcio ne estas efektiva." #: ../source/specifications/externally-managed-environments.rst:271 msgid "Recommendations for distros" @@ -16997,6 +20304,11 @@ msgid "" "and non-distro software installs to ``/usr/local`` by default. This split is " "`recommended by the Filesystem Hierarchy Standard`__." msgstr "" +"Notu, ke la distingo inter ``/usr/local`` kaj ``/usr`` similas al la " +"maniero, kiel la media variablo ``PATH`` tipe inkluzivas ``/usr/local/bin:/" +"usr/bin``, kaj ekster-distribua programo tipe apriore instaliĝas al ``/usr/" +"local``. Tiun distingon `rekomendas la Dosiersistema Hierarĥia Normo " +"`__." #: ../source/specifications/externally-managed-environments.rst:349 msgid "" @@ -17017,6 +20329,13 @@ msgid "" "from inside a package build. Then you can use ``pip install`` as part of " "your distro packaging." msgstr "" +"La alia estas aranĝi ŝanĝadon de la implicita skemo ``sysconfig`` dum " +"konstruado de pako, kompare al rulado en instalita sistemo. La adapta " +"meĥanismo de ``sysconfig`` el bpo-43976_ faciligos tion (kiam ĝi estas " +"akceptita kaj realigita): via pakilo agordu median variablon aŭ alian " +"detekteblaĵon, kaj difiun funkcion ``get_preferred_schemes`` liverantan " +"alian skemon dum konstruado de pako. Poste oni povas simple uzi ``pip " +"install`` kiel parto de la pakado de via distribuo." #: ../source/specifications/externally-managed-environments.rst:367 msgid "" @@ -17029,6 +20348,15 @@ msgid "" "absolutely needed, use ``pip uninstall --scheme=posix_distro`` to use pip to " "remove packages from the system-managed directory." msgstr "" +"Ni proponas aldoni flagon ``--scheme=…`` por ruli pip kontraŭ iu specifa " +"skemo. (Vidu `Notojn pri Realigo `_ ĉi-subajn por " +"priskribo pri kiel pip aktuale determinas skemon.) Post la disponigo de tiu " +"flago, por loka testado kaj eble for reala pakado, oni povos ruli ion " +"similan al ``pip install --scheme=posix_distro`` por ekspliciti instali " +"pakon al la loko de la distribuo (ignorante ``get_preferred_schemes``). Oni " +"povos ankaŭ, se tio absolute necesas, uzi ``pip uninstall --" +"scheme=posix_distro`` por uzante pip malistali pakon el la sisteme " +"mastrumata dosierujo." #: ../source/specifications/externally-managed-environments.rst:377 msgid "" @@ -17049,6 +20377,13 @@ msgid "" "packaging process always calls ``pip install --scheme=posix_distro --break-" "system-packages``, which would work too." msgstr "" +"La avantaĝo de aŭtomatigo de tio (ignorante la markodosieron en la konstrua " +"medio kaj igante``get_preferred_schemes`` aŭtomate liveri la skemon de via " +"distribuo) estas, ke ordinara ``pip install`` funkcios dum konstruado de " +"pako, tiel ke nemodifita konstruprogrameto far la originalaj aŭtoroj, kiu " +"interne alvokas ``pip install``, ĝenerale taŭgos. Kompreneble, vi povus " +"alternative simple certigi, ke via pakada procezo ĉiam alvoku ``pip install " +"--scheme=posix_distro --break-system-packages``, kio ankaŭ sufiĉus." #: ../source/specifications/externally-managed-environments.rst:393 msgid "" @@ -17099,6 +20434,8 @@ msgid "" "target ``sysconfig`` scheme, but it has three ways of looking up schemes " "when installing:" msgstr "" +"Aktuale (je Majo 2021), pip ne rekte eblias elektadon de cela ``sysconfig``-" +"skemo, sed ĝi havas tri manierojn serĉi skemon dum instalado:" #: ../source/specifications/externally-managed-environments.rst:422 msgid "``pip install``" @@ -17195,6 +20532,10 @@ msgid "" "standards, and for proposing new ones, is documented on `pypa.io `__." msgstr "" +"Jen listo de aktuale aktivaj specifoj pri kunfunkcipovo mastrumataj de la " +"Python-Pakada Aŭtoritato. La procedo pri ĝisdatigado de tiujn normoj kaj " +"proponado de novaj normoj priskribiĝas ĉe `pypa.io `__." #: ../source/specifications/index-hosted-attestations.rst:6 msgid "Index hosted attestations" @@ -17224,6 +20565,9 @@ msgid "" "documentation `_ for how attestations are " "uploaded." msgstr "" +"La «malnova» alŝuta API ne estas normigita. Vidu `la dokumentaron de la " +"Alŝuta API de PyPI `_ pri alŝutado de " +"atestoj." #: ../source/specifications/index-hosted-attestations.rst:33 msgid "Attestation objects" @@ -17236,6 +20580,10 @@ msgid "" "explicitly listed keys are provided. The required layout of an attestation " "object is provided as pseudocode below." msgstr "" +"Atesta objekto estas JSON-objekto kun pluraj postulataj ŝlosiloj. Programo " +"aŭ subskribanto povas inkluzivi ekstrajn ŝlosilojn, se ĉiuj eksplicite " +"menciitaj ŝlosiloj ekzistas. Jen pseŭdokodo pri la postulata aranĝo de " +"atesta objekto." #: ../source/specifications/index-hosted-attestations.rst:88 msgid "" @@ -17245,6 +20593,11 @@ msgid "" "sources of signed time (such as an :rfc:`3161` Time Stamping Authority or a " "`Roughtime `__ server)." msgstr "" +"Plena datenmodelo de ĉiu objekto en ``transparency_entries`` troviĝas en la :" +"ref:`apendico `. Atesta objekto **INKLUZIVU** unu aŭ plurajn " +"travidebleco-protokolerojn kaj **POVAS** inkluzivi pliajn ŝlosilojn pri " +"aliaj fontoj de tempo de subskribo (kiel Tempindika-Aŭtoritato laŭ :rfc:" +"`3161` aŭ servilo `Roughtime `__)." #: ../source/specifications/index-hosted-attestations.rst:94 msgid "" @@ -17252,6 +20605,9 @@ msgid "" "version is tied to a single cryptographic suite to minimize unnecessary " "cryptographic agility. In version 1, the suite is as follows:" msgstr "" +"Atesta objekto havas version; ĉi tiu PEP specifas version 1. Ĉiu versio " +"estas ligita al unu ĉifraro por minimumigi nenecesan ĉifran facilmovecon. " +"Jen la ĉifraro de versio 1:" #: ../source/specifications/index-hosted-attestations.rst:98 msgid "" @@ -17375,12 +20731,16 @@ msgid "" "The index will serve uploaded attestations along with metadata that can " "assist in verifying them in the form of JSON serialized objects." msgstr "" +"La indekso provizos alŝutitajn atestojn kune kun metdatenoj por konfirmi " +"ilin en la formo de JSON-seriigitaj objektoj." #: ../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 "" +"Tiuj *originpruvaj objektoj* disponiĝas per kaj la Simpla Indeksa API kaj " +"JSON-baza Simpla API ĉi -supraj, kaj havas la jenan aranĝon:" #: ../source/specifications/index-hosted-attestations.rst:169 msgid "or, as pseudocode:" @@ -17401,12 +20761,18 @@ msgid "" "(such as a Trusted Publishing identity), and contains one or more " "attestation objects." msgstr "" +"``attestation_bundles`` estas **deviga** JSON-listo, enhavanta unu aŭ pluraj " +"«faskoj» da atestoj. Ĉiu fasko respondas al subskriba identeco (kiel Fidata " +"Eldona Identeco) kaj enhavas unu aŭ plurajn atestajn objektojn." #: ../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 "" +"Kiel notite en la modelo ``Publisher``, ĉiu objekto ``AttestationBundle." +"publisher`` estas specifa al sia Fidata Eldonanto, sed devas inkluzivi " +"minimume la jenon:" #: ../source/specifications/index-hosted-attestations.rst:228 msgid "" @@ -17438,6 +20804,9 @@ msgid "" "time, as described in :ref:`upload-endpoint` and :ref:`changes-to-provenance-" "objects`." msgstr "" +"Ĉiu listo de atestaj objektoj estas superaro de la listo ``attestation`` " +"donita de la alŝutinto per la kampo ``attestations`` dum alŝutado, laŭ :ref:" +"`upload-endpoint` kaj :ref:`changes-to-provenance-objects`." #: ../source/specifications/index-hosted-attestations.rst:243 msgid "Changes to provenance objects" @@ -17457,6 +20826,9 @@ msgid "" "**MAY** choose to allow additional attestations by pre-existing signing " "identities, such as newer attestation versions for already uploaded files." msgstr "" +"Aldono de novaj atestoj far jam ekzistanta subskriba identeco: la indekso " +"**POVAS** permesi plian ateston far jam ekzistanta subsigriba identeco, " +"ekzemple novan atestan version por jam alŝutinta dosiero." #: ../source/specifications/index-hosted-attestations.rst:253 msgid "" @@ -17491,6 +20863,9 @@ msgid "" "issued by an *a priori* trusted authority (such as a root of trust already " "present within the verifying client)." msgstr "" +"``verification_material.certificate`` estas valida subskriba atestilo " +"eldonita de *apriore* fidata aŭtoritato (kiel fidradiko jam ekzistanta en la " +"kliento)." #: ../source/specifications/index-hosted-attestations.rst:271 msgid "" @@ -17542,6 +20917,9 @@ msgid "" "in attestation objects. Each transparency log entry serves as a source of " "signed inclusion time, and can be verified either online or offline." msgstr "" +"Jen apendico enhavanta pseŭdokodajn datenmodelojn por protokoleroj de " +"travidebleco-protokolo en atesta objekto. Ĉiu protokolero estas fonto de " +"subskribita inkluziva tempo kaj estas konfirmebla konektite aŭ senkonekte." #: ../source/specifications/inline-script-metadata.rst:5 msgid "Inline script metadata" @@ -17599,6 +20977,9 @@ msgid "" "valid embedded content line as described above. For example, the following " "is a single fully valid block:" msgstr "" +"Oni preferu la finan lineon ``# ///``, kiam la sekva linio ne estas valida " +"linio de enkorpigita enhavo laŭ la ĉi-supra priskribo. Ekzemple, la jeno " +"estas unu plene valida bloko:" #: ../source/specifications/inline-script-metadata.rst:51 msgid "" @@ -17606,6 +20987,8 @@ msgid "" "ending line. In such cases tools MAY produce an error. Unclosed blocks MUST " "be ignored." msgstr "" +"Komenca linio DEVAS NE ĉeesti inter alia komenca linio kaj ĝia fina linio. " +"Tiukaze ilo POVAS sciigi pri eraro. Nefermita bloko DEVAS esti ignorita." #: ../source/specifications/inline-script-metadata.rst:54 msgid "" @@ -17621,6 +21004,9 @@ msgid "" "declaration. If they choose not to do so, they MUST process the file as " "UTF-8." msgstr "" +"Ilo leganta enmetitajn metadatenojn POVAS respekti la norman signokodo-" +"deklaron de Python. Se ilo ne faras tion, ĝi DEVAS pritrakti la dosieron " +"kiel UTF-8." #: ../source/specifications/inline-script-metadata.rst:60 msgid "" @@ -17667,13 +21053,13 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" -"La ``[tool`` POVAS esti uzata de ajna ilo, programrulilo aŭ ne, por agordi " -"konduton. Ĝia semantiko estas sama kiel :ref:`la tabelo [tool] en pyproject." -"toml `." +"La tabelo ``[tool]`` POVAS esti uzata de ajna ilo, programrulilo aŭ ne, por " +"agordi konduton. Ĝia semantiko estas sama kiel :ref:`la tabelo [tool] en " +"pyproject.toml `." #: ../source/specifications/inline-script-metadata.rst:86 msgid "The top-level fields are:" @@ -17687,7 +21073,7 @@ msgid "" msgstr "" "``dependencies`` : Listo de signoĉenoj specifantaj la rultempajn dependecojn " "de la programo. Ĉiu ero DEVAS esti valida :ref:`dependeco-specifilo " -"`." +"`." #: ../source/specifications/inline-script-metadata.rst:91 msgid "" @@ -17695,6 +21081,9 @@ msgid "" "which the script is compatible. The value of this field MUST be a valid :ref:" "`version specifier `." msgstr "" +"``requires-python``: Signoĉeno specifanta la Python-versio(j)n kun kiu(j) la " +"programo kongruas. La valoro de tiu kampo devas esti :ref:`versio-specifilo " +"`." #: ../source/specifications/inline-script-metadata.rst:95 msgid "" @@ -17702,6 +21091,9 @@ msgid "" "provided. Script runners SHOULD error if no version of Python that satisfies " "the specified ``requires-python`` can be provided." msgstr "" +"Programeto-rulilo DEVAS sciigi pri eraro, se la specifita ``dependencies`` " +"ne estas plenumebla. Programeto-rulilo SCIIGU pri eraro, se troviĝas neniu " +"versio de Python plenumanta la specifitan ``requires-python``." #: ../source/specifications/inline-script-metadata.rst:100 msgid "Example" @@ -17723,6 +21115,9 @@ msgid "" "update automation in CI. The following is a crude example of modifying the " "content using the ``tomlkit`` library__." msgstr "" +"Ofte ilo modifas dependecojn kiel padadministrilo aŭ aŭtomata ĝisdatigilo de " +"dependecoj en kontinua integrado. Jen malneta ekzemplo de modifado de la " +"enhavo per la `biblioteko `__ ``tomlkit``." #: ../source/specifications/inline-script-metadata.rst:182 msgid "" @@ -17730,6 +21125,8 @@ msgid "" "is not a requirement for editing by any means but rather is a \"nice to " "have\" feature." msgstr "" +"Notu, ke tiu ekzemplo uzis bibliotekon konservantan TOML-aranĝon. Tio ne " +"estas postulata por modifado, sed utilas." #: ../source/specifications/inline-script-metadata.rst:186 msgid "" @@ -17738,7 +21135,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:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "Rekomendoj" @@ -17748,6 +21145,9 @@ msgid "" "use the highest available version of Python that is compatible with the " "script's ``requires-python`` metadata, if defined." msgstr "" +"Ilo, kiu administras diversajn versiojn de Python, uzu la plej novan version " +"de Python kongruan kun la metadateno ``requires-python`` de la programeto, " +"se ĝi ekzistas." #: ../source/specifications/inline-script-metadata.rst:215 msgid "" @@ -17777,6 +21177,8 @@ msgid "" "required to follow. It also describes how to normalize them, which should be " "done before lookups and comparisons." msgstr "" +"Ĉi tiu specifo difinas la formon de nomoj de pakoj kaj ekstraĵoj. Ĝi ankaŭ " +"priskribas normigon de nomoj, kiun oni faru antaŭ serĉado kaj komparado." #: ../source/specifications/name-normalization.rst:13 msgid "Name format" @@ -17789,6 +21191,10 @@ msgid "" "valid project names are limited to those which match the following regex " "(run with :py:data:`re.IGNORECASE`)::" msgstr "" +"Valida nomo konsistas nur el Askiaj literoj, ciferoj, punkto, substreko kaj " +"streketo. Ĝi devas komenciĝi kaj finiĝi per litero aŭ cifero. Alivorte, " +"valida projekta nomo devas konformi al la jena regula esprimo (rulu kun :py:" +"data:`re.IGNORECASE`)::" #: ../source/specifications/name-normalization.rst:26 msgid "Name normalization" @@ -17800,6 +21206,9 @@ msgid "" "or ``_`` replaced with a single ``-`` character. This can be implemented in " "Python with the re module:" msgstr "" +"Oni minuskligu la nomon kaj anstataŭigu sinsekvon de la signoj ``.``, ``-``, " +"aŭ ``_`` per unu signo ``-``. Oni povas fari tion en Python per la modulo " +"``re``:" #: ../source/specifications/name-normalization.rst:39 msgid "This means that the following names are all equivalent:" @@ -17807,7 +21216,7 @@ msgstr "Tio signifas, ke la jenajn nomoj estas ĉiuj ekvivalentaj:" #: ../source/specifications/name-normalization.rst:41 msgid "``friendly-bard`` (normalized form)" -msgstr "``afabla-bardo'' (normigita formo)" +msgstr "``afabla-bardo`` (normigita formo)" #: ../source/specifications/name-normalization.rst:42 msgid "``Friendly-Bard``" @@ -17860,6 +21269,9 @@ msgid "" "compatible with specific platforms, and allows installers to understand " "which distributions are compatible with the system they are running on." msgstr "" +"Per etikedoj pri platforma kongrueco, konstruilo povas marki distribuon " +"kongrua kun specifitaj platformoj, kaj instalilo povas scii, kiuj distribuoj " +"kongruas kun la aktuala sistemo." #: ../source/specifications/platform-compatibility-tags.rst:16 msgid "The tag format is ``{python tag}-{abi tag}-{platform tag}``." @@ -17895,6 +21307,10 @@ msgid "" "the form ``{distribution}-{version}(-{build tag})?-{python tag}-{abitag}-" "{platform tag}.whl``. Other package formats may have their own conventions." msgstr "" +"La konstruita pakformo ``wheel`` inkluzivas tiujn etikedojn en dosiernomoj " +"laŭ la formo ``{distribuo}-{versio}(-{konstruetikedo})?-{pythonetikedo}-" +"{abietikedo}-{platformetikedo}.whl``. Alia pakformo povas havi sian propran " +"konvencion." #: ../source/specifications/platform-compatibility-tags.rst:33 msgid "Any potential spaces in any tag should be replaced with ``_``." @@ -17964,6 +21380,9 @@ msgid "" "shorthand for ``py20`` and ``py30``. Instead, these tags mean the packager " "intentionally released a cross-version-compatible distribution." msgstr "" +"Grave, etikedo nur pri la maĵora versio kiel ``py2`` kaj ``py3`` ne estas " +"mallongigoj de ``py20`` kaj ``py30``. Tiuj signifas, ke la pakinto intence " +"eldonis plurversie kongruan distribuon." #: ../source/specifications/platform-compatibility-tags.rst:61 msgid "" @@ -17985,6 +21404,10 @@ msgid "" "abbreviated in the same way as the Python Tag, e.g. ``cp33d`` would be the " "CPython 3.3 ABI with debugging." msgstr "" +"La ABI-etikedo indikas la ABI-on de Python subtenatan de inkluzivita " +"etendaĵo-modulo. Por realigo-specifa ABI, la realigo estas mallongigita same " +"kiel la Python-etikedo; ekz. ``cp33d`` estas la ABI de CPython 3.3 kun " +"sencimigpovo." #: ../source/specifications/platform-compatibility-tags.rst:73 msgid "The CPython stable ABI is ``abi3`` as in the shared library suffix." @@ -18000,6 +21423,11 @@ msgid "" "distribute binary distributions. Each implementation's community may decide " "how to best use the ABI tag." msgstr "" +"Python-realigo kun tre malstabila ABI povas uzi la unuajn 6 bajtojn (kiel ok " +"base64-koditajn signojn) de la haketaĵo SHA-256 de la fontkoda revizio kaj " +"tradukilaj flagoj ktp, sed ties komunumo verŝajne ne tre bezonas distribui " +"duumajn distribuojn. La komunumo de ĉiu realigo povas decidi la uzadon de la " +"ABI-etikedo." #: ../source/specifications/platform-compatibility-tags.rst:83 msgid "Platform Tag" @@ -18043,6 +21471,9 @@ msgid "" "files to Linux platforms, due to the large ecosystem of Linux platforms and " "subtle differences between them." msgstr "" +"La ĉi-supra simpla skemo ne sufiĉas por publika distribuado de wheel-" +"dosieroj al Linux-platformoj pro la diverseco de la granda ekosistemo de " +"Linux-platformoj." #: ../source/specifications/platform-compatibility-tags.rst:107 msgid "" @@ -18051,16 +21482,25 @@ msgid "" "``manylinux`` platform tag which can be used across most common Linux " "distributions." msgstr "" +"Anstataŭe, por tiuj platformoj, la normo ``manylinux`` estas komuna subaro " +"de Linux-platformoj kaj permesas konstrui wheel kun la etikedo ``manylinux`` " +"uzeblan tra oftaj Linux-distribuoj." #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 "" +"La aktuala normo estas la estontece sekura normo :file:`manylinux_{x}_{y}`. " +"Ĝi difinas etikedojn de la formo :file:`manylinux_{x}_{y}_{arch}`, en kiu " +"``x`` kaj ``y`` estas la subtenataj maĵoraj kaj minoraj versioj de glibc " +"(ekzemple ``manylinux_2_24_xxx`` funkciu sur ajna distribuo uzanta glibc " +"2.24+), kaj ``arch`` estas la arĥitekturo, egalante la valoron de :py:func:" +"`sysconfig.get_platform()` sur la sistemo laŭ la ĉi-supra «simpla» formo." #: ../source/specifications/platform-compatibility-tags.rst:118 msgid "" @@ -18093,6 +21533,10 @@ msgid "" "that ``manylinux2010`` distributions are not expected to work on platforms " "that existed before 2010)." msgstr "" +"Ĝenerale, distribuo konstruita por pli malnova versio de la specifo estas " +"antaŭenkongrua (alivorte, distribuo ``manylinux1`` funkcias sur modernaj " +"sistemoj) sed ne retrokongrua (alivorte, distribuo ``manylinux2010`` ne " +"funkcias sur distribuo ekzistinta antaŭ 2010)." #: ../source/specifications/platform-compatibility-tags.rst:131 msgid "" @@ -18101,6 +21545,9 @@ msgid "" "for ``manylinux1`` and ``manylinux2010`` have reached end-of-life meaning " "that these images will no longer receive security updates." msgstr "" +"Mastrumanto de pako provu celi la plej kongruan specifon laŭeble, krom ke la " +"provizitaj konstruo-medioj por ``manylinux1`` kaj ``manylinux2010`` estas " +"eksvalidiĝintaj kaj ne plu ricevos ĝisdatigojn pri sekureco." #: ../source/specifications/platform-compatibility-tags.rst:136 msgid "" @@ -18178,9 +21625,13 @@ msgstr "``musllinux``" 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"Alpine Linux). The schema is :file:`musllinux_{x}_{y}_{arch}``, supporting " +"musl ``x.y`` and higher on the architecture ``arch``." msgstr "" +"La familio ``musllinux`` de etikedoj similas al ``manylinux``, sed temas pri " +"Linux-platformoj uzantan la C-bibliotekon musl_ anstataŭ glibc (unu ekzemplo " +"estas Alpine Linux). La skemo estas :file:`musllinux_x_y_arch`, subtenanta " +"musl ``x.y`` kaj pli novajn sur la arĥitekturo ``arch``." #: ../source/specifications/platform-compatibility-tags.rst:157 msgid "" @@ -18188,6 +21639,8 @@ msgid "" "library the Python interpreter is currently running on, and parsing the " "output:" msgstr "" +"Oni eltrovas la versian valoron de ``musl`` rulante la komunan C-bibliotekon " +"de ``musl`` uzatan de la Python-interpretilo kaj analizante la eligaĵon:" #: ../source/specifications/platform-compatibility-tags.rst:188 msgid "" @@ -18196,12 +21649,275 @@ msgid "" "command, or by parsing the ``PT_INTERP`` section’s value from the " "executable’s ELF_ header." msgstr "" +"Aktuale ekzistas du manieroj por trovi la lokon de la biblioteko musl sur " +"kiu Python-interpretilo ruliĝas: aŭ per la sistema komando ldd_, aŭ per " +"analizado de la valoro de la sekcio ``PT_INTERP`` en la ELF_-ĉapo de la " +"ruleblaĵo." + +#: ../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 "" +"macOS uzas la etikedo-familion ``macosx`` (la sufikso ``x`` estas pro la " +"oficiala nomskemo de Apple). La skemo de etikedoj pri kongrueco estas :file:" +"`macosx_{x}_{y}_{arch}`, indikante, ke la wheel kongruas kun macOS de versio " +"``x.y`` aŭ pli nova sur la arĥitekturo ``arch``." + +#: ../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 "" +"La valoroj de ``x`` kaj ``y`` respondas al la maĵora kaj minora versio-" +"numeroj de macOS respektive. Ili ambaŭ devas esti pozitivaj entjeroj, kaj " +"``x`` devas esti ne malpli granda ol ``10``. La versio-numero ĉiam " +"inkluzivas *kaj* maĵoran *kaj* minoran versiojn, eĉ se oficiala versio de " +"Apple nur uzas la maĵoran numeron. Ekzemple, ``macosx_11_0_arm64`` indikas " +"kongruecon kun macOS 11 aŭ pli nova." + +#: ../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 "" +"Duumaĵo por macOS povas subteni aŭ nur unu arĥitekturon aŭ plurajn " +"arĥitekturojn (per «grasa» duumaĵo). Por indiki subtenon de unu arĥitekturo, " +"la valoro de ``arch`` devas egali la valoron de :py:func:`platform." +"machine()` sur la sistemo. Por indiki subtenon de pluraj arĥitekturoj, la " +"etikedo ``arch`` estu identigilo el la jena listo de aroj de subtenataj " +"arĥitekturoj:" + +#: ../source/specifications/platform-compatibility-tags.rst:217 +msgid "``arch``" +msgstr "``arch``" + +#: ../source/specifications/platform-compatibility-tags.rst:217 +msgid "Architectures supported" +msgstr "Subtenataj arĥitekturoj" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +msgid "``universal2``" +msgstr "``universal2``" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +msgid "``arm64``, ``x86_64``" +msgstr "``arm64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``universal``" +msgstr "``universal``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" +msgstr "``i386``, ``ppc``, ``ppc64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``intel``" +msgstr "``intel``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``i386``, ``x86_64``" +msgstr "``i386``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``fat``" +msgstr "``fat``" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``i386``, ``ppc``" +msgstr "``i386``, ``ppc``" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +msgid "``fat3``" +msgstr "``fat3``" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +msgid "``i386``, ``ppc``, ``x86_64``" +msgstr "``i386``, ``ppc``, ``x86_64``" -#: ../source/specifications/platform-compatibility-tags.rst:194 +#: ../source/specifications/platform-compatibility-tags.rst:224 +msgid "``fat64``" +msgstr "``fat64``" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +msgid "``ppc64``, ``x86_64``" +msgstr "``ppc64``, ``x86_64``" + +#: ../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 "" +"La minimuma subtenata versio de macOS ankaŭ povas esti limigita de la " +"arĥitekturo. Ekzemple, macOS 11 (Big Sur) estis la unua versio subtenanta " +"arm64. Tiaj limigoj estas aŭtomate devigitaj de la macOS-tradukilaro dum " +"konstruado de duumaĵoj por pluraj arĥitekturoj." + +#: ../source/specifications/platform-compatibility-tags.rst:235 +msgid "Android" +msgstr "Android" + +#: ../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 "" +"Android uzas la skemon :file:`android_{apilevel}_{abi}`, indikantan " +"kongruecon kun la donita API-nivelo de Android aŭ pli nova nivelo, sur la " +"donita ABI. Ekzemple, ``android_27_arm64_v8a`` indikas subtenon por API-" +"nivelo 27 aŭ pli nova, sur aparato ``arm64_v8a``. Android ne distingas inter " +"reala aparato kaj imitilo." + +#: ../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 "" +"La API-nivelo estu pozitiva entjero. Tio *ne* egalas la version de Android " +"konata de la uzanto. Ekzemple, la eldono Android 12 (kodnome «Snow Cone») " +"uzas la API-nivelon 31 aŭ 32, depende de la specifa versio de Android. La " +"dokumentaro pri eldonoj de Android inkluzivas la `plenan liston de versioj " +"de Android kaj la respondantaj API-niveloj `__." + +#: ../source/specifications/platform-compatibility-tags.rst:250 +msgid "" +"There are 4 `supported ABIs `__. Normalized according to the rules above, they are:" +msgstr "" +"Ekzistas kvar `subtenataj ABI-oj `__. Jen la ABI-oj normigitaj laŭ la ĉi-supraj reguloj:" + +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" +msgstr "``armeabi_v7a``" + +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" +msgstr "``arm64_v8a``" + +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" +msgstr "``x86``" + +#: ../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 "" +"Preskaŭ ĉiuj realaj aparatoj uzas unu el la ARM-arĥitekturoj. ``x86`` kaj " +"``x86_64`` estas subtenataj por uzado en imitilo. ``x86`` ne plu estas " +"subtenata kiel evoluada platformo ekde 2020, kaj nova imitilo ne eldoniĝis " +"post 2020." + +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" +msgstr "iOS" + +#: ../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 "" +"iOS uzas la skemon :file:`ios_{x}_{y}_{arch}_{sdk}`, por kongrueco kun " +"versio ``x.y`` (aŭ pli nova) de iOS, sur la arĥitekturo ``arch``, uzante la " +"SDK ``sdk``." + +#: ../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 "" +"La valoroj de ``x`` kaj ``y`` respondas al la maĵora kaj minora versio-" +"numeroj de iOS respektive. Ili ambaŭ devas esti pozitivaj entjeroj. La " +"versio-numero ĉiam inkluzivas *kaj* maĵoran *kaj* minoran versiojn, eĉ se " +"oficiala versio de Apple nur uzas la maĵoran numeron. Ekzemple, " +"``ios_13_0_arm64_iphonesimulator`` indikas kongruecon kun iOS 13 aŭ pli nova." + +#: ../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 "" +"La valoro de ``arch`` devas egali la valoron de :py:func:`platform." +"machine()` sur la sistemo." + +#: ../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 "" +"La valoro de ``sdk`` devas esti aŭ ``iphoneos`` (por reala aparato), aŭ " +"``iphonesimulator`` (por imitilo de aparato). La SDK-oj havas la saman API-" +"surfacon sed ne kongruas inter si je la duumaĵa nivelo, eĉ se ili uzas la " +"saman ĉefprocesoran arĥitekturon. Kodo tradukita por arm64-imitilo ne " +"ruliĝas sur arm64-aparato." + +#: ../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 "" +"La kombinaĵo de :file:`{arch}_{sdk}` nomiĝas la «multarĥitekturo». Ekzistas " +"tri eblaj valoroj de la multarĥitekturo:" + +#: ../source/specifications/platform-compatibility-tags.rst:289 +msgid "" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" +msgstr "" +"``arm64_iphoneos``, por fizikaj aparatoj iPhone/iPad. Tiuj inkluzivas ĉiajn " +"iOS-aparatojn produktitajn post ~2015;" + +#: ../source/specifications/platform-compatibility-tags.rst:291 +msgid "" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" +msgstr "" +"``arm64_iphonesimulator``, por imitilo sur aparato Apple Silicon kun macOS; " +"kaj" + +#: ../source/specifications/platform-compatibility-tags.rst:293 +msgid "``x86_64_iphonesimulator``, for simulators running on x86_64 hardware." +msgstr "``x86_64_iphonesimulator``, por imitilo sur aparato x86_64." + +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "Uzado" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -18209,7 +21925,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -18220,14 +21936,16 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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 "" +"Alia dezirinda funkcio de instalilo eble estas igi «retraduki el fonto se " +"tio eblas» pli preferata ol la kongruaj sed malnovaj antaŭkonstruitaj opcioj." -#: ../source/specifications/platform-compatibility-tags.rst:214 +#: ../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 " @@ -18235,70 +21953,76 @@ msgid "" "least-preferred (a pure-Python distribution built with an older version of " "Python):" msgstr "" +"Jen ekzempla listo por instalilo sub CPython 3.3 sur sistemo linux_x86_64, " +"ordigita ekde la plej preferata (distribuo kun tradukita etendaĵa modulo por " +"la aktuala versio de Python) ĝis la malplej preferata (pure Python-a " +"distribuo konstruita per malnova versio de Python):" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "cp33-cp33m-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "cp33-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "cp3-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "cp33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "cp3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "py33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "py3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "cp33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "cp3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "py33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "py3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "py32-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "py31-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "py30-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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 "" +"Konstruita distribuo povas esti platformo-specifa pro kialo alia ol C-" +"etendaĵo, kiel uzo de indiĝena ruleblaĵo alvokita kiel subprocezo." -#: ../source/specifications/platform-compatibility-tags.rst:239 +#: ../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 " @@ -18308,12 +22032,19 @@ msgid "" "package with the C extension is installed in preference to the package " "without because that tag appears first in the list." msgstr "" +"Kelkfoje ekzistas pluraj subtenataj konstruitaj distribuoj por iu versio de " +"pako. Ekzemple, aŭtoro povus eldoni pakon kun etikedo ``cp33-abi3-" +"linux_x86_64`` enhavantan laŭvolan C-etendaĵon kaj la saman distribuon kun " +"etikedo ``py3-none-any`` sen C-etendaĵo. La indico de la etikedo en la listo " +"de subtenataj etikedoj decidas la instalotan pakon: la pako kun la C-" +"etendaĵo estas instalota prefere al la pako sen ĝi, ĉar tiu etikedo ĉeestas " +"unue en la listo." -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "Densigitaj Etikedaroj" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -18322,8 +22053,14 @@ msgid "" "distribute a bdist with the tag ``py2.py3-none-any``. The full list of " "simple tags is::" msgstr "" +"Por kompakta dosiernomo de duuma distribuo kongrua kun pluraj kongrueco-" +"etikedaj triopoj, ĉiu etikedo en dosiernomo povas esti anstataŭe «.»-" +"disigita ordigita aro da etikedoj. Ekzemple, pip, kiu estas pure Python-a " +"pako kongrua kun kaj Python 2 kaj 3 kun la sama fontkodo, povus distribui " +"duuman distrubon kun la etikedo ``py2.py3-none-any``. Jen la plena listo de " +"simplaj etikedoj::" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -18331,19 +22068,23 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "Kiuj etikedoj uziĝas implicite?" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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 "" +"Ilo apriore uzu la plej preferata arĥitekturo-dependa etikedo, ekz. ``cp33-" +"cp33m-win32``, aŭ la plej preferata pure Python-a etikedo, ekz. ``py33-none-" +"any``. Se la pakanto modifis la aprioron, tio signifas, ke inter-Python-a " +"kongrueco estas intencita." -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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?" @@ -18351,7 +22092,7 @@ msgstr "" "Kiun etikedon mi uzu, se mia distribuo uzas funkcion nur en la nova versio " "de Python?" -#: ../source/specifications/platform-compatibility-tags.rst:278 +#: ../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 " @@ -18369,36 +22110,42 @@ msgstr "" "kiel postulon por la malnova eldono ``beaglevote-1.1.0`` ne uzanta la novan " "funkcion, por akiri kongruan konstruon." -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../source/specifications/platform-compatibility-tags.rst:392 msgid "Why isn't there a ``.`` in the Python version number?" msgstr "Kial mankas ``.`` en la versia numero de Python?" -#: ../source/specifications/platform-compatibility-tags.rst:288 +#: ../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 "" +"CPython daŭris pli ol 20 jarojn sen tricifera maĵora eldono. Tio daŭros " +"longe. Alia realigo povas uzi ``_`` kiel apartigilon, ĉar kaj ``-`` kaj ``." +"`` apartigas la ĉirkaŭan dosiernomon." -#: ../source/specifications/platform-compatibility-tags.rst:296 +#: ../source/specifications/platform-compatibility-tags.rst:398 msgid "" "Why normalise hyphens and other non-alphanumeric characters to underscores?" msgstr "" "Kial normigi streketojn kaj aliajn ne literciferajn signojn al substrekoj?" -#: ../source/specifications/platform-compatibility-tags.rst:293 +#: ../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 "" +"Por averti konfliktojn kun la signoj ``.`` kaj ``-`` apartigantaj " +"komponantojn de la dosiernomo, kaj por kongrueco kun tiom da dosiersistemaj " +"limigoj kiom eblas (inkluzive de uzebleco en retadreso sen kodŝanĝado)." -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "Kial ne uzi iun specialan signon alian ol ``.`` aŭ ``-``?" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -18408,41 +22155,51 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "Kiu mastrumas la registron de mallongigitaj realigoj?" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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 "" +"Oni povas peti novan duliteran mallongigon ĉe la dissendolisto ``python-" +"dev``. Ordinare, mallongigoj estas rezervataj por la aktuale plej famaj " +"kvar realigoj." -#: ../source/specifications/platform-compatibility-tags.rst:315 +#: ../source/specifications/platform-compatibility-tags.rst:417 msgid "Does the compatibility tag go into METADATA or PKG-INFO?" msgstr "Ĉu la kongrueca etikedo troviĝas en METADATA aŭ PKG-INFO?" -#: ../source/specifications/platform-compatibility-tags.rst:313 +#: ../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 "" +"Ne. La etikedo pri kongrueco estas larto de la metadatenoj de la konstruita " +"distribuo. METADATA kaj PKG-INFO estu validaj por la tuta distribuo, ne nur " +"unu konstruo de tiu distribuo." -#: ../source/specifications/platform-compatibility-tags.rst:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "Kial vi ne menciis mian preferatan realigon de Python?" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 "" +"La mallongigitaj etikedoj faciligas kunhavigadon de tradukita Python-kodo ĉe " +"publika indekso. Via Python-realigo povas uzi ĉi tiun specifon ankaŭ, sed " +"kun pli longaj etikedoj. Rememoru, ke ĉiu «pure Python-a» konstruita " +"distribuo simple uzas ``py``." -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../source/specifications/platform-compatibility-tags.rst:431 msgid "" "Why is the ABI tag (the second tag) sometimes \"none\" in the reference " "implementation?" @@ -18450,7 +22207,7 @@ msgstr "" "Kial la ABI-etikedo (la dua etikedo) estas kelkfoje «none» en la referenca " "realigo?" -#: ../source/specifications/platform-compatibility-tags.rst:324 +#: ../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 " @@ -18458,8 +22215,12 @@ msgid "" "analogous to newer versions of Python, but in the meantime \"none\" is a " "good enough way to say \"don't know\"." msgstr "" +"Ĉar Python 2 ne faciligas akiri la SOABI (la koncepto nur ekekzistis en " +"novaj versioj de Python 3), la nuntempa referenca realigo divenas ``none``. " +"Ideale ĝi detektus ``py27(d|m|u)`` simile al novaj versioj de Python, sed " +"``none`` sufiĉas por indiki nekonatecon." -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../source/specifications/platform-compatibility-tags.rst:436 msgid "" "February 2013: The original version of this specification was approved " "through :pep:`425`." @@ -18467,21 +22228,21 @@ msgstr "" "Februaro 2013: La originala versio de ĉi tiu specifo estis aprobita per :pep:" "`425`." -#: ../source/specifications/platform-compatibility-tags.rst:336 +#: ../source/specifications/platform-compatibility-tags.rst:438 msgid "January 2016: The ``manylinux1`` tag was approved through :pep:`513`." msgstr "Januaro 2016: La etikedo ``manylinux1`` estis aprobita per :pep:`513`." -#: ../source/specifications/platform-compatibility-tags.rst:337 +#: ../source/specifications/platform-compatibility-tags.rst:439 msgid "April 2018: The ``manylinux2010`` tag was approved through :pep:`571`." msgstr "" "Aprilo 2018: La etikedo ``manylinux2010`` estis aprobita per :pep:`571`." -#: ../source/specifications/platform-compatibility-tags.rst:338 +#: ../source/specifications/platform-compatibility-tags.rst:440 msgid "July 2019: The ``manylinux2014`` tag was approved through :pep:`599`." msgstr "" "Julio 2019: La etikedo ``manylinux2014`` estis aprobita per :pep:`599`." -#: ../source/specifications/platform-compatibility-tags.rst:339 +#: ../source/specifications/platform-compatibility-tags.rst:441 msgid "" "November 2019: The ``manylinux_x_y`` perennial tag was approved through :pep:" "`600`." @@ -18489,11 +22250,19 @@ msgstr "" "Novembro 2019: La ĉiama etikedo ``manylinux_x_y`` estis aprobita per :pep:" "`600`." -#: ../source/specifications/platform-compatibility-tags.rst:341 +#: ../source/specifications/platform-compatibility-tags.rst:443 msgid "April 2021: The ``musllinux_x_y`` tag was approved through :pep:`656`." msgstr "" "Aprilo 2021: La etikedo ``musllinux_x_y`` estis aprobita per :pep:`656`." +#: ../source/specifications/platform-compatibility-tags.rst:444 +msgid "December 2023: The tags for iOS were approved through :pep:`730`." +msgstr "Decembro 2023: La etikedoj pri iOS estis aprobitaj per :pep:`730`." + +#: ../source/specifications/platform-compatibility-tags.rst:445 +msgid "March 2024: The tags for Android were approved through :pep:`738`." +msgstr "Marto 2024: La etikedoj pri Android estis aprobitaj per :pep:`738`." + #: ../source/specifications/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "La dosiero :file:`.pypirc`" @@ -18540,6 +22309,9 @@ msgid "" "consider an alternative like `keyring`_, setting environment variables, or " "providing the password on the command line." msgstr "" +"Atentu, ke tio konservas vian pasvorton en ordinara teksto. Por pli da " +"sekureco, konsideru alternativojn kiel `keyring`_, agordadon de " +"mediovariabloj, aŭ komandlinian disponigadon de la pasvorto." #: ../source/specifications/pypirc.rst:47 msgid "" @@ -18559,6 +22331,9 @@ msgid "" "use :file:`.pypirc`, but with different defaults. Please refer to each " "project's documentation for more details and usage instructions." msgstr "" +"Tiuj ekzemploj validas por :ref:`twine`. Aliaj projektoj (kiel :ref:`flit`) " +"ankaŭ uzas :file:`.pypirc`, sed kun aliaj implicitaĵoj. Bonvolu legi la " +"dokumentaron de la projekto por pliaj detaloj kaj helpoj pri uzado." #: ../source/specifications/pypirc.rst:65 msgid "" @@ -18606,6 +22381,9 @@ msgid "" "servers`` field to include the repository name. Here is a complete example " "of a :file:`$HOME/.pypirc` for PyPI, TestPyPI, and a private repository:" msgstr "" +"Por agordi plian deponejon, oni devas redifini la kampon ``index-servers`` " +"inkluzivante la nomon de la deponejo. Jen plena ekzemplo de :file:`$HOME/." +"pypirc` por PyPI, Prova PyPI, kaj privata deponejo:" #: ../source/specifications/pypirc.rst:131 msgid "" @@ -18713,6 +22491,9 @@ msgid "" "TOML file for illustrative purposes only, the following `JSON Schema " "`_ would match the data format:" msgstr "" +"Por provizi tipo-specifan prezento de la rezultaj datenoj el la TOML-dosiero " +"sole por klarigado, la jena `JSON-Skemo `_ kongruus " +"kun la datena formo:" #: ../source/specifications/pyproject-toml.rst:103 msgid "Declaring project metadata: the ``[project]`` table" @@ -18775,7 +22556,7 @@ msgid "``dependencies``" msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "``dynamic``" @@ -18787,22 +22568,23 @@ msgstr "``entry-points``" msgid "``gui-scripts``" msgstr "``gui-scripts``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "``maintainers``" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "``optional-dependencies``" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "Tipo de TOML_: signoĉeno" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" @@ -18810,11 +22592,11 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Name `" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "La nomo de la projekto." -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." @@ -18822,7 +22604,7 @@ msgstr "" "Ilo :ref:`NORMIGU ` ĉi tiun nomon tuj post legado por " "interna kohereco." -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" @@ -18830,7 +22612,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Version " "`" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." @@ -18838,11 +22620,11 @@ msgstr "" "La versio de la projekto laŭ :ref:`la specifo pri versispecifiloj `." -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "Uzantoj *PREFERU* specifi jam normigitajn versiojn." -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" @@ -18850,7 +22632,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Summary " "`" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." @@ -18858,11 +22640,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:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "Tipo de TOML_: signoĉeno aŭ tabelo" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type ` kaj :ref:`Description-Content-Type `" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 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:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -18900,7 +22682,7 @@ msgstr "" "``dynamic``. Por ĉia nerekonebla sufikso, kiam enhavtipo ne estas " "disponigita, ilo DEVAS sciigi pri eraro." -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -18909,7 +22691,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -18920,8 +22702,15 @@ msgid "" "content-type as supported by the :ref:`core metadata `. " "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" +"Tabelo specifita en la ŝlosilo ``readme`` ankaŭ havas ŝlosilon ``content-" +"type`` prenantan signoĉenon de la enhavtipo de la plena priskribo. Ilo DEVAS " +"sciigi pri eraro, se la metadatenoj ne specifas tiun ŝlosilon en la tabelo. " +"Se la metadatenoj ne specifas la parametron ``charset``, oni supozas, ke ĝi " +"estas UTF-8. Ilo POVAS subteni alternativajn enhavtipojn transformeblajn al " +"enhavtipo subtenata de la :ref:`kernaj metadatenoj `. Alikaze " +"ilo DEVAS sciigi pri eraro por nesubtenataj enhavtipoj." -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" @@ -18929,37 +22718,171 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Requires-" "Python `" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "La postuloj de la projekto pri versioj de Python." -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" -msgstr "Tipo de TOML_: tabelo" - -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:241 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -"Respondanta :ref:`kerna metadatena ` kampo: :ref:`License " -"`" +"Respondanta :ref:`kerna metadatena ` kampo: :ref:`License-" +"Expression `" -#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" +"Signoĉeno, kiu estas valida SPDX-licencesprimo laŭ :pep:`639`. Ilo KONTROLU " +"la validecon de la esprimo kaj NORMIGU la usklecon." + +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "La tabelaj subŝlosiloj de la ŝlosilo ``license`` estas evitindaj." + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" +msgstr "Tipo de TOML_: listo de signoĉenoj" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" +"Respondanta :ref:`kerna metadatena ` kampo: :ref:`License-" +"File `" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "La signoĉeno DEVAS enhavi validan patroneon laŭ la jena specifo:" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" +"Literoj, ciferoj, substrekoj (``_``), streketoj (``-``) kaj punktoj (``.``) " +"DEVAS prezenti sin laŭlitere." + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" +"Dosierloko-apartigilo DEVAS esti la suprenstreko (``/``). Patroneo estas " +"relativa al la dosierujo enhavanta :file:`pyproject.toml`. Tial, la komenca " +"suprenstreko DEVAS NE ekzisti." + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "Indikilo de patra dosierujo (``..``) DEVAS esti NE uzita." + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" +"Ajna skribsigno aŭ sinsekvo de skribsignoj ne diskutataj de ĉi tiu specif ne " +"validas. Projekto DEVAS NE uzi tian valoron. Ilo uzanta tiun kampon " +"MALAKCEPTU nevalidan valoron, sciigante pri eraro." + +#: ../source/specifications/pyproject-toml.rst:284 +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 "" +"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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" +"Eksplicita dosierloko (ekz. :file:`LICENSE`) estas valida patroneo, kio " +"signifas ke ĝi estas difinebla." + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "Konstruiloj:" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" +"DEVAS pritrakti ĉiun valoron kiel patroneon kaj DEVAS sciigi eraron, se la " +"patroneo enhavas nevalidan patronean sintakson." + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" +"DEVAS inkluzivi ĉiujn dosierojn kongruajn al enlistigita patroneo en ĉiuj " +"distribuaj arĥivoj." + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" +"DEVAS enlistigi ĉiun kongruan dosierlokon sub kampo ``License-File`` en la " +"Kernaj Metadatenoj." + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" +"DEVAS sciigi eraron, se iu uzanto-specifita patroneo ne kongruas kun " +"minimume unu dosiero." + +#: ../source/specifications/pyproject-toml.rst:301 +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 "" +"Se la ŝlosilo ``license-files`` ekzistas kaj ĝia valoro estas malplena " +"listo, do ilo DEVAS NE inkluzivi ajanan licencan dosieron kaj DEVAS NE " +"sciigi pri eraro. Se la ŝlosilon ``license-files`` ne estas difinita, ilo " +"povas decidi pri la traktado de licencaj dosieroj. Ekzemple, ĝi povas simple " +"ne inkluzivi ajanan dosieron, aŭ uzi sian propran logikon por trovi la " +"taŭgajn dosierojn en la distribuo." + +#: ../source/specifications/pyproject-toml.rst:312 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:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -18971,14 +22894,17 @@ msgstr "" "ref:`Maintainer `, kaj :ref:`Maintainer-email " "`" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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 "" +"Homoj aŭ organizaĵoj rigardataj kiel la «aŭtoroj» de la projekto. La preciza " +"signifo dependas de interpretad – ĝi povas listigi la originalajn aŭ ĉefajn " +"verkintojn, aktualajn mastrumantojn, aŭ posedantojn de la pako." -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." @@ -18986,7 +22912,7 @@ msgstr "" "La ŝlosilo ``maintainers`` similas al ``authors``: ĝia preciza signifo " "dependas de interpretado." -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -18994,14 +22920,20 @@ msgid "" "contain commas. The ``email`` value MUST be a valid email address. Both keys " "are optional, but at least one of the keys must be specified in the table." msgstr "" +"Tiuj ŝlosiloj akceptas liston de tabeloj kun du ŝlosiloj: ``name`` kaj " +"``email``. Ambaŭ valoroj estas tekstaj. La valoro de ``name`` DEVAS esti " +"valida retpoŝta nomo (tiu, kiu povas servi kiel nomo antaŭ retpoŝta adreso " +"en :rfc:`822`) kaj ne povas inkluzivi komon. La valoro de ``email`` DEVAS " +"esti valida retpoŝta adreso. Ambaŭ ŝlosiloj estas ellaseblaj, sed la tabelo " +"devas enhavi almenaŭ unu el la duo." -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 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:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." @@ -19009,7 +22941,7 @@ msgstr "" "Se nur ``name`` estas provizita, la valoro respondas al :ref:`Author ` aŭ :ref:`Maintainer ` depende." -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "Oni apartigu plurajn valorojn per komoj." -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "Tipo de TOML_: listo de signoĉenoj" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" @@ -19046,11 +22973,11 @@ msgstr "" "Respondas al la :ref:`kerna metadatena ` kampo: :ref:" "`Keywords `" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "La ŝlosilvortoj pri la projekto." -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" @@ -19058,15 +22985,27 @@ msgstr "" "Respondas al la :ref:`kerna metadatena ` kampo: :ref:" "`Classifier `" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "Klasigiloj Trove rilataj al la projekto." -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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 "" +"La uzado de klasigiloj ``License ::`` estas evitinda. Ilo POVAS averti " +"uzantojn pri tio. Konstruilo POVAS sciigi pri eraro, se kaj la signoĉena " +"valoro ``license`` (por la metadatena kampo ``License-Expression``) kaj " +"klasigilo ``License ::`` estas uzataj." + +#: ../source/specifications/pyproject-toml.rst:380 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:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" @@ -19074,18 +23013,21 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Project-URL " "`" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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 "" +"Tabelo de retadresoj, en kiu la ŝlosilo estas la retadresa etikedo kaj la " +"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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "Enirpunktoj" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" @@ -19093,11 +23035,11 @@ msgstr "" "Tipo de TOML_: tabelo (``[project.scripts]``, ``[project.gui-scripts]``, kaj " "``[project.entry-points]``)" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr ":ref:`Specifo pri enirpunktoj `" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -19105,7 +23047,7 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 msgid "" "The ``[project.gui-scripts]`` table corresponds to the ``gui_scripts`` group " "in the :ref:`entry points specification `. Its format is the " @@ -19115,7 +23057,7 @@ msgstr "" "en :ref:`la specifo pri enirpunktoj `. Ĝia formo estas sama " "kiel ``[project.scripts]``." -#: ../source/specifications/pyproject-toml.rst:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -19123,15 +23065,19 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 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 "" +"Konstrua malfasado DEVAS sciigi pri eraro, se la metadatenoj difinas " +"``[project.entry-points.console_scripts]`` aŭ ``[project.entry-points." +"gui_scripts]``, ĉar tiuj estus ambiguaj pro ``[project.scripts]`` kaj " +"``[project.gui-scripts]``, respektive." -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" @@ -19140,7 +23086,7 @@ msgstr "" "tabelo de valoroj de listoj de signoĉenoj laŭ :pep:`508` (``optional-" "dependencies``)" -#: ../source/specifications/pyproject-toml.rst:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra ` kaj :ref:`Provides-Extra `" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "La (nedevigaj) dependecoj de la projektoj." -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 "" +"Por ``dependencies``, ĝi estas ŝlosilo, kies valoro estas listo de " +"signoĉenoj. Ĉiu signoĉeno prezentas dependecon de la projekto kaj DEVAS esti " +"valida laŭ :pep:`508`. Ĉiu signoĉeno rekte respondas al ero :ref:`Requires-" +"Dist `." -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -19173,11 +23123,11 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "Tipo de TOML_: listo de signoĉenoj" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" @@ -19185,7 +23135,7 @@ msgstr "" "Respondanta :ref:`kerna metadatena ` kampo: :ref:`Dynamic " "`" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -19193,7 +23143,7 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." @@ -19201,7 +23151,7 @@ msgstr "" "Konstrua malfasado DEVAS observi statike specifitan metadatenon (de ŝlosilo " "ne en ``dynamic``)." -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." @@ -19209,7 +23159,7 @@ msgstr "" "Konstrua malfasado DEVAS sciigi pri eraro, se la metadatenoj specifas " "``name`` en ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -19218,14 +23168,17 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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 "" +"Se la specifo de :ref:`kernaj metadatenoj ` priskribas kampon " +"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:411 +#: ../source/specifications/pyproject-toml.rst:475 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." @@ -19233,7 +23186,7 @@ msgstr "" "Konstrua malfasado DEVAS sciigi pri eraro, se la metadatenoj specifas unu " "ŝlosilon kaj statike kaj en ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -19241,26 +23194,33 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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 "" +"Konstrua malfasado DEVAS sciigi eraron, se la metadatenoj specifas ŝlosilon " +"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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "Ĉiaj ilaj agordoj: la tabelo ``[tool]``" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 "" +"En subtabelo de la tabelo ``[tool]``, iu ajn ilo rilata al via Python-" +"projekto (ne nur konstruilo) povas havi agordojn. Ekzemple, la ilo `flit " +"`_ konservus siajn agordojn en ``[tool." +"flit]``." -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -19268,14 +23228,17 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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 "" +"Majo 2016: La unua specifo pri la dosiero ``pyproject.toml``, kun nur " +"``[build-system]`` enhavanta ŝlosilon ``requires`` kaj tabelon ``[tool]``, " +"estis aprobita per :pep:`518`." -#: ../source/specifications/pyproject-toml.rst:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." @@ -19283,6 +23246,15 @@ msgstr "" "Novembro 2020: La specifo de la tabelo ``[project]`` estis aprobita per :pep:" "`621`." +#: ../source/specifications/pyproject-toml.rst:517 +msgid "" +"December 2024: The ``license`` key was redefined, the ``license-files`` key " +"was added and ``License::`` classifiers were deprecated through :pep:`639`." +msgstr "" +"Decembro 2024: La ŝlosilo ``license`` estis redifinita, la ŝlosilo ``license-" +"files`` estis aldonita, kaj la klasigiloj ``License::`` estis evitindigitaj " +"per :pep:`639`." + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "Registri instalitajn projektojn" @@ -19294,6 +23266,9 @@ msgid "" "metadata format allows tools to query, manage or uninstall projects, " "regardless of how they were installed." msgstr "" +"Ĉi tiu dokumento specifas komunan dosierformon pri informoj pri Python-:term:" +"`projektoj ` instalitaj en medio. Komuna metadatena dosierformo " +"permesas serĉi, administri aŭ malinstali projektojn ĉiel instalitajn." #: ../source/specifications/recording-installed-packages.rst:14 msgid "" @@ -19310,6 +23285,9 @@ msgid "" "install a \"``.dist-info``\" directory located alongside importable modules " "and packages (commonly, the ``site-packages`` directory)." msgstr "" +"Ĉiu projekto instalita el distribuo devas, krom dosieroj, instali dosierujon " +"``.dist-info`` apud la importeblaj moduloj kaj pakoj (ofte en la dosierujo " +"``site-packages``)." #: ../source/specifications/recording-installed-packages.rst:29 msgid "" @@ -19322,6 +23300,14 @@ msgid "" "exactly one dash (``-``) character in its stem, separating the ``name`` and " "``version`` fields." msgstr "" +"Tiu dosierujo nomiĝas ``{name}-{version}.dist-info``, kun la kampoj ``name`` " +"kaj ``version`` same kiel :ref:`core-metadata`. Ambaŭ kampoj devas esti " +"normigitaj (vidu :ref:`la normon pri normigo de nomoj ` " +"kaj :ref:`la normon pri normigo de versioj `), kun streketoj (``-``) anstataŭigitaj per substreketoj " +"(``_``) , tiel ke la dosierujo ``.dist-info`` havas ekzakte unu streketon " +"(``-``) en ĝia nomo (krom la dosiersufikso), kiu apartigas la kampojn " +"``name`` kaj ``version``." #: ../source/specifications/recording-installed-packages.rst:37 msgid "" @@ -19345,6 +23331,13 @@ msgid "" "API for such tools to consume, so tools can have access to the unnormalized " "name when displaying distribution information." msgstr "" +"La nomo de dosierujo ``.dist-info`` estas aranĝita por malambigue prezenti " +"distribuon kiel dosiersisteman lokon. Ilo prezentanta nomon de distribuo al " +"uzanto evitu uzi la normigitan nomon kaj anstataŭe prezentu la specifitan " +"nomon (laŭbezone antaŭ solvado al instalita pako), aŭ legu la respektivajn " +"kampojn en Kernaj Metadatenoj, ĉar tieaj valoroj ne havas kodŝanĝojn kaj " +"precize reflektas la distribuon. Bibliotekoj provizu API pri la nenormigita " +"nomo por prezentado de informoj pri distribuo far tia ilo." #: ../source/specifications/recording-installed-packages.rst:56 msgid "" @@ -19386,27 +23379,47 @@ msgstr "" "preterlaseblaj laŭ la instalilo. Pliaj instalilo-specifaj dosieroj povas " "ĉeesti." -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"described in detail below:" +msgstr "" +"Tiu dosierujo :file:`.dist-info/` povas enhavi la jenan subdosierujon, " +"priskribitan ĉi-sube:" + +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr ":file:`licenses/`: enhavas licenco-dosierojn." + +#: ../source/specifications/recording-installed-packages.rst:76 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 "" +"La specifo :ref:`binary-distribution-format` priskribas tiujn kromajn " +"dosierojn, kiuj povas aperi en la dosierujo ``.dist-info`` de :term:`Wheel`. " +"Tiaj dosieroj povas esti kopiitaj al la dosierujo ``.dist-info`` de " +"instalita projekto." -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 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 "" +"La antaŭaj versioj de ĉi tiu normo ankaŭ specifis la dosieron ``REQUESTED``. " +"Tiu dosiero estas nun rigardata kiel ilo-specifa etendaĵo, sed povas esti " +"normigita denove estontece. Vidu `PEP 376 `_ por ĝia originala signifo." -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "La dosiero METADATA" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 msgid "" "The ``METADATA`` file contains metadata as described in the :ref:`core-" "metadata` specification, version 1.1 or greater." @@ -19414,18 +23427,21 @@ msgstr "" "La dosiero ``METADATA`` enhavas metadatenojn laŭ la specifo :ref:`core-" "metadata`, versio 1.1 aŭ pli nova." -#: ../source/specifications/recording-installed-packages.rst:88 +#: ../source/specifications/recording-installed-packages.rst:93 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 "" +"La dosiero ``METADATA`` estas deviga. Se ĝi ne estas kreebla aŭ se " +"postulataj kernaj metadatenoj mankas, instalilo devas sciigi pri eraro kaj " +"malsukcesigi la instaladon de la projekto." -#: ../source/specifications/recording-installed-packages.rst:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "La dosiero RECORD" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 msgid "" "The ``RECORD`` file holds the list of installed files. It is a CSV file " "containing one record (line) per installed file." @@ -19433,7 +23449,7 @@ msgstr "" "La dosiero ``RECORD`` tenas la liston de instalitaj dosieroj. Ĝi estas " "diskoma dosiero enhavanta po unu rikordo (linio) por ĉiu instalita dosiero." -#: ../source/specifications/recording-installed-packages.rst:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" @@ -19441,19 +23457,19 @@ msgstr "" "La dialekto de diskoma dosiero devas esti legebla per la apriora ``reader`` " "de la modulo ``csv`` de Python:" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "Disigilo de kampoj: ``,`` (komo)," -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "Citilo: ``\"`` (neŭtra duobla citilo)," -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "linifino: aŭ ``\\r\\n`` aŭ ``\\n``." -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 msgid "" "Each record is composed of three elements: the file's **path**, the **hash** " "of the contents, and its **size**." @@ -19461,15 +23477,19 @@ msgstr "" "Ĉiu rikordo konsistas el tri elemento: la dosierloko (**path**), la haketaĵo " "(**hash**) de la enhavo, kaj la grando (**size**)." -#: ../source/specifications/recording-installed-packages.rst:109 +#: ../source/specifications/recording-installed-packages.rst:114 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 "" +"La *path* povas esti aŭ malrelativa aŭ relativa al la dosierujo enhavanta la " +"dosierujon ``.dist-info`` (ordinare, la dosierujo ``site-packages``). Je " +"Windows, oni povas disigi dosierlokajn komponantojn per aŭ suprenstreko (``/" +"``) aŭ malsuprenstreko (``\\``)." -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -19478,7 +23498,7 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 msgid "" "The *size* is either the empty string, or file's size in bytes, as a base 10 " "integer." @@ -19486,7 +23506,7 @@ msgstr "" "La *size* estas aŭ la malplena signoĉeno aŭ la grando de la dosiero en " "bajtoj kiel dekuma entjero." -#: ../source/specifications/recording-installed-packages.rst:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -19495,7 +23515,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -19504,26 +23524,33 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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 "" +"Por plene malinstali pakon, ilo devas forviŝi ĉiujn dosierojn en ``RECORD``, " +"ĉiujn dosierojn ``.pyc`` (de ajna optimumiga nivelo) respondantajn al " +"forviŝotaj ``.py``-dosieroj, kaj ajnaj dosierujoj malplenigotaj de la " +"malinstalo." -#: ../source/specifications/recording-installed-packages.rst:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "Jen ekzemplo de ebla dosiero ``RECORD``::" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 "" +"Se la dosiero ``RECORD`` mankas, ilo dependanta de ``.dist-info`` devas ne " +"provi malinstali aŭ ĝisdatigi la pakon. (Tiu devo ne temas pri ilo uzanta " +"aliajn informojn kiel sistema pakadministrilo de Linux-distribuo.)" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -19532,70 +23559,102 @@ msgid "" "``RECORD`` must be updated, otherwise uninstalling the package will leave " "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" +"Ni *rekomendegas*, ke instalita pako ne modifu sin (ekz. per enkaŝmemorigo " +"de dosieroj sub sia nomspaco en ``site-packages``). Nur fakaj instaliloj " +"kiel pip modifu ``site-changes``. Se pako tamen tiel sin modifas, do ĝi " +"devas ĝisdatigu ``RECORD``; se tio ne okazus, malinstalado de pako lasus " +"eksterlistajn dosierojn (eble kreante fantoman nomspacan pakon)." -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "La dosiero INSTALLER" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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 "" +"Se dosiero ``INSTALLER`` ekzistas, ĝi estas unulinia teksta dosiero nomanta " +"la ilon uzitan por instali la projekton. Se la instalilo estas rulebla ĉe la " +"komandlinio, ``INSTALLER`` enhavu la nomon de la komando. Se ne, ĝi enhavu " +"preseblan Askian signoĉenon." -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "La dosiero povas finiĝi per nul aŭ pli da Askiaj blankspacaj signoj." -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "Jen ekzemploj de du eblaj dosieroj ``INSTALLER``::" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 "" +"Tiu valoro estu uzata nur por informaj celoj. Ekzemple, se oni provus " +"malinstali projekton per iu ilo, sed la ilo ne trovus dosieron ``RECORD``, " +"ĝi povus sugesti, ke oni uzu la ilon nomitan en ``INSTALLER`` por malinstali." -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "La dosiero entry_points.txt" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 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 "" +"Ĉi tiun dosieron instalilo POVAS krei por indiki, ke pako enhavas " +"komponantojn malkovreblajn kaj uzeblajn de alia kodo, inkluzive de konzolaj " +"programetoj kaj aliaj programoj rulebligitaj de la instalilo." -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "Ĝia detala specifo troviĝas ĉe :ref:`entry-points`." -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "La dosiero direct_url.json" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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 "" +"Tiu dosiero DEVAS esti kreita de instalilo dum instalado de distribuo pro " +"postulo specifitanta rektan retadresan referencon (inkluzive de " +"versikontrolsistema retadreso)." -#: ../source/specifications/recording-installed-packages.rst:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "La detala specifo troviĝas ĉe :ref:`direct-url`." -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "La dosierujo :file:`licenses/`" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "Intence malhelpi ŝanĝi instalitajn pakojn" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -19604,11 +23663,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "Por tio, rilataj iloj faru la jenon:" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -19616,14 +23675,17 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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 "" +"Kreu dosieron ``INSTALLER`` sciiganta pri la nomo de la ilo por mastrumi la " +"pakon (tio permesas al ilo scianta pri ``RECORD`` provizi bonajn erarojn pri " +"modifado de rilataj pakoj)" -#: ../source/specifications/recording-installed-packages.rst:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -19632,14 +23694,16 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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 "" +"Kelkfoje, oni bezonas malhelpi eĉ instaladon de pliaj pakoj per Python-" +"specifaj iloj. Tiukaze vidu :ref:`externally-managed-environments`" -#: ../source/specifications/recording-installed-packages.rst:254 +#: ../source/specifications/recording-installed-packages.rst:270 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 " @@ -19648,7 +23712,7 @@ msgstr "" "Junio 2009: La originala versio de ĉi tiu specifo estis aprobita per :pep:" "`376`. Tiam, ĝi nomiĝis la *Datenbanko de Instalitaj Python-Distribuoj*." -#: ../source/specifications/recording-installed-packages.rst:257 +#: ../source/specifications/recording-installed-packages.rst:273 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` " @@ -19658,7 +23722,7 @@ msgstr "" "pep:`610`. Ĉi tiu paĝo nur mencias ĝin; vidu :ref:`direct-url` por la plena " "difino." -#: ../source/specifications/recording-installed-packages.rst:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -19687,41 +23751,66 @@ msgstr "Simpla deponeja API" #: ../source/specifications/simple-repository-api.rst:8 msgid "" +"The keywords \"**MUST**\", \"**MUST NOT**\", \"**REQUIRED**\", " +"\"**SHALL**\", \"**SHALL NOT**\", \"**SHOULD**\", \"**SHOULD NOT**\", " +"\"**RECOMMENDED**\", \"**MAY**\", and \"**OPTIONAL**\"\" in this document " +"are to be interpreted as described in :rfc:`2119`." +msgstr "" +"La ŝlosilvortoj **«DEVAS» (MUST, SHALL)**, **«DEVAS NE» (MUST NOT, SHALL " +"NOT)**, **«POSTULATA» (REQUIRED)**, **«-U» (SHOULD)**, **«NE -U» (SHOULD " +"NOT)**, **«REKOMENDATA» (RECOMMENDED)**, **«POVAS» (MAY)** kaj " +"**«NEDEVIGA» (OPTIONAL)**\" en ĉi tiu dokumento estas interpretataj laŭ :rfc:" +"`2119`." + +#: ../source/specifications/simple-repository-api.rst:13 +msgid "" "The interface for querying available package versions and retrieving " "packages from an index server comes in two forms: HTML and JSON." msgstr "" "La interfaco por peti informojn pri haveblaj versioj de pakoj kaj akiri " "pakojn el indeksa servilo havas du formojn: HTML kaj JSON." -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "Baza HTML API" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 "" +"Deponejo realiganta la simplan API estas difinita de sia baza retadreso. Tiu " +"estas la supranivela URL, sub kiuj ĉiaj aliaj retadresoj ĉeestas. La API " +"nomiĝas «simpla», ĉar la baza retadreso de PyPI estas ``https://pypi.org/" +"simple/``." -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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 "" +"Ĉiuj sekvaj retadresoj en ĉi tiu dokumento estos relativaj al tiu baza " +"retadreso. (Ekzemple, pri retadreso de PyPI, ``/foo/`` respondos al " +"``https://pypi.org/simple/foo/``." -#: ../source/specifications/simple-repository-api.rst:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" +"En deponejo, la radika retadreso (``/`` por ĉi tiu specifo, reprezentanta la " +"bazan retadreson) **DEVAS** esti valida HTML5-paĝo kun ankraj elementoj po " +"unu por ĉiu projekto en la deponejo. La teksto de la ankra elemento " +"**DEVAS** esti la nomo de la projekto, kaj la atributo ``href`` **DEVAS** " +"ligi al la retadreso de tiu projekto. Ekzemple:" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -19749,32 +23838,34 @@ msgstr "" "nomo de la haketfunkcio (kiel ``sha256``) kaj ```` estas la " "deksesume kodita haketaĵo." -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "Aldone al ĉi-supro, ekzistas la jenaj limigoj pri la API:" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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 "" +"Ĉiu URL respondanta per HTML-paĝo **DEVAS** finiĝi per ``/``. La deponejo " +"**REDIREKTU** URL sen ``/`` al URL kun sufiksa ``/``." -#: ../source/specifications/simple-repository-api.rst:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "URL povas esti aŭ absoluta aŭ relativa, se ĝi montras la ĝustan lokon." -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" "Ekzistas nenia limigo pri kie la dosieroj ĉeestu relative al la deponejo." -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 msgid "" "There may be any other HTML elements on the API pages as long as the " "required anchor elements exist." @@ -19782,22 +23873,29 @@ msgstr "" "Povas ekzisti aliaj HTML-elementoj sur la API-paĝo, se la postulataj ankraj " "elementoj ekzistas." -#: ../source/specifications/simple-repository-api.rst:68 +#: ../source/specifications/simple-repository-api.rst:75 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 "" +"Deponejo **POVAS** redirekti nenormigitan retadreson al la kanona normigita " +"retadreso (ekz. de ``/Foobar/`` al ``/foobar/``). Tamen, kliento **DEVAS " +"NE** dependi de tia redirektado kaj **DEVAS** peti la normigitan retadreson." -#: ../source/specifications/simple-repository-api.rst:73 +#: ../source/specifications/simple-repository-api.rst:80 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 "" +"Deponejo **ELEKTU** haketfunkcion el unu el tiuj garantie disponeblaj ĉe la " +"modulo :py:mod:`hashlib` en la norma biblioteko de Python (aktuale ``md5``, " +"``sha1``, ``sha224``, ``sha256``, ``sha384``, ``sha512``). La nuna rekomendo " +"estas uzi ``sha256``." -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -19806,24 +23904,73 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" +"Deponejo **POVAS** inkluzivi atributon ``data-core-metadata`` sur dosiero-" +"hiperligo." + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" +"Deponejo **POVAS** inkluzivi atributon ``data-dist-info-metadata`` sur " +"dosiero-hiperligo." + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" +"Indekso-kliento **POVAS** uzi tiun ŝlosilon, se ĝi ekzistas, kiel evitindan " +"sinonimon de ``data-core-metadata``." + +#: ../source/specifications/simple-repository-api.rst:108 +msgid "" +"``data-dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``data-core-metadata`` with :pep:`714`." +msgstr "" +"``data-dist-info-metadata`` estis normigita per :pep:`658`, kaj ĝia nomo " +"ŝanĝiĝis al ``data-core-metadata`` per :pep:`714`." + +#: ../source/specifications/simple-repository-api.rst:111 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 "" +"Deponejo **POVAS** inkluzivi atributon `data-gpg-sig`` sur dosiera hiperligo " +"kun valoro de aŭ ``true`` aŭ ``false`` por indiki, ĉu ekzistas GPG-" +"subskribo. Deponejo faranta tion **INKLUZIVU** ĝin sur ĉiu hiperligo." -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" +"Deponejo **POVAS** inkluzivi atributon ``data-requires-python`` sur dosiera " +"hiperligo. Tiu respondas al la metadatena kampo :ref:`core-metadata-requires-" +"python` por la eldono. Se tiu ekzistas, instalilo **IGNORU** la elŝuton por " +"instalado al Python-versio ne plenumanta la postulon. Ekzemple:" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." @@ -19831,7 +23978,7 @@ msgstr "" "En la atributa valoro, < kaj > devas esti HTML-kodita kiel ``<`` and " "``>`` respektive." -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -19839,8 +23986,18 @@ msgid "" "represent a `secure origin `_." msgstr "" +"Deponejo **POVAS** inkluzivi atributon ``data-provenance`` sur dosiera " +"hiperligo. La valoro de tiu atributo **DEVAS** esti plene kvalifikita URL, " +"asertante ke la originpruvo de la dosiero ĉeestas ĉe tiu URL. La URL " +"**DEVAS** prezenti `sekuran originon `_." + +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" +"La atributo ``data-provenance`` estis aldonita por versio 1.3 de la API." -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." @@ -19848,11 +24005,11 @@ msgstr "" "La formo de la ligita originpruvo estas difinita en :ref:`index-hosted-" "attestations`." -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "Normigitaj Nomoj" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -19861,12 +24018,18 @@ msgid "" "``.``, ``-``, or ``_`` replaced with a single ``-`` character. This can be " "implemented in Python with the ``re`` module::" msgstr "" +"Ĉi tiu specifo referencas la koncepton de «normigita» projekta nomo. Laŭ :" +"ref:`la specifo pri normigo de nomoj `, la validaj " +"skrisbignoj en nomo estas Askiaj literoj, Asikaj ciferoj, ``.``, ``-``, kaj " +"``_``. La nomo estu minuskligita, kun sinsekvoj de ``.``, ``-``, aŭ ``_`` " +"anstataŭigitaj per unu skribsigno ``-``. Oni povas fari tion en Python per " +"la modulo ``re``::" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "Aldoni Subtenon «Fortiri» al la Simpla API" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -19875,16 +24038,24 @@ msgid "" "\"Yanked\", and should not generally be selected by an installer, except " "under specific scenarios." msgstr "" +"Hiperligo en la simpla deponejo **POVAS** havi atributon ``data-yanked``, " +"kies valoro povas esti malplena aŭ esti ajna signoĉeno. La ĉeesto de " +"atributo ``data-yanked`` **ESTU** interpretata kiel indiko, ke la dosiero " +"montrata de la hiperligo estas fortirita kaj ĝenerale ne elektata de " +"instalilo krom specifaj kondiĉoj." -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 "" +"La valoro de la atributo ``data-yanked``, se ĝi ekzistas, estas arbitra " +"teksto pri la kialo de la fortiro. Ilo uzanta la simplan deponejan API " +"**POVAS** montri tiun tekston al uzanto." -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -19892,11 +24063,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "Instaliloj" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -19905,8 +24076,13 @@ msgid "" "original order to install the now yanked file, then it acts as if it had not " "been yanked." msgstr "" +"La dezirinda sperto por uzanto estas, ke post fortiro de dosiero, kiam homo " +"rekte provas instali fortiritan dosieron, tio malsukcesas kvazaŭ la dosiero " +"estus forviŝita. Tamen, kiam homo faris tion antaŭtempe, kaj nun komputilo " +"meĥanike sekvas la originalan ordon instalante la nun fortiritan dosieron, " +"do tio funkcios kvazaŭ la dosiero ne estus fortirita." -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -19915,15 +24091,22 @@ msgid "" "intention above, and that prevents \"new\" dependencies on yanked releases/" "files." msgstr "" +"Instalilo **DEVAS** ignori fortiritan eldonon, se iu nefortirita eldono " +"plenumas la limigojn de elektado. Instalilo **POVAS** rifuzi uzi fortiritan " +"eldonon, eĉ se tio signifas, ke la limigoj ne estas plenumeblaj. Realigo " +"**ELEKTU** regulojn observantajn la ĉi-supran intencon malhelpantan «novan» " +"dependecon al foritira eldono aŭ dosiero." -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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 "" +"La instalilo determinu sian precizan konduton laŭ sia fasonado. Tamen, jen " +"du sugestataj manieroj:" -#: ../source/specifications/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -19933,7 +24116,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -19941,7 +24124,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -19950,24 +24133,26 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "Speguloj" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" "Spegulo povas ĝenerale pritrakti fortiritajn dosierojn laŭ unu el la jenaj " "du manieroj:" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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 "" +"Ĝi povas simple plene ignori ilin en la simpla deponeja API, provizante " +"vidon de la deponejo nur de «aktivaj», nefortiritaj dosieroj." -#: ../source/specifications/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." @@ -19975,52 +24160,56 @@ msgstr "" "Ĝi povas inkluzivi fortiritajn dosierojn kaj ankaŭ speguli la atributon " "``data-yanked``." -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" "Speguloj **DEVAS NE** speguli fortiritan dosieron sen spegulado de la " -"atributo ``data-yanked'' pri ĝi." +"atributo ``data-yanked`` pri ĝi." -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "Versiado de la Simpla API de PyPI" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" -msgstr "Tio aspektus jene::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" +msgstr "Tio aspektus jene:" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "Dum interpretado de la deponeja versio:" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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 "" +"Alkremento de la maĵora versio signifas neretrokongruan ŝanĝon tian, ke " +"ekzistanta kliento supozeble ne plu povas signife uzi la API." -#: ../source/specifications/simple-repository-api.rst:223 +#: ../source/specifications/simple-repository-api.rst:258 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 "" +"Alkremento de la minora versio signifas retrokongruan ŝanĝon tian, ke " +"ekzistantaj klientoj verŝajne povas daŭre signife uzi la API." -#: ../source/specifications/simple-repository-api.rst:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -20029,7 +24218,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -20039,26 +24228,64 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "Versio-historio de la API" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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 "" +"Tiu sekcio enhavas nur mallongan historion de ŝanĝoj laŭ la versia numero de " +"la API. Por plena historio de ŝanĝoj inkluzive de ŝanĝoj faritaj antaŭ " +"ekstarigo de versioj de la API, vidu :ref:`la Historion `." -#: ../source/specifications/simple-repository-api.rst:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" +"Versio 1.0 de la API: la unua versio de la API, deklarita per :pep:`629`." + +#: ../source/specifications/simple-repository-api.rst:283 +msgid "" +"API version 1.1: Added ``versions``, ``files[].size``, and ``files[].upload-" +"time`` metadata to the JSON serialization, declared with :pep:`700`." +msgstr "" +"Versio 1.1. de la API: Aldonis la metadatenojn ``versions``, ``files[]." +"size``, kaj ``files[].upload-time`` al la JSON-seriigo, deklaritajn per :pep:" +"`700`." + +#: ../source/specifications/simple-repository-api.rst:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" +"Versio 1.2 de la API: aldonis deponejajn metadatenojn pri «spurado», " +"deklaritajn per :pep:`708`." + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" +"Versio 1.3 de la API: aldonis metadatenojn pri originpruvo, deklaritajn per :" +"pep:`740`." + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "Klientoj" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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 "" +"Kliento interaganta kun la simpla API **INSPEKTU** ĉiun respondon pri la " +"deponeja versio. Se tiu dateno mankas, la kliento **DEVAS** supozi, ke ĝi " +"estas versio 1.0." -#: ../source/specifications/simple-repository-api.rst:252 +#: ../source/specifications/simple-repository-api.rst:295 msgid "" "When encountering a major version greater than expected, clients **MUST** " "hard fail with an appropriate error message for the user." @@ -20066,7 +24293,7 @@ msgstr "" "Renkontinte maĵoran version pli grandan ol la atenditan, kliento **DEVAS** " "malsukcesi kun taŭga erarmesaĝo por la uzanto." -#: ../source/specifications/simple-repository-api.rst:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." @@ -20074,7 +24301,7 @@ msgstr "" "Renkontinte minoran version pli grandan ol la atenditan, kliento **AVERTU** " "la uzanton kun taŭga mesaĝo." -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 msgid "" "Clients **MAY** still continue to use feature detection in order to " "determine what features a repository uses." @@ -20082,11 +24309,11 @@ msgstr "" "Kliento **POVAS** daŭre uzi detektadon de funkcioj por determini la " "funkciojn uzatajn de iu deponejo." -#: ../source/specifications/simple-repository-api.rst:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "Servi Distribuajn Metadatenojn per la Simpla Deponeja API" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -20095,7 +24322,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -20106,8 +24333,15 @@ msgid "" "`the base HTML API specification ` specifies the " "GPG signature file's location." msgstr "" +"Se ekzistas atributo ``data-dist-info-metadata``, la deponejo **DEVAS** " +"provizi la Kernan Metadatenan dosieron de la distribuo apud la distribuo, " +"kun la sufikso ``.metadata`` post la dosiernomo de la distribuo. Ekzemple, " +"la Kernaj Metadatenoj de distribuo ĉe ``/dosieroj/distribuo-1.0-py3.none.any." +"whl`` troviĝus ĉe ``/dosieroj/distribuo-1.0-py3.none.any.whl.metadata``. Tio " +"similas al la loko de la GPG-subskribo en la :ref:`baza specifo de HTML API " +"`." -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -20117,18 +24351,21 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "Retrokongrueco" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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 "" +"Se je ankra etikedo mankas la atributo ``data-dist-info-metadata``, ilo uzu " +"la aktualan konduton, elŝutante la distribuon kaj inspektante la " +"metadatenojn." -#: ../source/specifications/simple-repository-api.rst:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -20136,19 +24373,23 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "JSON-baza Simpla API por Python-Pakindeksoj" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 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 "" +"Por ebligi analizi la sintakson de la respondo nur per la norma biblioteko, " +"ĉi tiu normo specifas, ke ĉiaj respondoj (krom la dosieroj mem kaj la HTML-" +"respondoj el :ref:`la baza normo pri HTML API ` " +"estu seriigitaj laŭ `JSON `_." -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -20158,7 +24399,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -20168,7 +24409,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -20176,28 +24417,37 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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 "" +"Simile, la minora versio **DEVAS** alkrementiĝi, se funkcioj estas aldonitaj " +"al aŭ malaldonitaj el la formo, sed ekzistanta kliento supozeble daŭre " +"komprenos la formon." -#: ../source/specifications/simple-repository-api.rst:338 +#: ../source/specifications/simple-repository-api.rst:381 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 "" +"Ŝanĝoj, kiuj ne igus ekzistantajn klientojn ne plu kompreni la formon, kaj " +"kiuj ne aldonas aŭ forigas funkciojn, povas okazi sen ŝanĝado de la versia " +"numero." -#: ../source/specifications/simple-repository-api.rst:342 +#: ../source/specifications/simple-repository-api.rst:385 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 "" +"Tio estas intencite malklara, ĉar la aŭtoroj de ĉi tiu normo kredas, la " +"aŭtoroj de verkotaj normoj ŝanĝantaj la API-on konsideru kaj decidu, ĉu " +"alkrementi la maĵoran aŭ minoran version." -#: ../source/specifications/simple-repository-api.rst:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -20206,25 +24456,31 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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 "" +"Ĉi tiu normo intencas, ke oni rigardu la API kiel URL-funpunktojn " +"liverantajn datenojn, kies interpreton difinas la versio de tiuj datenoj, " +"seriigitajn laŭ la cela seriigita dosierformo." -#: ../source/specifications/simple-repository-api.rst:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "JSON-igo" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 msgid "" "The URL structure from :ref:`the base HTML API specification ` still applies, as this spec only adds an additional " "serialization format for the already existing API." msgstr "" +"La retadresa strukturo de la :ref:`specifo de la baza HTML API ` ankoraŭ validas, ĉar ĉi tiu specifo nur provizas plian " +"seriigan formon de jam ekzistanta API." -#: ../source/specifications/simple-repository-api.rst:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" @@ -20232,13 +24488,13 @@ msgstr "" "La sekvaj limigoj validas por ĉiuj JSON-seriigitaj respondoj priskribitaj en " "ĉi tiu specifo:" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "Ĉiu JSON-respondo *ĉiam* estos JSON-objekto, ne tabelo aŭ alia tipo." -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -20246,7 +24502,7 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 msgid "" "Additional keys may be added to any dictionary objects in the API responses " "and clients **MUST** ignore keys that they don't understand." @@ -20254,13 +24510,15 @@ msgstr "" "Ekstraj ŝlosiloj povas esti aldonitaj al iuj ajn vortaraj objektoj en la API-" "respondoj. Kliento **DEVAS** ignori ŝlosilojn ne kompreneblajn." -#: ../source/specifications/simple-repository-api.rst:380 +#: ../source/specifications/simple-repository-api.rst:423 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 "" +"Ĉiu JSON-respondo havas ŝlosilon ``meta`` enhavantan informojn pri la " +"respondo mem, ne pri la enhavo de la respondo." -#: ../source/specifications/simple-repository-api.rst:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" +"Ĉiu JSON-respondo havos ŝlosilon ``meta.api-version``, kiu estas teksto " +"enhavanta la versian numeron ``Maĵora.Minora`` de la :ref:`API-versia " +"specifo `, kun la sama semantiko pri " +"malsukceso/avertado kiel en :ref:`la API-versia specifo `." -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." @@ -20277,11 +24540,20 @@ msgstr "" "Ĉiuj postuloj de :ref:`la baza HTML-API-specifo ` ne specifaj al HTML estas ankoraŭ observendaj." -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +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 "" +"Ŝlosiloj (en ajna nivelo) komenciĝanta per substreko estas rezervitaj por " +"privata uzado de indeksa servilo. Neniu estonta normo asignos signifon al " +"tia ŝlosilo." + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "Listo de Projektoj" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 msgid "" "The root URL ``/`` for this spec (which represents the base URL) will be a " "JSON encoded dictionary which has a two keys:" @@ -20289,7 +24561,7 @@ msgstr "" "La projekta radika retadreso ``/`` por ĉi tiu specifo (kiu prezentas la " "bazan retadreson) estas JSON-kodita vortaro kun du ŝlosiloj:" -#: ../source/specifications/simple-repository-api.rst:399 +#: ../source/specifications/simple-repository-api.rst:444 msgid "" "``projects``: An array where each entry is a dictionary with a single key, " "``name``, which represents string of the project name." @@ -20297,8 +24569,8 @@ msgstr "" "``projects``: Listo, kies ĉiu ero estas vortaro kun ununura ŝlosilo, " "``nomo``, kies valoro estas signoĉeno de la projekta nomo." -#: ../source/specifications/simple-repository-api.rst:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." @@ -20306,12 +24578,12 @@ msgstr "" "``meta``: La ĝeneralaj respondaj metadatenoj laŭ `la priskribo ĉi-supra " "`__." -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "Ekzemple:" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -20321,7 +24593,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` 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 "" +"La formo de ĉi tiu retadreso estas ``//``, en kiu ```` " +"estas anstataŭigita per la normigita nomo de la projekto laŭ :ref:`la " +"specifo de baza HTML API `. Do projekto nomita " +"«Ridinda_Piediro» havus la retadreson ``/ridinda-piediro/``." -#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:490 msgid "" -"This URL must respond with a JSON encoded dictionary that has three keys:" +"This URL must respond with a JSON encoded dictionary that has four keys:" msgstr "" -"Tiu URL devas respondi per JSON-kodita vortaro enhavanta tri ŝlosilojn:" +"Tiu URL devas respondi per JSON-kodita vortaro enhavanta kvar ŝlosilojn:" -#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:492 msgid "``name``: The normalized name of the project." msgstr "``name``: La normigita nomo de la projekto." -#: ../source/specifications/simple-repository-api.rst:448 +#: ../source/specifications/simple-repository-api.rst:493 msgid "" "``files``: A list of dictionaries, each one representing an individual file." msgstr "``files``: Listo de vortaroj, po unu por individua dosiero." -#: ../source/specifications/simple-repository-api.rst:451 +#: ../source/specifications/simple-repository-api.rst:495 +msgid "" +"``versions``: A list of version strings specifying all of the project " +"versions uploaded for this project. The value of ``versions`` is logically a " +"set, and as such may not contain duplicates, and the order of the versions " +"is not significant." +msgstr "" +"``versions``: Listo de versio-signoĉenoj specifantaj ĉiujn projektajn " +"versiojn alŝutitajn de la projekto. La valoro de ``versions`` estas logika " +"aro; tial, ĝi ne povas enhavi duoblaĵon, kaj la ordo de la versioj ne gravas." + +#: ../source/specifications/simple-repository-api.rst:502 +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 "" +"Ĉiu dosiero en la ŝlosilo ``files`` DEVAS esti asociita kun unu el la " +"versioj en la ŝlosilo ``versions``. La ŝlosilo ``versions`` POVAS enhavi " +"version sen asociita dosiero (por versio sen âlsutita dosiero, se la servilo " +"subtenas tiaĵon)." + +#: ../source/specifications/simple-repository-api.rst:509 +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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "La ŝlosilo ``versions`` estis aldonita por versio 1.1 de la API." + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "Ĉiu individua dosiera vortaro havas la jenajn ŝlosilojn:" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "``filename``: La dosiernomo prezentata." -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "``url``: Retadreso, ĉe kiu oni povas elŝuti la dosieron." -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -20379,14 +24691,17 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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 "" +"La vortaro ``hashes`` DEVAS ekzisti, eĉ se neniu haketaĵo disponeblas pri la " +"dosiero. Tamen, estas **REKOMENDEGATE** inkluzivi almenaŭ unu sekuran, " +"garantie haveblan haketaĵon." -#: ../source/specifications/simple-repository-api.rst:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -20396,46 +24711,63 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " "tools **SHOULD** ignore the download when installing to a Python version " "that doesn't satisfy the requirement." msgstr "" +"``requires-python``: **Nedeviga** ŝlosilo por la metadatena kampo :ref:`core-" +"metadata-requires-python`. Se ĝi ekzistas, instalilo **IGNORU** la elŝuton " +"dum instalado al Python-versio ne plenumanta la postulon." -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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 "" +"Malkiel ``data-requires-python`` en :ref:`la baza specifo de HTML API " +"`, la ŝlosilo ``requires-python`` ne postulas " +"specialan kodŝanĝadon alian ol la implicitan kodŝanĝon de JSON." -#: ../source/specifications/simple-repository-api.rst:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``core-metadata``: An **optional** key that indicates that metadata for this " +"file is available, via the same location as specified in :ref:`the API " "metadata file specification ` " "(``{file_url}.metadata``). Where this is present, it **MUST** be either a " "boolean to indicate if the file has an associated metadata file, or a " "dictionary mapping hash names to a hex encoded digest of the metadata's hash." msgstr "" +"``core-metadata``: **Nedeviga** ŝlosilo indikanta, ke metadatenoj de tiu " +"dosiero disponeblas ĉe la sama loko specifita en :ref:`la normo pri " +"metadatenaj dosiero por API ` " +"(``{file_url}.metadata``). Se ĝi ekzistas, ĝi **DEVAS** esti aŭ bulea valoro " +"(indikanta, ĉu asociita metadatena dosiero ekzistas) aŭ vortaro, kiu asocias " +"nomojn de haketaĵoj al deksesume koditaj haketaĵoj de la metadatenoj." -#: ../source/specifications/simple-repository-api.rst:486 +#: ../source/specifications/simple-repository-api.rst:554 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 "" +"Se ĉi tiu estas vortaro da haketaĵoj kaj ne bulea valoro, do la postuloj kaj " +"rekomendoj por la ŝlosilo ``hashes`` ankaŭ validas por ĉi tiu ŝlosilo." -#: ../source/specifications/simple-repository-api.rst:490 +#: ../source/specifications/simple-repository-api.rst:558 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 "" +"Se tiu ŝlosilo mankas, la metadateno-dosiero povas ekzisti aŭ ne. Se la " +"ŝlosila valoro estas vereca, la metadateno-dosiero ekzistas; se la ŝlosila " +"valoro estas malvereca, la metadateno-dosiero mankas." -#: ../source/specifications/simple-repository-api.rst:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." @@ -20443,7 +24775,30 @@ msgstr "" "Estas rekomendate, ke serviloj disponigu la haketaĵojn de la metadateno-" "dosiero, se tio eblas." -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" +"``dist-info-metadata``: **Nedeviga**, evitinda sinonimo de ``core-metadata``." + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" +"Indekso-kliento **POVAS** uzi tiun ŝlosilon, se ĝi ekzistas, kiel evitindan " +"sinonimon de ``core-metadata``." + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" +"``dist-info-metadata`` estis normigita per :pep:`658`, kaj ĝia nomo ŝanĝiĝis " +"al ``core-metadata`` per :pep:`714`." + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -20452,7 +24807,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -20463,7 +24818,48 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" +"``size``: Ŝlosilo, kiu **DEVAS** ekzisti kaj **DEVAS** enhavi entjeron, kiu " +"estas la grando de la dosiero en bajtoj." + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "La ŝlosilo ``size`` estis aldonita por versio 1.1 de la API." + +#: ../source/specifications/simple-repository-api.rst:593 +msgid "" +"``upload-time``: An **optional** key that, if present, **MUST** contain a " +"valid ISO 8601 date/time string in the format ``yyyy-mm-ddThh:mm:ss." +"ffffffZ`` which represents the time the file was uploaded to the index." +msgstr "" +"``upload-time``: Ŝlosilo kiu **POVAS** manki, kiu (se ĝi ekzistas) **DEVAS** " +"enhavi validan datotempan signoĉenon laŭ ISO 8601 en la formo ``jjjj-mm-" +"ttThh:mm:ss.ffffffZ``, kiu prezentas la tempon, kiam la dosiero estis " +"alŝutita al la indekso." + +#: ../source/specifications/simple-repository-api.rst:597 +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 "" +"Laŭ la sufikso ``Z``, la alŝuta tempo **DEVAS** esti la Universala " +"Kunordigita Tempo. La frakcia sekunda parto de la tempo (la parto ``." +"ffffff``) estas nedeviga kaj povas enhavi maksimume ses ciferojn. Se servilo " +"ne registras alŝutan tempon de dosiero, ĝi **POVAS** preterlasi la ŝlosilon " +"``upload-time``." + +#: ../source/specifications/simple-repository-api.rst:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "La ŝlosilo ``upload-time`` estis aldonita por versio 1.1 de la API." + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -20471,7 +24867,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "La kampo ``provenance`` estis aldonita por versio 1.3 de la API." + +#: ../source/specifications/simple-repository-api.rst:649 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 ` 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 "" +"Por ekzistanta kliento atendanta la ekzistantan API-respondon de :ref:`la " +"normo pri baza HTML API ` uzantan la enhavtipon " +"``text/html``, ĉi tiu normo difinas ``text/html`` kiel sinonimon de la " +"enhavtipo ``application/vnd.pypi.simple.v1+html`` ." -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "Elektado de Versio kaj Dosierformo" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -20547,7 +24951,7 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 msgid "" "While this spec won't fully describe the entirety of server-driven content " "negotiation, the flow is roughly:" @@ -20565,7 +24969,7 @@ msgstr "" "Dum ĉi tiu specifo ne plene priskribas servilan enhavo-marĉandadon, la fluo " "estas proksimume jena:" -#: ../source/specifications/simple-repository-api.rst:599 +#: ../source/specifications/simple-repository-api.rst:705 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." @@ -20573,7 +24977,7 @@ msgstr "" "La kliento sendas HTTP-peton enhavantan ĉapon ``Accept`` listigantan ĉiujn " "enhavtipojn de la formo versio+formo komprenatajn de la kliento." -#: ../source/specifications/simple-repository-api.rst:601 +#: ../source/specifications/simple-repository-api.rst:707 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 " @@ -20583,7 +24987,7 @@ msgstr "" "kaj liveras respondon de tiu enhavtipo (la manko de ĉapo ``Accept`` estas " "ekvivalenta al ``Accept: */*``)." -#: ../source/specifications/simple-repository-api.rst:604 +#: ../source/specifications/simple-repository-api.rst:710 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 " @@ -20592,7 +24996,7 @@ msgstr "" "Se la servilo ne subtenas iun ajn el la enhavtipoj en la ĉapo ``Accept``, ĝi " "povas elekti inter la jenaj tri opcioj:" -#: ../source/specifications/simple-repository-api.rst:608 +#: ../source/specifications/simple-repository-api.rst:714 msgid "" "Select a default content type other than what the client has requested and " "return a response with that." @@ -20600,7 +25004,7 @@ msgstr "" "Elekti aprioran enhavtipon alian ol tiujn petitajn de la kliento kaj liveri " "tian respondon." -#: ../source/specifications/simple-repository-api.rst:610 +#: ../source/specifications/simple-repository-api.rst:716 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 " @@ -20610,7 +25014,7 @@ msgstr "" "petitaj enhavtipoj estis disponeblaj, kaj la servilo ne volis aŭ ne povis " "elekti aprioran respondan enhavtipon." -#: ../source/specifications/simple-repository-api.rst:613 +#: ../source/specifications/simple-repository-api.rst:719 msgid "" "Return a HTTP ``300 Multiple Choices`` response that contains a list of all " "of the possible responses that could have been chosen." @@ -20618,7 +25022,7 @@ msgstr "" "Liveri HTTP-respondon ``300 Pluraj Opcioj`` enhavantan liston de ĉiuj eblaj " "respondoj, kiujn la kliento povas elekti." -#: ../source/specifications/simple-repository-api.rst:615 +#: ../source/specifications/simple-repository-api.rst:721 msgid "" "The client interprets the response, handling the different types of " "responses that the server may have responded with." @@ -20626,7 +25030,7 @@ msgstr "" "La kliento interpretas la respondon, pritraktante tiujn diversajn specojn de " "respondoj, kiujn la servilo eble sendis." -#: ../source/specifications/simple-repository-api.rst:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -20634,7 +25038,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -20645,7 +25049,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -20654,33 +25058,39 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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 "" +"La ĉapo ``Accept`` estas kome disigita listo de enhavtipoj komprenataj kaj " +"pritrakteblaj de la kliento. Ĝu subtenas tri malsamjn formojn por ĉiu " +"pripetata enhavtipo:" -#: ../source/specifications/simple-repository-api.rst:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "``$tipo/$subtipo``" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "``$tipo/*``" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "``*/*``" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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 "" +"Por elekti version kaj dosierformon, la plej utila el tiuj estas ``$tipo/" +"$subtipo``, ĉar tio estas la sola maniero specifi la deziratajn version kaj " +"dosierformon." -#: ../source/specifications/simple-repository-api.rst:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -20690,7 +25100,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -20700,7 +25110,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -20708,7 +25118,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -20718,23 +25128,31 @@ msgid "" "pip/blob/cf3696a81b341925f82f20cb527e656176987565/src/pip/_internal/index/" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" +"Por helpi kliento determini la enhavtipon de la respondo al API-peto, ĉi tiu " +"specifo postulas, ke servilo ĉiam inkluzivu ĉapon``Content-Type`` pri la " +"enhavtipo de la respondo. Tio estas teĥnike ne retrokongrua ŝanĝo. Tamen " +"praktike `pip devigas ĉi tiun postulon `_. Tial la risko de reala rompo estas malgranda." -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "Jen ekzemplo de funkciado de kliento:" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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 "" +"Se kliento volus nur subteni HTML aŭ JSON, do ĝi simple forigus nevolatan " +"enhavtipon el la ĉapo ``Accept``, tiel ke ricevi tion estus erare." -#: ../source/specifications/simple-repository-api.rst:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" -msgstr "Alternativaj Traktaj Meĥanismoj" +msgstr "Alternativaj Marĉandaj Meĥanismoj" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -20743,39 +25161,49 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "URL-Parametro" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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 "" +"Servilo realiganta la Simplan API povas eble subteni retadresan parametron " +"nomitan ``format`` por peti specifan version de la retadreso." -#: ../source/specifications/simple-repository-api.rst:745 +#: ../source/specifications/simple-repository-api.rst:851 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 "" +"La valoro de la parametro ``format`` estu **unu** el la validaj enhavtipoj. " +"Ne subtenataj estas pluraj enhavtipoj, ĵokero, kvalito-valoro ktp." -#: ../source/specifications/simple-repository-api.rst:749 +#: ../source/specifications/simple-repository-api.rst:855 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 "" +"Ĉi tiu parametro ne estas subtenenda. Kliento **NE DEPENDU** de ĝi por " +"interagi kun la API. La marĉanda meĥanismo estas por pli facila homa " +"esplorado de la API en TTT-legilo aŭ por permesi hiperligon al specifa " +"versio kaj formo en dokumentaro aŭ notoj." -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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 "" +"Servilo ne subtenanta tiun parametron povas raporti eraron se ĝi ĉeestas aŭ " +"simple ignori ĝin." -#: ../source/specifications/simple-repository-api.rst:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -20785,26 +25213,31 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "Agordado de Finpunkto" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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 "" +"Tiu opcio teĥnike ne estas speciala opcio, sed nur natura konsekvenco de la " +"uzadon de enhavo-marĉandado, permesante al servilo elekti sian aprioraĵon el " +"la haveblaj enhavtipoj." -#: ../source/specifications/simple-repository-api.rst:772 +#: ../source/specifications/simple-repository-api.rst:878 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 "" +"Se servilo ne volas aŭ ne povas subteni la servila enhavomarĉandado kaj " +"volas postuli, ke uzanto eksplicu la deziratan version, tio estas permesata." -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -20813,8 +25246,14 @@ msgid "" "client makes a request using the ``Accept`` header, the server can ignore it " "and return the content type that corresponds to that endpoint." msgstr "" +"Por tio, servilo disponigu plurajn finpunktoj (ekzemple, ``/simple/v1+html/" +"`` kaj/aŭ ``/simple/v1+json/``) po unu por ĉiu paro de versio kaj " +"dosierformo subtenata. Ĉe finpunkto, servilo povas gastigi kopion de la " +"deponejo nur subtenanta unu (aŭ subaron) el la enhavtipoj. Kiam kliento " +"petas uzante la ĉapon ``Accept``, la servilo povas ignori tion kaj liveri la " +"enhavtipon por la finpunkto." -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -20822,11 +25261,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "Subteno de TUF – PEP 458" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -20836,16 +25275,25 @@ msgid "" "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:799 +#: ../source/specifications/simple-repository-api.rst:905 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:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -20854,7 +25302,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -20862,7 +25310,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -20872,28 +25320,36 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 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 "" +"Jen nedeviga paragrafo pri la plej bonaj aprioraj decidoj por realigi ĉi " +"tiun normon laŭ la opinioj de la aŭtoroj. Ĝi **ne** devige postulas tiajn " +"decidojn." -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -20902,32 +25358,40 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "Ni rekomendas, ke serviloj faru la jenon:" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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 "" +"Subtenu ĉiujn tri enhavtipojn priskribitajn en ĉi tiu normo, uzante servilan " +"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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 "" +"Se servilo ricevas ĉapon ``Accept`` kiu ne enhavas ajnan konatan " +"dosiertipon, ĝi ne liveru respondon ``300 Multiple Choice``; anstataŭe ĝi " +"liveru respondon ``406 Not Acceptable``." -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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 "" +"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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -20936,24 +25400,26 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "Ni rekomendas, ke klientoj faru la jenon:" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." 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:865 +#: ../source/specifications/simple-repository-api.rst:971 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:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -20962,14 +25428,17 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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 "" +"La unu escepto al tiu rekomendo estas, ke estas rekomendate *inkluzivi* " +"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:878 +#: ../source/specifications/simple-repository-api.rst:984 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." @@ -20977,7 +25446,7 @@ msgstr "" "Eksplicite elektu la version serĉatan, anstataŭ uzi la metadatenan version " "``latest``, dum ordinara funkciado." -#: ../source/specifications/simple-repository-api.rst:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." @@ -20985,193 +25454,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:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "Pliaj Kampoj por la Simpla API por Pakindeksoj" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "La ``api-version`` devas specifi version 1.1 aŭ pli novan." - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "Nova ŝlosilo ``versions`` estis aldonita supranivele." - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" -"Du novaj «dosierinformaj» ŝlosiloj ``size`` kaj ``upload-time`` estas " -"aldonitaj al la datenoj ``files``." - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" -"La ŝlosiloj ``versions`` kaj ``size`` estas devigaj. La ŝlosilo ``upload-" -"time`` ne estas deviga." - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "Pliaj dosieraj informoj" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "Du novaj ŝlosiloj estas aldonitaj al la ŝlosilo ``files``." - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" -"``size``: Ĉi tiu kampo estas deviga kaj DEVAS enhavi entjeron, kiu estas la " -"grando de la dosiero en bajtoj." - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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 "" -"``upload-time``: Ĉi tiu kampo estas nedeviga. Se ĝi ekzistas, ĝi DEVAS " -"enhavi validan datotempan signoĉenon laŭ ISO 8601 en la formo``jjjj-mm-ttThh:" -"mm:ss.ffffffZ``, kiu prezentas la tempon, kiam la dosiero estis alŝutita al " -"la indekso. Laŭ la sufikso ``Z``, la alŝuta tempo DEVAS esti la Universala " -"Kunordigita Tempo. La frakcia sekunda parto de la tempo (la parto ``." -"ffffff``) estas nedeviga kaj povas enhavi maksimume ses ciferojn. Se servilo " -"ne registras alŝutan tempon de dosiero, ĝi POVAS preterlasi la ŝlosilon " -"``upload-time``." - -#: ../source/specifications/simple-repository-api.rst:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "Ŝanĝi la nomon dist-info-metadata en la Simpla API" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" -"La ŝlosilvortoj **«DEVAS» (MUST, SHALL)**, **«DEVAS NE» (MUST NOT, SHALL " -"NOT)**, **«POSTULATA» (REQUIRED)**, **«-U» (SHOULD)**, **«NE -U» (SHOULD " -"NOT)**, **«REKOMENDATA» (RECOMMENDED)**, **«POVAS» (MAY)** kaj " -"**«NEDEVIGA» (OPTIONAL)**\" en ĉi tiu dokumento estas interpretataj laŭ :rfc:" -"`RFC 2119 <2119>`." - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "Serviloj" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" -"La metadatenoj de :ref:`la API-medateno-dosiera specifo `, se uzata en la HTML-prezento de la Simpla API, " -"**DEVAS** enhavi la atributan nomon ``data-core-metadata``, kun la " -"subtenataj valoroj restantaj same." - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" -"Por subteni klientojn uzantajn la antaŭajn ŝlosilajn nomojn, la HTML-" -"prezento **POVAS** ankaŭ enhavi ``data-dist-info-metadata``. Se ĝi ja " -"enhavas tion, ĝi **DEVAS** kongrui kun la valoro de ``data-core-metadata``." - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 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:991 +#: ../source/specifications/simple-repository-api.rst:996 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:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "Majo 2019: Subteno de «fortiro», en :pep:`592`" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" @@ -21179,14 +25474,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:995 +#: ../source/specifications/simple-repository-api.rst:1000 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:997 +#: ../source/specifications/simple-repository-api.rst:1002 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`" @@ -21194,7 +25489,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:999 +#: ../source/specifications/simple-repository-api.rst:1004 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" @@ -21202,7 +25497,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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" @@ -21210,7 +25505,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:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -21229,6 +25524,10 @@ msgid "" "The layout of such a distribution was originally specified in :pep:`517` and " "is formally documented here." msgstr "" +"La aktuala norma dosierformo de fonta distribuo estas indikita per la " +"ekzisto de dosiero :file:`pyproject.toml` en la distribua arĥivo. La aranĝo " +"de tia distribuo estis originale specifita en :pep:`517` kaj estas formale " +"priskribita ĉi tie." #: ../source/specifications/source-distribution-format.rst:13 msgid "" @@ -21245,11 +25544,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "Fonta distribuo ankaŭ estas konata kiel *sdist* mallonge." -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "Fontarboj" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -21259,11 +25558,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "Dosiernomo de fonta distribuo" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -21271,8 +25570,13 @@ msgid "" "distribution-format`), and ``{version}`` is the canonicalized form of the " "project version (see :ref:`version-specifiers`)." msgstr "" +"La dosiernomo de fonta distribu estis normigita en :pep:`625`. La dosiernomo " +"devas esti en la formo ``{nomo}-{versio}.tar.gz``, en kiu ``{nomo}`` estas " +"normigita laŭ la samaj reguloj kiel por duumaj distribuoj (vidu :ref:`binary-" +"distribution-format`), kaj ``{versio}`` estas la kanonigita formo de la " +"projekta versio (vidu :ref:`version-specifiers`)." -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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." @@ -21280,14 +25584,17 @@ msgstr "" "La noma kaj versia komponantoj de la dosiernomo DEVAS kongrui kun la valoroj " "en la metadatenoj en la dosiero." -#: ../source/specifications/source-distribution-format.rst:45 +#: ../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 "" +"Kodo generanta fonto-distribuan dosieron DEVAS nomi la dosieron laŭ ĉi tiu " +"specifo. Tio inkluzivas la hokon ``build_sdist`` de :term:`konstrua " +"malfasado `." -#: ../source/specifications/source-distribution-format.rst:49 +#: ../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 " @@ -21295,59 +25602,85 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "Dosierformo de fonta distribuo" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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 "" +"Se la metadatena versio estas almenaŭ 2.4, la fonta distribuo DEVAS enhavi " +"ajnan licencan dosieron specifitan de la kampo ``License-File`` en :file:" +"`PKG-INFO` ĉe la respektivaj lokoj relativaj al la radika dosierujo de la " +"fonta distribuo (enhavanta la dosieron :file:`pyproject.toml` kaj la " +"metadateno-dosieron :file:`PKG-INFO`)." + +#: ../source/specifications/source-distribution-format.rst:74 msgid "" "No other content of a sdist is required or defined. Build systems can store " "whatever information they need in the sdist to build the project." msgstr "" +"Neniu alia enhavo de fonta distribuo estas postulata aŭ difinita. " +"Konstrusistemo povas enmeti iajn ajn informojn bezonatajn en la fontan " +"distribuon por konstrui la projekton." -#: ../source/specifications/source-distribution-format.rst:68 +#: ../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 "" +"La tar-arĥivo uzu la modernan pax-formon de POSIX.1-2001, kiu specifas UTF-8-" +"bazajn dosiernomojn. Speciale, dosiero de fonta distribuo devas esti legebla " +"per la norma biblioteka modulo ``tarfile`` kun la malferma flago ``'r:gz'``." -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "Trajtoj de fontdistribua arĥivo" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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 "" +"Ĉar naiva malpakado de ``tar``-arĥivo danĝeras, kaj la rezultoj varias laŭ " +"platformo, arĥivaj funkcioj de fontaj distribuoj estas limigitaj." -#: ../source/specifications/source-distribution-format.rst:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "Malpaki kun la datenfiltrilo" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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 "" +"Dum malpakado de fonta distribuo, ilo DEVAS uzi aŭ :py:func:`tarfile." +"data_filter` (ekz. :py:meth:`TarFile.extractall(..., filter='data') `), AŬ sekvi la paragrafon *Malpaki sen la datenfiltrilo* " +"ĉi-sube." -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -21357,11 +25690,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "Malpaki sen la datenfiltrilo" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -21369,26 +25702,28 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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 "" +"La jenaj dosieroj ne validas en *fonta distribua* arĥivo. Trovante tian " +"eron, ilo SCIIGU la uzanton, DEVAS NE malpaki la eron, kaj POVAS malsukcesi:" -#: ../source/specifications/source-distribution-format.rst:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "Dosieroj, kiuj estus metitaj ekster la cela dosierujo." -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "Ligilo (simbola aŭ malmola) al loko ekster la cela dosierujo." -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "Aparatdosieroj (inkluzive de duktoj)." -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:" @@ -21396,15 +25731,15 @@ msgstr "" "La ĉi-subaj estas ankaŭ nevalidaj. Ilo POVAS, sed NE DEVAS, pritrakti ilin " "same kiel la ĉi-supraĵojn:" -#: ../source/specifications/source-distribution-format.rst:115 +#: ../source/specifications/source-distribution-format.rst:124 msgid "Files with a ``..`` component in the filename or link target." msgstr "Dosieroj kun la komponanto ``..`` en la dosiernomo aŭ ligila celo." -#: ../source/specifications/source-distribution-format.rst:116 +#: ../source/specifications/source-distribution-format.rst:125 msgid "Links pointing to a file that is not part of the archive." msgstr "Ligiloj al dosiero, kiu ne estas parto de la arĥivo." -#: ../source/specifications/source-distribution-format.rst:118 +#: ../source/specifications/source-distribution-format.rst:127 msgid "" "Tools MAY unpack links (symbolic or hard) as regular files, using content " "from the archive." @@ -21412,11 +25747,11 @@ msgstr "" "Ilo POVAS malpaki ligilon (simbolan aŭ malmolan) kiel ordinaran dosieron " "uzante enhavon de la arĥivo." -#: ../source/specifications/source-distribution-format.rst:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "Dum maldensigo de *fontdistribuaj* arĥivoj:" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../source/specifications/source-distribution-format.rst:132 msgid "" "Leading slashes in file names MUST be dropped. (This is nowadays standard " "behaviour for ``tar`` unpacking.)" @@ -21424,21 +25759,21 @@ msgstr "" "Komencaj suprenstrekoj en dosiernomo DEVAS esti senigitaj. (Tio estas " "nuntempe norma konduto pri malpakado de ``tar``.)" -#: ../source/specifications/source-distribution-format.rst:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "Por ĉiu bito ``mode`` (de Unika permeso), ilo DEVAS:" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../source/specifications/source-distribution-format.rst:136 msgid "use the platform's default for a new file/directory (respectively)," msgstr "" "aŭ uzi la aprioran valoron de la platformo por nova dosiero aŭ dosierujo " "(respektive)," -#: ../source/specifications/source-distribution-format.rst:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "aŭ agordi la biton laŭ la arĥivo," -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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." @@ -21446,20 +25781,20 @@ msgstr "" "aŭ uzi la biton el ``rw-r--r--`` (``0o644``) por nerulebla dosiero aŭ ``rwxr-" "xr-x`` (``0o755``) por rulebla dosiero aŭ dosierujo." -#: ../source/specifications/source-distribution-format.rst:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" "La altaj bitoj ``mode`` (setuid, setgid, sticky) DEVAS esti malŝaltitaj." -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "Oni REKOMENDAS konservi la biton pri rulebleco far la uzanto." -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "Pluaj konsiloj" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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." @@ -21467,7 +25802,7 @@ msgstr "" "NI instigas aŭtorojn de iloj pripensi kiel la *hints for further " "verification* en la dokumentaro de ``tarfile`` rilatas al la iloj." -#: ../source/specifications/source-distribution-format.rst:146 +#: ../source/specifications/source-distribution-format.rst:155 msgid "" "November 2020: The original version of this specification was approved " "through :pep:`643`." @@ -21475,11 +25810,11 @@ msgstr "" "Novembro 2020: La originala versio de ĉi tiu specifo estis aprobita per :pep:" "`643`." -#: ../source/specifications/source-distribution-format.rst:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "Julio 2021: Difinis fontarbon." -#: ../source/specifications/source-distribution-format.rst:149 +#: ../source/specifications/source-distribution-format.rst:158 msgid "" "September 2022: The filename of a source distribution was standardized " "through :pep:`625`." @@ -21487,7 +25822,7 @@ msgstr "" "Septembro 2022: La dosiernomo de fonta distribuo estis normigita per :pep:" "`625`." -#: ../source/specifications/source-distribution-format.rst:151 +#: ../source/specifications/source-distribution-format.rst:160 msgid "" "August 2023: Source distribution archive features were standardized through :" "pep:`721`." @@ -21495,6 +25830,14 @@ msgstr "" "Aŭgusto 2023: Trajtoj de fontdistribuaj arĥivoj estis normigitaj per :pep:" "`721`." +#: ../source/specifications/source-distribution-format.rst:162 +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" +"Decembro 2024: inkluzivo de licenco-dosiero en fonta distribuo estis " +"normigita per :pep:`639`." + #: ../source/specifications/version-specifiers.rst:7 #: ../source/specifications/version-specifiers.rst:782 msgid "Version specifiers" @@ -21531,6 +25874,10 @@ msgid "" "invoked by integration tools in order to build software distributed as " "sdists rather than prebuilt binary archives." msgstr "" +"«Konstruilo» estas aŭtomata ilo por evoluada sistemo, produktanta fonto-" +"distribuajn kaj duum-distribuajn arĥivojn. Konstruilon integrilo povas " +"alvoki, por konstrui programon distribuitan kiel fontan distribuon, ne kiel " +"antaŭkonstruitan duuman arĥivon." #: ../source/specifications/version-specifiers.rst:26 msgid "" @@ -21545,6 +25892,8 @@ msgid "" "\"Publication tools\" are automated tools intended to run on development " "systems and upload source and binary distribution archives to index servers." msgstr "" +"«Eldonilo» estas aŭtomata ilo ruliĝanta sur evoluada sistemo por alŝuti " +"fontajn kaj duumajn distribuajn arĥivojn al indeksoserviloj." #: ../source/specifications/version-specifiers.rst:32 msgid "" @@ -21553,6 +25902,9 @@ msgid "" "an index server or other designated location and deploying them to the " "target system." msgstr "" +"«Instalilo» estas integrilo specife por disponebligaĵoj, konsumanta fontan " +"aŭ duuman distribuan arĥivon el indeksa servilo aŭ alia provizita loko kaj " +"disponiganta ĝin al la cela sistemo." #: ../source/specifications/version-specifiers.rst:37 msgid "" @@ -21560,6 +25912,10 @@ msgid "" "servers, publication tools, integration tools and any other software that " "produces or consumes distribution version and dependency metadata." msgstr "" +"«Aŭtomataj iloj» estas kolektiva esprimo inkluzivanta konstruilojn, " +"indeksoservilojn, eldonilojn, integrilojn kaj ajnajn aliajn programojn " +"produktantajn aŭ konsumantajn medatatenojn pri versioj kaj dependecoj de " +"distribuo." #: ../source/specifications/version-specifiers.rst:43 msgid "Version scheme" @@ -21609,6 +25965,9 @@ msgid "" "Installation tools MAY warn the user when non-compliant or ambiguous " "versions are detected." msgstr "" +"Instalilo IGNORU ajnan publikan version, kiu ne observas tiun skemon, kaj " +"DEVAS inkluzivi la normigojn ĉi-subajn. Instalilo POVAS averti la uzanton, " +"kiam ĝi trovas neobservantajn aŭ ambiguajn versiojn." #: ../source/specifications/version-specifiers.rst:73 msgid "" @@ -21617,6 +25976,9 @@ msgid "" "permissive regular expression accepting inputs that may require subsequent " "normalization." msgstr "" +"Vidu ankaŭ :ref:`version-specifiers-regex`, kiu provizas regulan esprimon " +"por kontroli striktan konformecon al la kanona formo, kaj pli permeseman " +"regulan esprimon por tiuj enigaĵoj, kiujn oni devas normigi poste." #: ../source/specifications/version-specifiers.rst:78 msgid "Public version identifiers are separated into up to five segments:" @@ -21672,6 +26034,9 @@ msgid "" "release segment, a numeric component of zero has no special significance " "aside from always being the lowest possible value in the version ordering." msgstr "" +"Ĉia numera komponanto POVAS esti nulo. Krom la ĉi-suba paragrafo pri la " +"eldono-segmento, la numera komponanto nulo ne estas speciala; ĝi estas " +"simple la plej malgranda valoro je ordigado de versioj." #: ../source/specifications/version-specifiers.rst:101 msgid "" @@ -21679,6 +26044,9 @@ msgid "" "to better accommodate the wide range of versioning practices across existing " "public and private Python projects." msgstr "" +"Kelkaj malfacile legeblaj versio-identigiloj estas permesataj de tiu skemo " +"por pli bone adapti al la larĝa gamo de versio-formoj en ekzistantaj " +"publikaj kaj privataj Python-projektoj." #: ../source/specifications/version-specifiers.rst:105 msgid "" @@ -21687,6 +26055,9 @@ msgid "" "Where this is the case, the relevant details are noted in the following " "sections." msgstr "" +"Tial, kelkaj el la versiaj formoj teĥnike permesataj de la specifo estas " +"malrekomendegataj por novaj projektoj. Por tiaj kazoj, la ĉi-subaj " +"paragrafoj notas detalojn." #: ../source/specifications/version-specifiers.rst:116 msgid "Local version identifiers MUST comply with the following scheme::" @@ -21727,6 +26098,10 @@ msgid "" "hash representations, local version labels MUST be limited to the following " "set of permitted characters:" msgstr "" +"Por certigi, ke loka versio-identigilo estu facile enmetebla en dosiernomojn " +"kaj retadresojn, kaj por eviti aranĝan malkoherecon pri deksesumaj prezentoj " +"de haketaĵoj, loka versio-etikedo DEVAS konsisti nur el la ĉi-subaj " +"permesataj skribsignoj:" #: ../source/specifications/version-specifiers.rst:143 msgid "ASCII letters (``[a-zA-Z]``)" @@ -21787,6 +26162,13 @@ msgid "" "the Python Package Index is intended solely for indexing and hosting " "upstream projects, it MUST NOT allow the use of local version identifiers." msgstr "" +"Oni NE UZU lokan versio-identigilon por eldoni originan projekton al publika " +"indeksoservilo, sed POVAS uzi ĝin por identigi privatan konstruon kreitan " +"rekte el la projekta fonto. Repaka projekto UZU lokan versio-identigilon por " +"versio API-kongrua kun la versio de la origina projekto de la publika versio-" +"identigilo, sed kun pliaj ŝanĝoj (kiel cimriparoj). Ĉar la Python-Pakindekso " +"celas sole indeksi kaj gastigi originajn projektojn, ĝi DEVAS NE permesi la " +"uzon de loka versio-identigilo." #: ../source/specifications/version-specifiers.rst:175 msgid "" @@ -21822,6 +26204,8 @@ msgid "" "increasing fashion, otherwise automated tools will not be able to upgrade " "them correctly." msgstr "" +"Finaj eldonoj por iu projekto DEVAS esti numeritaj alkremente. Alie, " +"aŭtomata ilo ne povus ĝisdatigi versiojn ĝuste." #: ../source/specifications/version-specifiers.rst:194 msgid "" @@ -21837,6 +26221,8 @@ msgid "" "under this scheme, the most common variants are to use two components " "(\"major.minor\") or three components (\"major.minor.micro\")." msgstr "" +"Dum la skemo permesas ajnan nombron da komponantoj post la unua, plej ofte " +"oni uzas du komponantojn («maĵora.minora») aŭ tri («maĵora.minora.mikroa»)." #: ../source/specifications/version-specifiers.rst:203 msgid "For example::" @@ -21859,12 +26245,18 @@ msgid "" "``X.Y.0`` when comparing it to any release segment that includes three " "components." msgstr "" +"``X.Y`` kaj ``X.Y.0`` ne distingiĝas kiel versiaj numeroj, ĉar la reguloj " +"pri komparado de eldonsegmentoj implicite plilongigas la du-komponantan " +"formon al ``X.Y.0`` por komparado al ajna eldonsegmento inkluzivanta tri " +"komponantojn." #: ../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 "" +"Datobaza eldonsegmento estas ankaŭ permesata. Jen ekzemplo de datobaza " +"eldonskemo uzanta la jaron kaj monaton de la eldono::" #: ../source/specifications/version-specifiers.rst:243 msgid "Pre-releases" @@ -21883,6 +26275,8 @@ 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 "" +"Se antaŭeldono estas parto de la evolua ciklo de projekto, ĝi indikiĝas per " +"antaŭeldona segmento en la versia identigilo::" #: ../source/specifications/version-specifiers.rst:256 msgid "" @@ -21934,12 +26328,17 @@ msgid "" "that do not affect the distributed software (for example, correcting an " "error in the release notes)." msgstr "" +"Kelkaj projektoj uzas posteldonon por korekti negravajn erarojn en fina " +"eldono ne efikantajn sur la distribuita programo (ekzemple, por korekti " +"eraron en la eldonaj notoj)." #: ../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 "" +"Se posteldono estas parto de la evolua ciklo de projekto, ĝi indikiĝas per " +"posteldona segmento en la versia identigilo::" #: ../source/specifications/version-specifiers.rst:286 msgid "" @@ -21956,6 +26355,9 @@ msgid "" "component, immediately following the corresponding release, and ahead of any " "subsequent release." msgstr "" +"La posteldona segmento konsistas el la signoĉeno ``.post`` sekvita de " +"nenegativa entjero. Posteldono estas ordigita laŭ sia numera komponanto, tuj " +"post la respondanta eldono, kaj antaŭ ajna sekva eldono." #: ../source/specifications/version-specifiers.rst:296 msgid "" @@ -21964,6 +26366,9 @@ msgid "" "release number and increment the final component for each maintenance " "release." msgstr "" +"La uzo de posteldono por ripari faktan cimon estas malrekomendegata. " +"Ĝenerale, oni uzu pli longan eldonan numeron kaj alkrementu la finan " +"komponanton por ĉiu cimripara eldono." #: ../source/specifications/version-specifiers.rst:301 msgid "Post-releases are also permitted for pre-releases::" @@ -21976,6 +26381,9 @@ msgid "" "is substantially clearer to simply create a new pre-release by incrementing " "the numeric component." msgstr "" +"Krei posteldono de antaŭeldono estas malrekomendegate, ĉar tio malfaciligas " +"la versio-identigilon por homoj. Ĝenerale, estas pli simple krei novan " +"antaŭeldonon alkrementante la numeran komponanton." #: ../source/specifications/version-specifiers.rst:316 msgid "Developmental releases" @@ -21988,6 +26396,9 @@ msgid "" "directly from source control which do not conflict with later project " "releases." msgstr "" +"Kelkaj projektoj regule kreas evoluadajn eldonojn. Sistema pakanto (speciale " +"por Linux-distribuo) eble volas krei fruan eldonon rekte el fontarbo ne " +"konfliktantan kun postaj projektaj eldonoj." #: ../source/specifications/version-specifiers.rst:323 msgid "" @@ -21995,6 +26406,8 @@ msgid "" "releases are indicated by including a developmental release segment in the " "version identifier::" msgstr "" +"Kiel parto de la evoluciklo de projekto, tiuj evoluaj eldonoj indikiĝas per " +"segmento de evolua eldono en la versia identigilo::" #: ../source/specifications/version-specifiers.rst:329 msgid "" @@ -22034,6 +26447,9 @@ msgid "" "they may be appropriate for projects which use the post-release notation for " "full maintenance releases which may include code changes." msgstr "" +"Evoluada eldono de posteldono estas ankaŭ malrekomendegata, sed ĝi eble " +"taŭgas por projekto uzanta la posteldonan notacion por plena flega eldono " +"eble inkluzivanta ŝanĝojn de kodo." #: ../source/specifications/version-specifiers.rst:361 msgid "Version epochs" @@ -22044,6 +26460,8 @@ msgid "" "If included in a version identifier, the epoch appears before all other " "components, separated from the release segment by an exclamation mark::" msgstr "" +"Se epoko ekzistas en versio-identigilo, ĝi ĉeestas antaŭ ĉiaj aliaj " +"komponantoj, apartigite el la eldono-segmento per krisigno::" #: ../source/specifications/version-specifiers.rst:368 msgid "If no explicit epoch is given, the implicit epoch is ``0``." @@ -22059,6 +26477,12 @@ msgid "" "releases would be identified as *older* than the date based releases when " "using the normal sorting scheme::" msgstr "" +"Multaj versio-identigiloj ne inkluzivas epokon, ĉar eksplicita epoko nur " +"necees, se projekto *ŝanĝas* la manieron de versia numerado tiel, ke la " +"ordinaraj reguloj pri ordigado de versioj estas malĝustaj. Ekzemple, se " +"projekto uzas dato-bazajn versiojn kiel ``2014.04`` kaj volas ŝanĝi al " +"semantikaj versioj kiel ``1.0``, do la novaj eldonoj estus rigardataj kiel " +"*pli malnovaj* ol la dato-bazaj eldonoj laŭ la ordinara ordigado::" #: ../source/specifications/version-specifiers.rst:384 msgid "" @@ -22066,6 +26490,8 @@ msgid "" "appropriately, as all versions from a later epoch are sorted after versions " "from an earlier epoch::" msgstr "" +"Tamen, eksplicitante epokon, oni povas ŝanĝi la ordon, ĉar ĉiuj versioj de " +"pli posta epoko estas ordigitaj post versioj de pli frua epoko::" #: ../source/specifications/version-specifiers.rst:398 msgid "Normalization" @@ -22089,6 +26515,9 @@ msgid "" "and the normal form is lowercase. This allows versions such as ``1.1RC1`` " "which would be normalized to ``1.1rc1``." msgstr "" +"Ĉiu Askia litero interpretiĝu usklecblinde en versio. La norma formo estas " +"minusklo. Tio permesas version kiel ``1.1RC1``, kies norma formo estas " +"``1.1rc1``." #: ../source/specifications/version-specifiers.rst:415 msgid "Integer Normalization" @@ -22102,6 +26531,11 @@ msgid "" "does not hold true for integers inside of an alphanumeric segment of a local " "version such as ``1.0+foo0100`` which is already in its normalized form." msgstr "" +"Ĉiu entjero interpretiĝas laŭ la apriora funkcio ``int()``, kaj la normigita " +"formo estas la teksta eligaĵo. Alivorte, la normigita formo de ``00`` estas " +"``0``, kaj la normigita formo de ``09000`` estas ``9000``. Tio ne temas pri " +"entjero en alfabetcifera segmento de loka versio kiel ``1.0+foo0100``, kiu " +"estas sia propra normigita formo." #: ../source/specifications/version-specifiers.rst:425 msgid "Pre-release separators" @@ -22116,6 +26550,12 @@ msgid "" "be used between the pre-release signifier and the numeral. This allows " "versions such as ``1.0a.1`` which would be normalized to ``1.0a1``." msgstr "" +"Antaŭeldono permesas la apartigilojn ``.``, ``-`` aŭ ``_`` inter la eldono-" +"segmento kaj la antaŭeldono-segmento. La norma formo ne uzas apartigilon. " +"Tio permesas versiojn kiel ``1.1.a1`` aŭ ``1.1-a1``, kies norma formo estas " +"``1.1a1``. Antaŭeldono ankaŭ permesas apartigilon inter la antaŭeldono-" +"specifilo kaj la numero. Tio permesas versiojn kiel ``1.0a.1``, kies norma " +"formo estas ``1.0a1``." #: ../source/specifications/version-specifiers.rst:436 msgid "Pre-release spelling" @@ -22130,6 +26570,11 @@ msgid "" "case the additional spelling should be considered equivalent to their normal " "forms." msgstr "" +"Antaŭeldono permesas la literumaĵojn ``alpha``, ``beta``, ``c``, ``pre`` kaj " +"``preview`` por ``a``, ``b``, ``rc``, ``rc`` kaj``rc`` respektive. Tio " +"permesas versiojn kiel ``1.1alpha1``, ``1.1beta2`` kaj ``1.1c3``, kiuj estas " +"normigitaj al ``1.1a1``, ``1.1b2`` kaj ``1.1rc3``. Ĉiukaze la ekstra " +"literumaĵo ekvivalentas la norman formon." #: ../source/specifications/version-specifiers.rst:447 msgid "Implicit pre-release number" @@ -22142,6 +26587,9 @@ msgid "" "explicitly. This allows versions such as ``1.2a`` which is normalized to " "``1.2a0``." msgstr "" +"Antaŭeldono permesas forlasi la numeron, kio implicas ``0``. La norma formo " +"eksplicas ``0``. Tio permesas versiojn kiel ``1.2a``, kies norma formo estas " +"``1.2a0``." #: ../source/specifications/version-specifiers.rst:455 msgid "Post release separators" @@ -22157,6 +26605,12 @@ msgid "" "This allows versions like ``1.2.post-2`` which would normalize to ``1.2." "post2``." msgstr "" +"Posteldono permesas la apartigilojn ``.``, ``-`` aŭ ``_``, aŭ eĉ la mankon " +"de apartigilo. La norma formo uzas la apartigilon ``.``. Tio permesas " +"versiojn kiel ``1.2-post2`` aŭ ``1.2post2``, kies norma formo estas " +"``1.2.post2``. Simile al apartigilo de antaŭeldono, tio ankaŭ permesas " +"nedevigan apartigilon inter la posteldono-specifilo kaj la numero. Tio " +"permesas versiojn kiel ``1.2.post-2``, kies norma formo estas ``1.2.post2``." #: ../source/specifications/version-specifiers.rst:466 msgid "Post release spelling" @@ -22169,6 +26623,9 @@ msgid "" "with the pre-releases the additional spellings should be considered " "equivalent to their normal forms." msgstr "" +"Posteldono ankaŭ permesas la literumaĵojn ``rev`` kaj ``r``. Tio permesas " +"versiojn kiel ``1.0-r4``, kies normigita formo estas ``1.0.post4``. Same " +"kiel antaŭeldono, la ekstraj literumaĵoj ekvivalentas la normigitajn formojn." #: ../source/specifications/version-specifiers.rst:475 msgid "Implicit post release number" @@ -22181,6 +26638,9 @@ msgid "" "explicitly. This allows versions such as ``1.2.post`` which is normalized to " "``1.2.post0``." msgstr "" +"Posteldono permesas forlasi la numeron, kio implicas ``0``. La norma formo " +"eksplicas ``0``. Tio permesas versiojn kiel ``1.2post``, kies norma formo " +"estas ``1.2post0``." #: ../source/specifications/version-specifiers.rst:483 msgid "Implicit post releases" @@ -22195,6 +26655,11 @@ msgid "" "post release number rule. In other words, ``1.0-`` is *not* a valid version " "and it does *not* normalize to ``1.0.post0``." msgstr "" +"Posteldono permesas la mankon de la signifilo ``post``. Por tiu formo, la " +"apartigilo DEVAS esti ``-``; neniu alia formo estas permesata. Tio permesas " +"versiojn kiel ``1.0-1``, kies norma formo estas ``1.0.post1``. Oni DEVAS NE " +"uzi tion kune kun la regulo de implicita posteldona numero. Alivorte, " +"``1.0-`` *ne* validas, kaj ĝia norma formo *ne* estas ``1.0.post0``." #: ../source/specifications/version-specifiers.rst:494 msgid "Development release separators" @@ -22207,6 +26672,10 @@ msgid "" "`` separator. This allows versions such as ``1.2-dev2`` or ``1.2dev2`` which " "normalize to ``1.2.dev2``." msgstr "" +"Evoluada eldono permesas la apartigilojn ``.``, ``-``, aŭ ``_``, aŭ eĉ la " +"mankon de apartigilo. La norma formo uzas la apartigilon ``.``. Tio permesas " +"versiojn kiel ``1.2-dev2`` aŭ ``1.2dev2``, kies norma formo estas " +"``1.2dev2``." #: ../source/specifications/version-specifiers.rst:503 msgid "Implicit development release number" @@ -22219,6 +26688,9 @@ msgid "" "``0`` explicitly. This allows versions such as ``1.2.dev`` which is " "normalized to ``1.2.dev0``." msgstr "" +"Evoluada eldono permesas forlasi la numeron, kio implicas ``0``. La norma " +"formo eksplicas ``0``. Tio permesas versiojn kiel ``1.2.dev``, kies norma " +"formo estas ``1.2.dev0``." #: ../source/specifications/version-specifiers.rst:512 msgid "Local version segments" @@ -22231,6 +26703,9 @@ msgid "" "using the ``.`` character. This allows versions such as ``1.0+ubuntu-1`` to " "be normalized to ``1.0+ubuntu.1``." msgstr "" +"Loka versio permesas, krom ``.`` kiel apartigilo de segmentoj, ankaŭ la " +"apartigiloj ``-`` kaj ``_``. La norma formo uzas ``.``. Tio permesas " +"versiojn kiel ``1.0+ubuntu-1``, kies norma formo estas ``1.0+ubuntu.1``." #: ../source/specifications/version-specifiers.rst:521 msgid "Preceding v character" @@ -22257,6 +26732,10 @@ msgid "" "be handled sensibly, such as a version like ``1.0\\n`` which normalizes to " "``1.0``." msgstr "" +"Komenca kaj fina blankaj spacoj devas esti silente ignorata kaj forigita el " +"ĉiuj normigitaj formoj de versio. Tio inkluzivas ``\" \"``, ``\\t``, " +"``\\n``, ``\\r``, ``\\f``, kaj ``\\v``. Tio permesas racian pritraktadon de " +"senintenca blanka spaco, kiel ``1.0\\n``, kiu estas normigita al ``1.0``." #: ../source/specifications/version-specifiers.rst:539 msgid "Examples of compliant version schemes" @@ -22318,6 +26797,9 @@ msgid "" "process distribution metadata, rather than developers of Python " "distributions deciding on a versioning scheme." msgstr "" +"Ĉi tiu paragrafo estas por aŭtoroj de iloj aŭtomate pritraktantaj " +"distribuajn metadatenojn, ne aŭtoroj de Python-distribuoj elektantaj versian " +"skemon." #: ../source/specifications/version-specifiers.rst:619 msgid "" @@ -22325,6 +26807,9 @@ msgid "" "numeric value of the given epoch. If no epoch segment is present, the " "implicit numeric value is ``0``." msgstr "" +"La epoka segmento de versio-identigilo DEVAS esti ordigita laŭ la nombra " +"valoro de la epoko. Se epoka segmento mankas, la implicita nombra valoro " +"estas ``0``." #: ../source/specifications/version-specifiers.rst:623 msgid "" @@ -22332,12 +26817,17 @@ msgid "" "as Python's tuple sorting when the normalized release segment is parsed as " "follows::" msgstr "" +"La eldona segmento de versia identigilo DEVAS esti ordigita same kiel la " +"ordo de opoj en Python, kiam la normigita eldona segmento estas analizita " +"jene::" #: ../source/specifications/version-specifiers.rst:629 msgid "" "All release segments involved in the comparison MUST be converted to a " "consistent length by padding shorter segments with zeros as needed." msgstr "" +"Ĉiuj eldono-segmentoj pri la komparo DEVAS esti samlongigitaj, metante " +"nulojn antaŭ pli mallongaj segmentoj laŭbezone." #: ../source/specifications/version-specifiers.rst:632 msgid "" @@ -22354,6 +26844,10 @@ msgid "" "same ``N`` for both a ``c`` and a ``rc`` in the same release segment as " "ambiguous and remain in compliance with the specification." msgstr "" +"Notu, ke ``c`` semantike ekvivalentas ``rc`` kaj estas ordigita kvazaŭ ĝi " +"estis ``rc``. Ilo POVAS malakcepti la kazon de la sama ``N`` por kaj ``r`` " +"kaj ``rc`` en la sama eldonsegmento pro ambigueco kaj tamen observi la " +"specifon." #: ../source/specifications/version-specifiers.rst:642 msgid "" @@ -22361,6 +26855,9 @@ msgid "" "(``1.0rc1``, ``1.0c1``), the following suffixes are permitted and MUST be " "ordered as shown::" msgstr "" +"En alfa (``1.0a1``), beta (``1.0b1``) aŭ eldonkandidato (``1.0rc1``, " +"``1.0c1``), la ĉi-subaj sufiksoj estas permesataj kaj DEVAS esti ordigitaj " +"jene::" #: ../source/specifications/version-specifiers.rst:648 msgid "" @@ -22376,12 +26873,16 @@ msgid "" "used immediately following a numeric version (e.g. ``1.0.dev456``, ``1.0." "post1``)." msgstr "" +"Notu, ke ``devN`` kaj ``postN`` DEVAS esti antaŭita de punkto, eĉ tuj post " +"numera versio (ekz. ``1.0.dev456``, ``1.0.post1``)." #: ../source/specifications/version-specifiers.rst:657 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 "" +"En antaŭeldona, posteldona aŭ evoluada-eldona segmento kun komuna prefikso, " +"ordigado DEVAS esti laŭ la valoro de la numera komponanto." #: ../source/specifications/version-specifiers.rst:660 msgid "The following example covers many of the possible combinations::" @@ -22397,6 +26898,9 @@ msgid "" "standard version identification or ordering scheme. However metadata v1.2 (:" "pep:`345`) does specify a scheme which is defined in :pep:`386`." msgstr "" +"Metadatenoj v1.0 (:pep:`241`) and Metadatenoj v1.1 (:pep:`314`) ne specifas " +"norman skemon pri identigado kaj ordigado de versioj. Tamen Metadatenoj v1.2 " +"(:pep:`345`) ja specifas skemon difinitan en :pep:`386`." #: ../source/specifications/version-specifiers.rst:691 msgid "" @@ -22408,6 +26912,12 @@ msgid "" "requirements necessitate a standardization across one parsing mechanism to " "be used for all versions of a project." msgstr "" +"Pro la naturo de la simpla instalila API, instalilo ne povas scii la " +"metadatenan version uzatan de iu distribuo. Plie instalilo postulas la " +"kapablon krei sufiĉe prioritatigitan liston inkluzivantan ĉiom, aŭ tiom " +"multe kiom eblas, da versioj de projekto, por determini la instalotan " +"version. Tiaj postuloj necesigas normigadon al unu sintaksanaliza meĥanismo " +"uzenda por ĉiuj versioj de projekto." #: ../source/specifications/version-specifiers.rst:699 msgid "" @@ -22439,6 +26949,10 @@ msgid "" "the metadata while the translated public version is published in the version " "field." msgstr "" +"Kelkaj projektoj povas uzi versio-skemon, kiu postulas tradukadon por " +"observi la publikan versio-skemon difinitan en ĉi tiu specifo. Tiakaze, la " +"projekto-specifa versio povas esti konservita en la metadatenoj, dum la " +"tradukita publika versio estas en la versia kampo." #: ../source/specifications/version-specifiers.rst:717 msgid "" @@ -22446,6 +26960,8 @@ msgid "" "ordering of published releases, while still allowing developers to use the " "internal versioning scheme they prefer for their projects." msgstr "" +"Tiu permesas al aŭtomata distribuilo ĝuste ordigi eldonojn dum aŭtoroj povas " +"uzi sian preferatan versian skemon por siaj projektoj." #: ../source/specifications/version-specifiers.rst:725 msgid "" @@ -22457,6 +26973,11 @@ msgid "" "on other distributions, and when publishing a distribution that others rely " "on." msgstr "" +"`Semantika versiado `_ estas populara versio-identiga " +"skemo pli preskriba ol ĉi tiu specifo pri la signifo de elementoj de versia " +"numero. Eĉ se projekto elektas ne obei la detalojn de semantika versiado, " +"indas kompreni ĝin, ĉar ĝi diskutas multajn problemojn pri dependado de " +"aliaj distribuoj kaj pri eldonado de distribuo, de kiu aliaj dependas." #: ../source/specifications/version-specifiers.rst:732 msgid "" @@ -22465,6 +26986,10 @@ msgid "" "specification) are fully compatible with the version scheme defined in this " "specification, and abiding by these aspects is encouraged." msgstr "" +"La aspekto «Maĵora.Minora.Flika» (en ĉi tiu normo, «maĵora.minora.mikroa») " +"de semantika versiado (paragrafoj 1–8 de la versio 2.0.0 de la normo) plene " +"kongruas kun la versia skemo en ĉi tiu specifo, kaj ni rekomendas observi " +"tian aspekton." #: ../source/specifications/version-specifiers.rst:737 msgid "" @@ -22472,6 +26997,9 @@ msgid "" "sign (builds - clause 11) are *not* compatible with this specification and " "are not permitted in the public version field." msgstr "" +"Semantika versio enhavanta streketon (antaŭeldonoj – paragrafo 10) aŭ " +"plusosigno (konstruoj – paragrafo 11) *ne* observas ĉi tiun specifon kaj " +"estas malpermesata en la publika versia kampo." #: ../source/specifications/version-specifiers.rst:741 msgid "" @@ -22479,6 +27007,9 @@ msgid "" "labels to compatible public versions is to use the ``.devN`` suffix to " "specify the appropriate version order." msgstr "" +"Unu meĥanismo por traduki tian semantikversio-bazan fonto-etikedon al " +"kongrua publika versio estas uzi la sufikson ``.devN`` por specifi la taŭgan " +"versian ordon." #: ../source/specifications/version-specifiers.rst:745 msgid "" @@ -22505,6 +27036,9 @@ msgid "" "uniquely identify such releases for publication, while the original DVCS " "based label can be stored in the project metadata." msgstr "" +"Same kiel semantika versio, la publika sufikso ``.devN`` malambigue " +"identigas tiajn eldonojn publike, dum la originala versikontrolsistema " +"etikedo povas esti unu el la projektaj metadatenoj." #: ../source/specifications/version-specifiers.rst:762 msgid "" @@ -22522,6 +27056,9 @@ msgid "" "Olson timezone database versioning scheme: the year followed by a lowercase " "character indicating the version of the database within that year." msgstr "" +"La projekto ``pytz`` heredas sian versian skemon el la versia skemo de la " +"horzono-datenbanko Olson: la jaron, sekvitan de minuskla litero de la versio " +"de la datenbanko en tiu jaro." #: ../source/specifications/version-specifiers.rst:772 msgid "" @@ -22530,6 +27067,9 @@ msgid "" "release) and is incremented with each subsequent database update within the " "year." msgstr "" +"Tiu estas tradukebla al valida publika versio-identigilo kiel ``." +"``, en kiu la numero komenciĝas ĉe nulo aŭ unuo (por la eldono " +"``a``) kaj alkrementiĝas por ĉiu sekva datenbanka ĝisdatigo en la jaro." #: ../source/specifications/version-specifiers.rst:777 msgid "" @@ -22585,6 +27125,9 @@ msgid "" "version must match all given version clauses in order to match the specifier " "as a whole." msgstr "" +"La komo («,») ekvivalentas al logika **kaj**-operatoro: kandidata versio " +"devas kongrui kun ĉiuj donitaj versio-kondiĉoj por kongrui kun la tuta " +"specifilo." #: ../source/specifications/version-specifiers.rst:802 msgid "" @@ -22609,6 +27152,9 @@ msgid "" "permitted in version specifiers, and local version labels MUST be ignored " "entirely when checking if candidate versions match a given version specifier." msgstr "" +"Krom la specife notitaj esceptoj ĉi-subaj, loka versia identigilo DEVAS NE " +"esti uzata en versio-specifilo, kaj oni DEVAS plene ignori lokan versian " +"etikedon dum kontrolado ĉu kandidata versio kongruas kun iu versio-specifilo." #: ../source/specifications/version-specifiers.rst:820 msgid "Compatible release" @@ -22620,6 +27166,9 @@ msgid "" "``~=`` and a version identifier. It matches any candidate version that is " "expected to be compatible with the specified version." msgstr "" +"Kondiĉo de kongrua eldono konsistas el la operatoro de kongrua eldono ``~=`` " +"kaj versio-identigilo. Ĝi kongruas kun kandidata versio atendate kongrua kun " +"la specifita versio." #: ../source/specifications/version-specifiers.rst:826 msgid "" @@ -22627,6 +27176,9 @@ msgid "" "`Version scheme`_. Local version identifiers are NOT permitted in this " "version specifier." msgstr "" +"La specifita versio-identigilo devas esti en la norma formo laŭ `Versia " +"skemo `_. Loka versio-identigilo estas MALPERMESATA en ĉi " +"tiu versio-specifilo." #: ../source/specifications/version-specifiers.rst:830 msgid "" @@ -22654,6 +27206,9 @@ msgid "" "compatible release clause as ``V.N.suffix``, then the suffix is ignored when " "determining the required prefix match::" msgstr "" +"Se antaŭeldono, posteldono aŭ evoluada eldono estas nomita en kondiĉo de " +"kongrua eldono kiel ``V.N.sufikso``, do la sufikso estas ignorita dum " +"determinado de la postulata prefiksa kongrueco::" #: ../source/specifications/version-specifiers.rst:856 msgid "" @@ -22661,6 +27216,9 @@ msgid "" "degree of forward compatibility in a compatible release clause can be " "controlled by appending additional zeros to the version specifier::" msgstr "" +"La reguloj pri metado de nuloj por komparado de eldono-segmento signifas, ke " +"la supozata grado de kongrueco en kondiĉo pri kongruaj eldonoj estas " +"modifebla per nuloj ĉe la komenco de la versio-specifilo::" #: ../source/specifications/version-specifiers.rst:868 msgid "Version matching" @@ -22680,6 +27238,9 @@ msgid "" "`Version scheme`_, but a trailing ``.*`` is permitted on public version " "identifiers as described below." msgstr "" +"La specifita versio-identigilo devas observi la norman formon priskribitan " +"en `Versia skemo `_, sed sufiksa ``.*`` estas permesata post " +"publika versio-identigilo jene." #: ../source/specifications/version-specifiers.rst:877 msgid "" @@ -22723,6 +27284,9 @@ msgid "" "have an implied preceding ``.``, so given the version ``1.1a1``, the " "following clauses would match or not as shown::" msgstr "" +"Pri kongrueco de prefikso, la antaŭeldono-segmento havas implicitan " +"prefiksan ``.``. Tial, pri la versio ``1.1a1``, kaj jenaj kondiĉoj kongruus " +"aŭ ne kongruus jene::" #: ../source/specifications/version-specifiers.rst:910 msgid "" @@ -22731,6 +27295,9 @@ msgid "" "identifiers). Given the version ``1.1``, the following clauses would match " "or not as shown::" msgstr "" +"Ekzakta kongrueco implicas prefiksan kongruecon (tia interpreto estas " +"konsekvenco de la nulo-antaŭmeta regulo pri la eldonsegmento de versio-" +"identigilo). Pri la versio ``1.1``, la jenaj kondiĉoj kongruus aŭ ne jene::" #: ../source/specifications/version-specifiers.rst:922 msgid "" @@ -22757,6 +27324,9 @@ msgid "" "version label), then the local version label of any candidate versions MUST " "be ignored when matching versions." msgstr "" +"Se la specifita versio-identigilo estas publika versio-identigilo (sen loka " +"versio-etikedo), do la loka versio-etikedo de iu ajn kandidata versio DEVAS " +"ignoriĝi dum komputado de kongrueco inter versioj." #: ../source/specifications/version-specifiers.rst:939 msgid "" @@ -22785,6 +27355,9 @@ msgid "" "those of the `Version matching`_ operator, except that the sense of any " "match is inverted." msgstr "" +"La permesataj versio-identigiloj kaj la semantiko de komparado estas sama " +"kiel tiuj de la operatoro de `Versia egaleco `_, krom ke " +"la senco de kongrueco estas mala." #: ../source/specifications/version-specifiers.rst:965 msgid "Inclusive ordered comparison" @@ -22809,6 +27382,9 @@ 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 "" +"Same kiel kongrueco de versioj, la eldonsegmento estas antaŭita de tiom da " +"nuloj, kiom necesas por certigi, ke la eldonsegmentoj kompariĝas je la sama " +"longo." #: ../source/specifications/version-specifiers.rst:978 #: ../source/specifications/version-specifiers.rst:1008 @@ -22887,6 +27463,9 @@ msgid "" "a project such as ``===1.0`` which would not match for a version " "``1.0+downstream1``." msgstr "" +"Tiu operator ankaŭ povas esti uzata por eksplicite postuli senflikan version " +"de projekto, kiel ``===1.0```, kiu ne kongruus kun versio " +"``1.0+downstream1``." #: ../source/specifications/version-specifiers.rst:1031 msgid "" @@ -22954,6 +27533,9 @@ msgid "" "warning if a pre-release is already installed locally, or if a pre-release " "is the only way to satisfy a particular specifier)" msgstr "" +"ekskluzivante antaŭeldonojn por ĉiuj versio-specifiloj (raportante eraron aŭ " +"averton, se antaŭeldono jam estas instalita loke, aŭ se antaŭeldono estas la " +"nura maniero plenumi iun specifilon)" #: ../source/specifications/version-specifiers.rst:1061 msgid "" @@ -23020,6 +27602,9 @@ msgid "" "alternative to a normal version specifier. A direct reference consists of " "the specifier ``@`` and an explicit URL." msgstr "" +"Kelkaj aŭtomataj iloj permesas rektan referencon anstataŭ ordinara versio-" +"specifilo. Rekta referenco konsistas el la specifilo ``@`` kaj eksplicita " +"retadreso." #: ../source/specifications/version-specifiers.rst:1089 msgid "" @@ -23028,6 +27613,9 @@ msgid "" "warnings and MAY reject them entirely when direct references are used " "inappropriately." msgstr "" +"Ĉu aŭ ne rekta referenco taŭgas, dependas de la specifa uzkazo de la versio-" +"specifilo. Aŭtomata ilo almenaŭ AVERTU pri tio kaj POVAS malakcepti tion, " +"kiam rekta referenco estis uzita maltaŭge." #: ../source/specifications/version-specifiers.rst:1094 msgid "" @@ -23035,6 +27623,9 @@ msgid "" "uploaded distributions. Direct references are intended as a tool for " "software integrators rather than publishers." msgstr "" +"Servilo de publika indekso NE PERMESU rektan referencon en alŝutita " +"distribuo. Rekta referenco estas por integriloj de programoj, ne por " +"eldonantoj." #: ../source/specifications/version-specifiers.rst:1098 msgid "" @@ -23042,6 +27633,9 @@ msgid "" "reference may be an sdist or a wheel binary archive. The exact URLs and " "targets supported will be tool dependent." msgstr "" +"Depende de la uzkazo, rekta retadresa referenco povas montri fontan " +"distribuon aŭ duuman arĥivon wheel. La permesataj formoj de subtenataj " +"retadresoj kaj celoj dpeendas de la ilo." #: ../source/specifications/version-specifiers.rst:1102 msgid "For example, a local source archive may be referenced directly::" @@ -23062,6 +27656,13 @@ msgid "" "and MAY refuse to rely on the URL. If such a direct reference also uses an " "insecure transport, automated tools SHOULD NOT rely on the URL." msgstr "" +"Ĉiu rekta referenco ne al loka dosiera URL SPECIFU sekuran transportan " +"meĥanismon (kiel ekzemple ``https``) KAJ inkluzivu atendatan haketaĵan " +"valoron en la URL por konfirmado. Se rekta referenco specifiĝas sen informoj " +"pri haketaĵo, aŭ kun haketaĵa informo ne komprenebla de la ilo, aŭ kun " +"haketaĵa algoritmo konsiderata tro malforta far la ilo, aŭtomata ilo " +"minimume AVERTU kaj POVAS rifuzi dependi de la URL. Se rekta referenco ankaŭ " +"uzas nesekuran transporton, aŭtomata ilo NE DEPENDU de la URL." #: ../source/specifications/version-specifiers.rst:1119 msgid "" @@ -23071,6 +27672,10 @@ msgid "" "``'md5'``, ``'sha1'``, ``'sha224'``, ``'sha256'``, ``'sha384'``, and " "``'sha512'``." msgstr "" +"Por fontarĥiva haketaĵo, estas REKOMENDATE nur uzi haketaĵojn senkondiĉe " +"disponigeblajn en la plej nova versio de la modulo :py:mod:`hashlib` en la " +"norma biblioteko. Aktuale, tiaj haketaĵoj estas ``'md5'``, ``'sha1'``, " +"``'sha224'``, ``'sha256'``, ``'sha384'`` kaj ``'sha512'``." #: ../source/specifications/version-specifiers.rst:1125 msgid "" @@ -23078,6 +27683,9 @@ msgid "" "specified by including a ``=`` entry as part " "of the URL fragment." msgstr "" +"Por referencoj al fonta arĥivo aŭ wheel, oni povas specifi atendatan " +"haketaĵan valoron inkluzivante eron ``=`` kiel parton de la URL-fragmento." #: ../source/specifications/version-specifiers.rst:1129 msgid "" @@ -23095,6 +27703,10 @@ msgid "" "end of the URL using the ``@`` or the ``@#`` " "notation." msgstr "" +"Por versikontrola sistemo ne ebliganta inkluzivi referencon al enmeto aŭ " +"etikedo rekte en la retadreson, oni povas postmeti tiajn informojn ĉe la " +"fino de la retadreso laŭ la notacio ``@`` aŭ " +"``@#``." #: ../source/specifications/version-specifiers.rst:1142 msgid "" @@ -23106,6 +27718,12 @@ msgid "" "a malicious repo with a particular tag is easy, creating one with a specific " "*hash*, less so)." msgstr "" +"Tio ne estas *ekzakte* sama kiel la ekzistanta versikontrolsistemo-referenca " +"notacio de pip. Unue, la distribuonomo estas movita antaŭen, ne integrita " +"kiel parto de la retadreso. Due, la haketaĵo de la enmeto estas inkluzivita " +"eĉ dum prenado per etikedo, por plenumi la postulon, ke *ĉiu* hiperligo " +"inkluzivu haketaĵon por malhelpi falsadon (estas facile krei fideponejon kun " +"iu deponejo; estas malpli facile krei fideponejon kun specifa *haketaĵo*)." #: ../source/specifications/version-specifiers.rst:1150 msgid "Remote URL examples::" @@ -23169,6 +27787,9 @@ msgid "" "the time :pep:`440` was written. After the PEP was accepted, setuptools 6.0 " "and later versions adopted the behaviour described here." msgstr "" +"Notu: tiu komparo estis al ``pkg_resources.parse_version``, kiam :pep:`440` " +"estis verkita. Post la aprobo de la PEP, setuptools 6.0 kaj postaj versioj " +"adoptis la konduton priskribitan ĉi tie." #: ../source/specifications/version-specifiers.rst:1187 msgid "" @@ -23176,6 +27797,9 @@ msgid "" "as greater than the same version without a local version, whereas " "``pkg_resources.parse_version`` considers it a pre-release marker." msgstr "" +"Loka versio estas ordigita alimaniere. Ĉi tiu specifo postulas, ke loka " +"versio estu pli granda ol la sama versio sen loka versio, dum " +"``pkg_resources.parse_version`` konsideras ĝin kiel markon de antaŭeldono." #: ../source/specifications/version-specifiers.rst:1191 msgid "" @@ -23183,6 +27807,8 @@ msgid "" "version while ``pkg_resources.parse_version`` attempts to provide some " "meaning from *any* arbitrary string." msgstr "" +"Ĉiu tiu specifo intence restriktas la sintakson de valida versio, dum " +"``pkg_resources.parse_version`` provas analizi *iun ajn* signoĉenon." #: ../source/specifications/version-specifiers.rst:1195 msgid "" @@ -23190,6 +27816,9 @@ msgid "" "signifiers like ``1.0.dev1.post1.dev5``. This specification however allows " "only a single use of each type and they must exist in a certain order." msgstr "" +"``pkg_resources.parse_version`` permesas iom ajn da versio-signifiloj kiel " +"``1.0.dev1.post1.dev5``. Ĉi tiu specifo, tamen, nur permesas nur unu uzon de " +"ĉiu tipo, en difinita ordo." #: ../source/specifications/version-specifiers.rst:1204 msgid "Appendix: Parsing version strings with regular expressions" @@ -23241,6 +27870,13 @@ msgid "" "environments existed prior to this update, there was no previously " "standardised mechanism for declaring or discovering them." msgstr "" +"Por Python 3.3 kaj postaj versioj, :pep:`405` enkondukis interpretilo-" +"nivelan subtenon por la koncepto de «Virtuala Python-Medio». Ĉiu virtuala " +"medio havas sian propran Python-duumaĵon (ebligante kreadon de medioj kun " +"diversaj Python-versioj) kaj sian propran sendependan aron de instalitaj " +"Python-pakoj, sed komune kunhavas la norman bibliotekon kun la baza " +"instalita Python. Dum la koncepto de virtuala medio ekzistis antaŭ tiu " +"ĝisdatigo, mankis normigita meĥanismo por deklari aŭ malkovri ĝin." #: ../source/specifications/virtual-environments.rst:18 msgid "Runtime detection of virtual environments" @@ -23253,6 +27889,10 @@ msgid "" "different value from :py:data:`sys.base_prefix` (the default filesystem " "location of the standard library directories)." msgstr "" +"Rultempe oni povas detekti virtualan medion kontrolante, ĉu :py:data:`sys." +"prefix` (la dosiersistema loko de la rulata interpretilo) diferencas de :py:" +"data:`sys.base_prefix` (la apriora dosiersistema loko de la normaj " +"bibliotekoj)." #: ../source/specifications/virtual-environments.rst:25 msgid "" @@ -23263,6 +27903,11 @@ msgid "" "be reliably used to detect whether a Python program is running in a virtual " "environment or not)." msgstr "" +":ref:`venv-explanation` en la dokumentaro de la norma biblioteko de Python " +"pri :py:mod:`venv` diskutas tion, kune kun la koncepto de «aktivigo» de " +"virtuala medio en interaga mastrusistema ŝelo (tiu paŝo ne estas deviga, kaj " +"tial oni ne povas dependi de la ŝanĝoj pri aktivigo por detekti, ĉu programo " +"ruliĝas en virtuala medio)." #: ../source/specifications/virtual-environments.rst:33 msgid "Declaring installation environments as Python virtual environments" @@ -23276,6 +27921,10 @@ msgid "" "a ``home`` key that indicates where to find the Python standard library " "modules." msgstr "" +"Laŭ :pep:`405`, la plej simpla formo de virtuala Python-medio konsistas nur " +"el kopio aŭ simbola ligilo de Python-interpretilo kun dosierujo ``site-" +"packages`` kaj dosiero ``pyvenv.cfg`` kun ŝlosilo ``home`` pri la lokoj de " +"la moduloj de la norma biblioteko de Python." #: ../source/specifications/virtual-environments.rst:40 msgid "" @@ -23310,6 +27959,9 @@ msgid "" "use the normalization rules and well-known list below to make their " "presentation of project URLs consistent across the Python ecosystem." msgstr "" +"Ĉi tiu dokumento estas ĉefe por *konsumanto* de metadatenoj, kiu uzu la " +"regulojn pri normigado kaj liston de bone konataj etikedoj ĉi-subajn por " +"prezenti projektajn retadresojn unuforme tra la ekosistemo de Python." #: ../source/specifications/well-known-project-urls.rst:14 msgid "" @@ -23342,6 +27994,11 @@ msgid "" "semantics assigned to ``Home-page``, ``Download-URL``, or other common " "project URLs." msgstr "" +":pep:`753` evitindigas la metadatenajn kampojn :ref:`core-metadata-home-" +"page` kaj :ref:`core-metadata-download-url` (kiujn :ref:`core-metadata-" +"project-url` anstataŭas), kaj difinas normigan kaj serĉan procedon por " +"kontroli, ĉu ``Project-URL`` estas «bone konata», t.e. asignita al ``Home-" +"page``, ``Download-URL``, aŭ alia ofta projekta retadreso." #: ../source/specifications/well-known-project-urls.rst:35 msgid "" @@ -23369,6 +28026,9 @@ msgid "" "consumers should normalize the label before comparing it to the :ref:`list " "of well-known labels `." msgstr "" +"Por determini ĉu etikedo ``Project-URL`` estas «bone konata», uzanto de " +"metadatenoj normigo la etikedon antaŭ ol kompari al la :ref:`listo de bone " +"konataj etikedoj `." #: ../source/specifications/well-known-project-urls.rst:53 msgid "" @@ -23564,6 +28224,8 @@ msgid "" "Package metadata consumers may choose to render aliased labels the same as " "their \"parent\" well known label, or further specialize them." msgstr "" +"Uzanto de pakaj metadatenoj povas montri sinonimajn etikedojn same kiel la " +"«gepatran» bone konatan etikedon aŭ pli speciale." #: ../source/specifications/well-known-project-urls.rst:137 msgid "Example behavior" @@ -23596,6 +28258,10 @@ msgid "" "*consumer* normalizes and identifies appropriate human-readable equivalents " "based on the normalized form:" msgstr "" +"Notu, ke la kernaj metadatenoj aperas en la formo provizita de la uzanto (la " +"*produktanto* de metadatenoj ne normigas), sed la *konsumanto* de " +"metadatenoj normigas kaj identigas taŭgajn home legeblajn ekvivalentaĵojn " +"laŭ la normigitaj formoj:" #: ../source/specifications/well-known-project-urls.rst:172 msgid "``Home page`` becomes ``homepage``, which is rendered as ``Homepage``" @@ -23747,6 +28413,10 @@ msgid "" "the Python for Beginners `getting started tutorial`_ for an introduction to " "using your operating system's shell and interacting with Python." msgstr "" +"Tio estas ĉar tiu komando kaj aliaj sugestataj komandoj en ĉi tiu lernilo " +"estu rulata en *ŝelo* (ankaŭ konata kiel *terminalo* aŭ *konzolo*). Vidu " +"`tiun lernilon `_ por enkonduko pri uzado de la " +"ŝelo de via mastruma sistemo kaj interagado kun Python." #: ../source/tutorials/installing-packages.rst:68 msgid "" @@ -23754,6 +28424,8 @@ msgid "" "can run system commands like those in this tutorial by prefacing them with a " "``!`` character:" msgstr "" +"Se oni uzas pliigitan ŝelon kiel IPython aŭ Jupyter-notlibron, oni povas " +"ruli sistemajn komandojn kiel tiujn en ĉi tiu lernilo per prefikso ``!``:" #: ../source/tutorials/installing-packages.rst:78 msgid "" @@ -23762,6 +28434,10 @@ msgid "" "the currently running notebook (which may not be the same Python " "installation that the ``python`` command refers to)." msgstr "" +"Ni rekomendas skribi ``{sys.Executable}`` prefere ol ``python`` por certigi, " +"ke komandoj ruliĝas en la Python-instalo kongrua kun la aktuale rulata " +"notlibro (kiu povas esti ne sama kiel la instalo de Python identigita de la " +"komando ``python``)." #: ../source/tutorials/installing-packages.rst:83 msgid "" @@ -23773,6 +28449,13 @@ msgid "" "you get a permissions error, come back to the section on creating virtual " "environments, set one up, and then continue with the tutorial as written." msgstr "" +"Pro la maniero, kiel multaj Linux-distribuoj pritraktas la migradon al " +"Python 3, uzanto de Linux uzanta la sisteman Python-on sen virtuala medio " +"unue devas anstataŭigi la komandon ``python`` en ĉi tiu lernilo per " +"``python3`` kaj la komandon ``python -m pip`` per ``python3 -m pip --user``. " +"*Ne* rulu ajnan komandon en ĉi tiu lernilo kun ``sudo``: se vi ricevas " +"eraron pri permesoj, reiru al la paragrafo pri kreado de virtuala medio, " +"kreu virtualan medion, kaj daŭru sekvante la lernilon laŭvorte." #: ../source/tutorials/installing-packages.rst:95 msgid "Ensure you can run pip from the command line" @@ -23844,6 +28527,9 @@ msgid "" "up to date copies of the ``setuptools`` and ``wheel`` projects are useful to " "ensure you can also install from source archives:" msgstr "" +"Dum ``pip`` sole sufiĉas por instali el antaŭkonstruita duuma arĥivo, " +"ĝisdataj kopioj de la projektoj ``setuptools`` kaj ``wheel`` utilas por " +"instali el fonta arĥivo:" #: ../source/tutorials/installing-packages.rst:173 msgid "Optionally, create a virtual environment" @@ -23855,6 +28541,9 @@ msgid "" "details, but here's the basic :doc:`venv ` [3]_ command " "to use on a typical Linux system:" msgstr "" +"Vidu :ref:`la ĉi-suban paragrafon ` " +"por detaloj, sed jen la baza komando de :doc:`venv ` " +"[3]_ por tipa Linux-sistemo:" #: ../source/tutorials/installing-packages.rst:192 msgid "" @@ -23877,6 +28566,10 @@ msgid "" "safely install global command line tools, see :doc:`/guides/installing-stand-" "alone-command-line-tools`." msgstr "" +"«Virtuala Medio» de Python permesas instaladon de :term:`Python-pako " +"` en izolita loko por iu programo, ne instalita " +"malloke. Se vi volas sekure instali komandlinian ilon, vidu :doc:`/guides/" +"installing-stand-alone-command-line-tools`." #: ../source/tutorials/installing-packages.rst:207 msgid "" @@ -23897,6 +28590,9 @@ msgid "" "be? If an application works, any change in its libraries or the versions of " "those libraries can break the application." msgstr "" +"Aŭ pli ĝenerale, kio se oni volas instali programon kaj ne ŝanĝi ĝin? Se " +"programo funkcias, ajna ŝanĝo de ĝiaj bibliotekoj aŭ de la bibliotekaj " +"versioj povas misfunkciigi la programon." #: ../source/tutorials/installing-packages.rst:217 msgid "" @@ -23913,6 +28609,9 @@ msgid "" "installation directories and they don’t share libraries with other virtual " "environments." msgstr "" +"En tiuj kazoj, virtuala medio povas helpi vin. Ĝi havas sian propran " +"instalan dosierujon kaj ne havas bibliotekon komunan kun aliaj virtualaj " +"medioj." #: ../source/tutorials/installing-packages.rst:224 msgid "" @@ -23990,6 +28689,10 @@ msgid "" "higher level tool, :ref:`Pipenv`, that automatically manages a separate " "virtual environment for each project and application that you work on." msgstr "" +"Rekta administrado de multaj virtualaj medioj tedas, kaj la :ref:`lernilo " +"pri administrado de dependecoj ` enkondukas " +"plialtnivelan ilon :ref:`Pipenv`, kiu aŭtomate administras po unu aparta " +"virtuala medio por ĉiu projekto aŭ programo evoluigata de vi." #: ../source/tutorials/installing-packages.rst:293 msgid "Use pip for Installing" @@ -24019,6 +28722,12 @@ msgid "" "supported specifiers can be found in the :ref:`Version specifier " "specification `. Below are some examples." msgstr "" +"La plej ofta uzmaniero de :ref:`pip` estas instalado el :term:`la Python-" +"Pakindekso ` per :term:`postulo-specifilo " +"`. Ĝenerale, postulo-specifilo konsistas el projekta " +"nomo sekvita de nedeviga :term:`versio-specifilo `. " +"Plena priskribo de la permesataj specifiloj troviĝas en la :ref:`Normo pri " +"versio-specifiloj `. Jen kelkaj ekzemploj." #: ../source/tutorials/installing-packages.rst:311 msgid "To install the latest version of \"SomeProject\":" @@ -24074,6 +28783,10 @@ msgid "" "Distributions (sdist) `, especially when " "a project contains compiled extensions." msgstr "" +":term:`Wheel ` estas antaŭkonstruita :term:`distribua ` formo pli rapide instalebla ol :term:`Fonta Distribuo (sdist) " +"`, speciale por projekto enhavanta " +"tradukitan etendaĵon." #: ../source/tutorials/installing-packages.rst:387 msgid "" @@ -24081,6 +28794,8 @@ msgid "" "wheel and cache it for future installs, instead of rebuilding the source " "distribution in the future." msgstr "" +"Se :ref:`pip` ne trovas instalotan wheel, ĝi loke konstruos wheel kaj " +"enkaŝmemorigi ĝin por estonteco anstataŭ rekonstruado de la fonta distribuo." #: ../source/tutorials/installing-packages.rst:395 msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." @@ -24151,13 +28866,21 @@ msgid "" "user ``PATH`` permanently in the `Control Panel`_. You may need to log out " "for the ``PATH`` changes to take effect." msgstr "" +"Sur Windows, oni povas trovi la bazan duumaĵan dosierujon de uzanto rulante " +"``py -m site --user-site`` kaj anstataŭigante ``site-packages`` per " +"``Scripts``. Ekzemple, la komando povus eligi ``C:" +"\\Users\\Salutnomo\\AppData\\Roaming\\Python36\\site-packages``, kaj oni " +"agordus sian ``PATH`` inkluzivante ``C:" +"\\Users\\Salutnomo\\AppData\\Roaming\\Python36\\Scripts``. Oni povas agordi " +"sian ``PATH`` malprovizore en la `Stirpanelo `_. Oni eble " +"devas adiaŭi por efektivigi la ŝanĝojn pri ``PATH``." #: ../source/tutorials/installing-packages.rst:466 msgid "" "Install a list of requirements specified in a :ref:`Requirements File `." msgstr "" -"Instali liston de postuloj en :ref:`Postulo-Dosiero < pip:Requirements " +"Instali liston de postuloj en :ref:`Postulo-Dosiero `." #: ../source/tutorials/installing-packages.rst:482 @@ -24199,6 +28922,9 @@ msgid "" "development_mode>`, i.e. in such a way that the project appears to be " "installed, but yet is still editable from the src tree." msgstr "" +"Instali el loka fontarbo en :doc:`evoluada reĝimo `, tiel ke la projekto estas instalita sed tamen modifebla " +"ĉe la fontarbo." #: ../source/tutorials/installing-packages.rst:558 msgid "You can also install normally from src" @@ -24303,6 +29029,9 @@ msgid "" "up development environments automatically for projects with multiple " "contributors." msgstr "" +"Tamen, interage ruli tiajn komandojn estas tede, eĉ por onia propra " +"projekto, kaj eĉ pli malfacile estas starigi disvolvajn mediojn aŭtomate por " +"projektoj kun multaj kontribuantoj." #: ../source/tutorials/managing-dependencies.rst:13 msgid "" @@ -24310,6 +29039,9 @@ msgid "" "dependencies for an application. It will show you how to install and use the " "necessary tools and make strong recommendations on best practices." msgstr "" +"Ĉi tiu lernilo priskribas kiel uzi :ref:`Pipenv` por administri dependecojn " +"de programo. Ĝi klarigas kiel instali kaj uzi la necesajn ilojn, kaj " +"rekomendegas bonajn elektojn." #: ../source/tutorials/managing-dependencies.rst:17 msgid "" @@ -24320,6 +29052,11 @@ msgid "" "(including web applications), but is also very well suited to managing " "development and testing environments for any kind of project." msgstr "" +"Python estas uzata por multaj diversaj celoj, kaj ĝuste kiel oni administras " +"dependecojn dependas de la maniero de eldonado de la programo. La konsilo ĉi " +"tie plej taŭgas por programado kaj disponigado de retservoj (inkluzive de " +"TTT-programoj), sed ankaŭ estas bona por mastrumi programadajn kaj testajn " +"mediojn de ĉia projekto." #: ../source/tutorials/managing-dependencies.rst:24 msgid "" @@ -24340,6 +29077,11 @@ msgid "" "Pipenv is recommended for collaborative projects as it's a higher-level tool " "that simplifies dependency management for common use cases." msgstr "" +":ref:`Pipenv` estas dependeco-administrilo por Python-projekto. Se vi konas " +"`npm`_ de Node.js aŭ `bundler`_ de Ruby, ĝi estas simila en spirito al tiuj " +"iloj. Dum :ref:`pip` sola ofte sufiĉas por persona uzado, Pipenv estas " +"rekomendata por kunlabora projekto, ĉar ĝi estas altnivela ilo simpliganta " +"administradon de dependecoj por oftaj uzkazoj." #: ../source/tutorials/managing-dependencies.rst:35 msgid "Use ``pip`` to install Pipenv:" @@ -24408,9 +29150,12 @@ msgid "" "your script. It's also possible to spawn a new shell that ensures all " "commands have access to your installed packages with ``pipenv shell``." msgstr "" +"Uzo de ``pipenv run`` certigas, ke via programo povas atingi viajn " +"instalitajn pakojn. Ankaŭ vi povas lanĉi novan ŝelon per ``pipenv " +"shell``certigante, ke viaj komandoj povas atingi viajn instalitajn pakojn." #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "Sekvaj paŝoj" @@ -24438,6 +29183,10 @@ msgid "" "environment with ``pipenv install -e `` " "(e.g. ``pipenv install -e .`` or ``pipenv install -e src``)." msgstr "" +"Nodu, ke se via programo inkluzivas difinojn de Python-fontpakojn, oni povas " +"aldoni ilin (kaj iliajn dependaĵojn) al la medio ``pipenv`` per ``pipenv " +"install -e `` (ekz. ``pipinstall -e " +".`` aŭ ``pipenv install -e src``)." #: ../source/tutorials/managing-dependencies.rst:157 msgid "Other Tools for Application Dependency Management" @@ -24457,6 +29206,9 @@ msgid "" "more steps in the project management workflow, such as incrementing versions " "and creating new skeleton projects from project templates." msgstr "" +"`hatch `_ por opiniriĉa subtenado de eĉ pli " +"da paŝoj en la projekta mastruma laborluo, kiel alkrementado de versio kaj " +"kreado de nova projekto el projekto-ŝablono." #: ../source/tutorials/managing-dependencies.rst:166 msgid "" @@ -24465,6 +29217,10 @@ msgid "" "and Poetry lock files, or converting them to pip-tools compatible output. " "Designed for containerized Python applications, but not limited to them." msgstr "" +"`micropipenv `_ por leĝera " +"volvilo ĉirkaŭ pip subtenanta ``requirements.txt``, Pipenv- kaj Poetry-" +"serurdosieroj, kaj konvertado al formo kongrua kun pip-tools. Fasonita por, " +"sed ne nur por, enujigita Python-programo." #: ../source/tutorials/managing-dependencies.rst:170 msgid "" @@ -24510,6 +29266,9 @@ msgid "" "package, how to build the package, and how to upload it to the Python " "Package Index (PyPI)." msgstr "" +"Jen lernilo pri kiel paki simplan Python-projekton. Ĝi klarigas kiel aldoni " +"la necesajn dosierojn kaj strukturon por krei la pakon, kiel konstrui la " +"pakon, kaj kiel alŝuti ĝin al la Python-Pakindekso ( PyPI)." #: ../source/tutorials/packaging-projects.rst:10 msgid "" @@ -24517,6 +29276,9 @@ msgid "" "command and its output, then `open an issue`_ on the `packaging-problems`_ " "repository on GitHub. We'll do our best to help you!" msgstr "" +"Se vi spertas problemon pri la komandoj en ĉi tiu lernilo, bonvolu kopii la " +"komandon kaj ĝian eligaĵon, kaj `raportu problemon `_ pri la " +"deponejo `packaging-problems`_ ĉe GitHub. Ni provos helpi vin!" #: ../source/tutorials/packaging-projects.rst:18 msgid "" @@ -24550,6 +29312,9 @@ msgid "" "This simplifies the configuration and is more obvious to users who install " "the package." msgstr "" +"La nomo de la dosierujo enhavanta la Python-dosierojn estu la nomo de la " +"projekto. Tio simpligas la agordadon kaj estas pli klara al instalantoj de " +"la pako." #: ../source/tutorials/packaging-projects.rst:57 msgid "" @@ -24656,6 +29421,10 @@ msgid "" "management, as well as building, uploading, and installing packages. This " "tutorial uses single-purpose tools that work independently." msgstr "" +"Kelkaj konstruaj malfasadoj estas parto de pli grandaj iloj, kiuj disponigas " +"komandlinian interfacon kun kromaj funkcioj kiel ekstarigo de projekto kaj " +"administrado de versioj, kune kun konstruado, alŝutado kaj instalado de " +"pakoj. Ĉi tiu lernilo uzas unucelan sendependan ilon." #: ../source/tutorials/packaging-projects.rst:134 msgid "" @@ -24664,6 +29433,10 @@ msgid "" "project. Below are some examples for common build backends, but check your " "backend's own documentation for more details." msgstr "" +"La dosiero :file:`pyproject.toml` sciigas :term:`la konstruan fasadon ` kiel :ref:`pip` kaj :ref:`build` pri la malfasado uzota por la " +"projekto. Jen kelkaj ekzemploj por oftaj konstruaj malfasadoj, sed legu la " +"dokumentaron de via malfasado por detaloj." #: ../source/tutorials/packaging-projects.rst:172 msgid "" @@ -24689,6 +29462,9 @@ msgid "" "backend, or generated by its command line interface. There should be no need " "for you to customize these settings." msgstr "" +"Ambaŭ valoroj estos disponigitaj de la dokumentaro de la konstrua malfasado " +"aŭ genereblaj per ĝia komandlinia fasado. Ne necesu, ke oni adaptu tiajn " +"agordojn." #: ../source/tutorials/packaging-projects.rst:186 msgid "" @@ -24715,7 +29491,7 @@ msgstr "" "inkluzivante vian salutnomon; tio certigas, ke via paka nomo estas unika, ne " "kolizianta kun la pakojn alŝutitajn de aliuloj sekvantaj ĉi tiun lernilon." -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -24729,7 +29505,7 @@ msgstr "" "salutnomo** por ĉi tiu lernilo; tio certigas, ke vi ne alŝutos pakon de la " "sama nomo kiel pako jam ekzistanta." -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 msgid "" "``version`` is the package version. (Some build backends allow it to be " "specified another way, such as from a file or Git tag.)" @@ -24737,7 +29513,7 @@ msgstr "" "``version`` estas la versio de la pako. (Kelkaj konstruaj malfasadoj " "permesas aliajn manierojn specifi ĝin, kiel per dosiero aŭ Git-etikedo.)" -#: ../source/tutorials/packaging-projects.rst:231 +#: ../source/tutorials/packaging-projects.rst:257 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 " @@ -24747,11 +29523,11 @@ msgstr "" "adreson por ĉiu aŭtoro. La kampo ``maintainers`` por mastrumantoj sekvas la " "saman formon." -#: ../source/tutorials/packaging-projects.rst:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "``description`` estas mallonga, unufraza resumo de la pako." -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -24760,7 +29536,7 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 msgid "" "``requires-python`` gives the versions of Python supported by your project. " "An installer like :ref:`pip` will look back through older versions of " @@ -24770,18 +29546,35 @@ msgstr "" "projekto. Instalilo kiel :ref:`pip` serĉas tra malnovaj versioj de pakoj ĝis " "kiam ĝi trovas pakan version kongruan al la versio de Python." -#: ../source/tutorials/packaging-projects.rst:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" +"``license`` estas la :term:`SPDX-esprimo ` de via pako. " +"Ankoraŭ ne subtenata de iuj konstruaj malfasadoj." + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" +"``license-files`` estas la listo de dosierloko-patroneoj al la licenco-" +"dosieroj, relativa al la dosierujo en kiu ĉeestas :file:`pyproject.toml`. " +"Ankoraŭ ne subtenata de iuj konstruaj malfasadoj." + +#: ../source/tutorials/packaging-projects.rst:281 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." @@ -24789,7 +29582,7 @@ msgstr "" "``urls`` ebligas vin listigi ajnan nombron da ekstraj hiperligoj montrotaj " "sur PyPI. Ĝenerale tiuj povas esti la fonto, dokumentaro, cimaro ktp." -#: ../source/tutorials/packaging-projects.rst:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -24797,11 +29590,11 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "Krei la dosieron README.md" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." @@ -24809,11 +29602,11 @@ msgstr "" "Malfermu :file:`README.md`, kaj tajpu la jenon. Vi povas adapti ĝin, se tio " "plaĉas al vi." -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "Krei la dosieron LICENSE" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -24821,20 +29614,26 @@ msgid "" "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 "" +"Gravas, ke ĉiu pako alŝutita al la Python-Pakindekso inkluzivu licencon. Tio " +"sciigas al uzanto instalinta pakon la kondiĉojn, sub kiuj oni povas uzi la " +"pakon. Por helpo elekti licencon, vizitu https://choosealicense.com/. Post " +"elekto de licenco, malfermu :file:`LICENSE`, kaj tajpu la licencan tekston. " +"Ekzemple, se vi elektus la MIT-licencon:" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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 "" -"Multaj konstruaj malfasadoj aŭtomate inkluzivas licencajn dosierojn en " -"pakojn. Vidu la dokumentaron de via malfasado por pli da detaloj." -#: ../source/tutorials/packaging-projects.rst:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "Inkluzivi aliajn dosierojn" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 msgid "" "The files listed above will be included automatically in your :term:`source " "distribution `. If you want to include " @@ -24844,11 +29643,11 @@ msgstr "" "`. Se vi volas inkluzivi aliajn " "dosierojn, legu la dokumentaron por via konstruilo." -#: ../source/tutorials/packaging-projects.rst:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "Generi distribuan arĥivon" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 msgid "" "The next step is to generate :term:`distribution packages ` for the package. These are archives that are uploaded to the " @@ -24858,18 +29657,18 @@ msgstr "" "por la pakoj. Tiuj estas arĥivoj alŝutotaj al Python Package Index kaj " "instaleblaj per :ref:`pip`." -#: ../source/tutorials/packaging-projects.rst:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "Certigu, ke vi instalis la plej novan version de :ref:`build` de PyPA:" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" "Se malfacilas instali tiujn, vidu la lernilon :doc:`installing-packages`." -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" @@ -24877,7 +29676,7 @@ msgstr "" "Nun rulu la jenan komandon ĉe la sama dosierujo kie troviĝas :file:" "`pyproject.toml`:" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 msgid "" "This command should output a lot of text and once completed should generate " "two files in the :file:`dist` directory:" @@ -24885,7 +29684,7 @@ msgstr "" "Tiu komando eligos multon da teksto, kaj post fino estos kreinta du " "dosierojn en la dosierujo :file:`dist`:" -#: ../source/tutorials/packaging-projects.rst:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution `, dum la dosiero ``.whl`` estas :term:`konstruita distribuo " +"`. Novaj versioj de :ref:`pip` preferas instali " +"konstruitan distribuon sed instalas fontan distribuon, se tio necesas. Oni " +"ĉiam alŝutu fontan distribuon kaj ankaŭ la konstruitajn distribuojn por " +"kongruaj platformoj. Niakaze, la ekzempla pako kongruas kun Python sur ajna " +"platformo; tial ni nur bezonas unu konstruitan distribuon." -#: ../source/tutorials/packaging-projects.rst:376 +#: ../source/tutorials/packaging-projects.rst:410 msgid "Uploading the distribution archives" msgstr "Alŝuti la distribuajn arĥivojn" -#: ../source/tutorials/packaging-projects.rst:378 +#: ../source/tutorials/packaging-projects.rst:412 msgid "Finally, it's time to upload your package to the Python Package Index!" msgstr "Finfine, vi pretas alŝuti vian pakon al Python Package Index!" -#: ../source/tutorials/packaging-projects.rst:380 +#: ../source/tutorials/packaging-projects.rst:414 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 " @@ -24915,16 +29721,26 @@ msgid "" "You will also need to verify your email address before you're able to upload " "any packages. For more details, see :doc:`/guides/using-testpypi`." msgstr "" +"Unue, vi registru vin ĉe Prova PyPI, kiu estas aparta servilo de la " +"pakindekso por testado kaj eksperimentado. Ĝi estas bonega por lerniloj, kie " +"oni ne volas alŝuti al la reala indekso. Por registri vin, vizitu https://" +"test.pypi.org/account/register/ kaj plenumu la paŝojn sur tiu paĝo. Vi ankaŭ " +"devas konfirmi vian retpoŝtan adreson antaŭ ol alŝutade pako. Por pli da " +"detaloj, vidu :doc:`/guides/using-testpypi`." -#: ../source/tutorials/packaging-projects.rst:388 +#: ../source/tutorials/packaging-projects.rst:422 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 "" +"Por sekure alŝuti vian projekton, vi bezonas `API-ĵetonon ĉe PyPI `_. Kreu ĝin ĉe https://test.pypi.org/manage/account/#api-tokens, kun " +"la «Amplekso» estanta «Tuta konto». **Ne fermu la paĝon antaŭ ol vi kopiis " +"kaj konservis la ĵetonon — vi ne povos revidi tiun ĵetonon.**" -#: ../source/tutorials/packaging-projects.rst:395 +#: ../source/tutorials/packaging-projects.rst:429 msgid "" "Now that you are registered, you can use :ref:`twine` to upload the " "distribution packages. You'll need to install Twine:" @@ -24932,12 +29748,12 @@ msgstr "" "Post registrado, vi povas uzi :ref:`twine` por alŝuti la distribuajn pakojn. " "Vi devas instali Twine:" -#: ../source/tutorials/packaging-projects.rst:410 +#: ../source/tutorials/packaging-projects.rst:444 msgid "" "Once installed, run Twine to upload all of the archives under :file:`dist`:" msgstr "Post instalo, rulu Twine por alŝuti ĉiujn arĥivojn en :file:`dist`:" -#: ../source/tutorials/packaging-projects.rst:424 +#: ../source/tutorials/packaging-projects.rst:458 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 " @@ -24947,11 +29763,11 @@ msgstr "" "prefikso ``pypi-``. Notu, ke la enigaĵo estos kaŝita; tial certigu, ke vi " "algluos ĝuste." -#: ../source/tutorials/packaging-projects.rst:427 +#: ../source/tutorials/packaging-projects.rst:461 msgid "After the command completes, you should see output similar to this:" msgstr "Post la fino de la komando, vi vidos eligaĵon similan al la jeno:" -#: ../source/tutorials/packaging-projects.rst:438 +#: ../source/tutorials/packaging-projects.rst:472 msgid "" "Once uploaded, your package should be viewable on TestPyPI; for example: " "``https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE``." @@ -24959,11 +29775,11 @@ msgstr "" "Post alŝuto, via pako estos videbla ĉe TestPyPI; ekzemple: ``https://test." "pypi.org/project/example_package_VIA_SALUTNOMO_ĈI_TIE``." -#: ../source/tutorials/packaging-projects.rst:443 +#: ../source/tutorials/packaging-projects.rst:477 msgid "Installing your newly uploaded package" msgstr "Instali vian nove alŝutitan pakon" -#: ../source/tutorials/packaging-projects.rst:445 +#: ../source/tutorials/packaging-projects.rst:479 msgid "" "You can use :ref:`pip` to install your package and verify that it works. " "Create a :ref:`virtual environment `, kaj " "instalu vian pakon el TestPyPI:" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "Certigu, ke vi indikas vian salutnomon en la nomo de la pako!" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "pip instalos la pakon el TestPyPI, kaj la eligaĵo aspektu jene:" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -24992,8 +29808,13 @@ msgid "" "package doesn't have any dependencies, it's a good practice to avoid " "installing dependencies when using TestPyPI." msgstr "" +"Tiu ekzemplo uzas la flagon ``--index-url`` por specifi la Provan PyPI " +"anstataŭ la vera PyPI. Krome ĝi uzas la flagon ``--no-deps``. Ĉar Prova PyPI " +"ne havas la samajn pakojn kiel PyPI, eblas, ke provado instali dependaĵojn " +"povas malsukcesi aŭ estigi ion neatenditan. Kvankam nia ekzempla pako ne " +"havas dependecon, estas bone averti instaladon de dependaĵojn por Prova PyPI." -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:" @@ -25002,32 +29823,38 @@ msgstr "" "Certigu, ke vi ankoraŭ estas en via virtuala medio, kaj rulu la jenan Python-" "kodon:" -#: ../source/tutorials/packaging-projects.rst:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "kaj importu la pakon:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "**Gratulon, vi pakis kaj distribuis Python-projekton!** ✨ 🍰 ✨" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 "" +"Notu, ke ĉi tiu lernilo klarigis al vi kiel alŝuti vian pakon al Prova PyPI, " +"kiu ne estas permanenta konservejo. La Prova sistemo fojfoje forviŝas pakojn " +"kaj kontojn. Oni uzu Provan PyPI nur por testado kaj eksperimentado kiel en " +"ĉi tiu lernilo." -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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 "" +"Kiam vi pretas alŝuti veran pakon al la Python-Pakindekso, vi povas fari pli-" +"malpli same kiel ĉi tiu lernilo, krom la jenaj gravaj diferencoj:" -#: ../source/tutorials/packaging-projects.rst:519 +#: ../source/tutorials/packaging-projects.rst:553 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 " @@ -25036,7 +29863,7 @@ msgstr "" "Elektu memorindan kaj unikan nomon por via pako. Vi ne devas postmeti vian " "salutnomon kiel en la lernilo, sed vi ne povas uzi ekzistantan nomon." -#: ../source/tutorials/packaging-projects.rst:521 +#: ../source/tutorials/packaging-projects.rst:555 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 " @@ -25045,15 +29872,19 @@ msgstr "" "Registru konton ĉe https://pypi.org – notu, ke tiuj du estas apartaj " "serviloj; la akreditiloj ne estas komunaj inter ili." -#: ../source/tutorials/packaging-projects.rst:524 +#: ../source/tutorials/packaging-projects.rst:558 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 "" +"Uzu ``twine upload dist/*`` por alŝuti vian pakon. Tajpu la akreditilon por " +"la konto ĉe la vera PyPI. Ĉar vi estas alŝutanta al la reala pakindekso, vi " +"ne devas uzi la flagon ``--repository``; la pako estos implicite alŝutita al " +"https://pypi.org/." -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." @@ -25061,7 +29892,7 @@ msgstr "" "Instalu vian pakon el la vera PyPI per ``python3 -m pip install [your-" "package]``." -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 msgid "" "At this point if you want to read more on packaging Python libraries here " "are some things you can do:" @@ -25069,7 +29900,7 @@ msgstr "" "Nun, se vi volas legi pli pri pakado de Python-bibliotekoj, jen kelkaj " "legindaĵoj:" -#: ../source/tutorials/packaging-projects.rst:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `_, :doc:`setuptools `, :doc:" "`Flit `, `PDM `_." -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 msgid "" "Look at the :doc:`guides ` on this site for more advanced " "practical information, or the :doc:`discussions ` for " @@ -25089,7 +29920,7 @@ msgstr "" "praktikaj informoj aŭ la :doc:`diskutojn ` por klarigoj " "kaj fonaj informoj pri specifaj temoj." -#: ../source/tutorials/packaging-projects.rst:540 +#: ../source/tutorials/packaging-projects.rst:574 msgid "" "Consider packaging tools that provide a single command-line interface for " "project management and packaging, such as :ref:`hatch`, :ref:`flit`, :ref:" @@ -25099,11 +29930,11 @@ msgstr "" "projektadministrado kaj pakado, kiel ekzemple :ref:`hatch`, :ref:`flit`, :" "ref:`pdm` kaj :ref:`poetry`." -#: ../source/tutorials/packaging-projects.rst:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "Notoj" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages ` metadata, when used in the HTML representation of the " +#~ "Simple API, **MUST** be emitted using the attribute name ``data-core-" +#~ "metadata``, with the supported values remaining the same." +#~ msgstr "" +#~ "La metadatenoj de :ref:`la API-medateno-dosiera specifo `, se uzata en la HTML-prezento de la Simpla " +#~ "API, **DEVAS** enhavi la atributan nomon ``data-core-metadata``, kun la " +#~ "subtenataj valoroj restantaj same." + +#~ msgid "" +#~ "To support clients that used the previous key names, the HTML " +#~ "representation **MAY** also be emitted using the ``data-dist-info-" +#~ "metadata``, and if it does so it **MUST** match the value of ``data-core-" +#~ "metadata``." +#~ msgstr "" +#~ "Por subteni klientojn uzantajn la antaŭajn ŝlosilajn nomojn, la HTML-" +#~ "prezento **POVAS** ankaŭ enhavi ``data-dist-info-metadata``. Se ĝi ja " +#~ "enhavas tion, ĝi **DEVAS** kongrui kun la valoro de ``data-core-" +#~ "metadata``." + +#~ msgid "" +#~ "This spec sets the current API version to \"1.0\", and expects that " +#~ "future specs that further evolve the simple API will increment the minor " +#~ "version number." +#~ msgstr "" +#~ "Ĉi tiu specifo difinas la aktualan API-version kiel «1.0», kaj supozas, " +#~ "ke estontaj specifoj plu evoluigantaj la simplan API alkrementos la " +#~ "minoran versian numeron." + +#~ msgid "Additional Fields for the Simple API for Package Indexes" +#~ msgstr "Pliaj Kampoj por la Simpla API por Pakindeksoj" + +#~ msgid "" +#~ "This specification defines version 1.1 of the simple repository API. For " +#~ "the HTML version of the API, there is no change from version 1.0. For the " +#~ "JSON version of the API, the following changes are made:" +#~ msgstr "" +#~ "Ĉi tiu specifo difinas version 1.1. de la simpla deponeja API. Por la " +#~ "HTML-versio de la API, ne ekzistas ŝanĝoj kompare al versio 1.0. Por la " +#~ "JSON-versio de la API, ekzistas la jenaj ŝanĝoj:" + +#~ msgid "The ``api-version`` must specify version 1.1 or later." +#~ msgstr "La ``api-version`` devas specifi version 1.1 aŭ pli novan." + +#~ msgid "A new ``versions`` key is added at the top level." +#~ msgstr "Nova ŝlosilo ``versions`` estis aldonita supranivele." + +#~ msgid "" +#~ "Two new \"file information\" keys, ``size`` and ``upload-time``, are " +#~ "added to the ``files`` data." +#~ msgstr "" +#~ "Du novaj «dosierinformaj» ŝlosiloj ``size`` kaj ``upload-time`` estas " +#~ "aldonitaj al la datenoj ``files``." + +#~ msgid "" +#~ "The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key " +#~ "is optional." +#~ msgstr "" +#~ "La ŝlosiloj ``versions`` kaj ``size`` estas devigaj. La ŝlosilo ``upload-" +#~ "time`` ne estas deviga." + +#~ msgid "Additional file information" +#~ msgstr "Pliaj dosieraj informoj" + +#~ msgid "Two new keys are added to the ``files`` key." +#~ msgstr "Du novaj ŝlosiloj estas aldonitaj al la ŝlosilo ``files``." + +#~ msgid "TOML_ type: table" +#~ msgstr "Tipo de TOML_: tabelo" + +#~ msgid "" +#~ "Most build backends automatically include license files in packages. See " +#~ "your backend's documentation for more details." +#~ msgstr "" +#~ "Multaj konstruaj malfasadoj aŭtomate inkluzivas licencajn dosierojn en " +#~ "pakojn. Vidu la dokumentaron de via malfasado por pli da detaloj." #, fuzzy #~ msgid "Examples:" diff --git a/locales/es/LC_MESSAGES/messages.po b/locales/es/LC_MESSAGES/messages.po index 88271b67d..9ac6a1158 100644 --- a/locales/es/LC_MESSAGES/messages.po +++ b/locales/es/LC_MESSAGES/messages.po @@ -11,13 +11,14 @@ # gallegonovato , 2023, 2024. # Rafael Fontenelle , 2024. # "Edgar R. M." , 2024. +# Joseph Hale , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-11-24 22:33+0000\n" -"Last-Translator: gallegonovato \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-01-29 20:03+0000\n" +"Last-Translator: Joseph Hale \n" "Language-Team: Spanish \n" "Language: es\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.9-dev\n" +"X-Generator: Weblate 5.10-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -76,7 +77,7 @@ msgid "" "By contributing to the |PyPUG|, you're expected to follow the PSF's `Code of " "Conduct`__." msgstr "" -"Al contribuir al |PyPUG|, se espera que sigas el `Código de Conducta`__ del " +"Al contribuir al |PyPUG|, se espera que siga el `Código de Conducta`__ del " "PSF." #: ../source/contribute.rst:32 @@ -615,6 +616,7 @@ msgid "Deploying Python applications" msgstr "Desplegando aplicaciones de Python" #: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 #: ../source/discussions/single-source-version.rst:0 #: ../source/guides/distributing-packages-using-setuptools.rst:0 #: ../source/guides/index-mirrors-and-caches.rst:0 @@ -635,6 +637,7 @@ msgid "Incomplete" msgstr "Incompleta" #: ../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 @@ -743,6 +746,7 @@ msgstr "" "License 2.0." #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -944,6 +948,703 @@ msgid "" "library/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 +#, fuzzy +#| msgid "What is a source distribution?" +msgid "Provide complete source distributions" +msgstr "¿Qué es una distribución de origen?" + +#: ../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 " @@ -2088,7 +2789,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy msgid "Versioning" msgstr "Versión" @@ -2891,49 +3592,91 @@ msgid "" 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 +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 "Módulo" -#: ../source/glossary.rst:152 +#: ../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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "Índice de paquetes" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Índice por proyecto" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 #: ../source/guides/index-mirrors-and-caches.rst:52 msgid "Project" msgstr "Proyecto" -#: ../source/glossary.rst:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2942,7 +3685,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2950,7 +3693,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2958,33 +3701,33 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy msgid "Project Root Directory" msgstr "Nombre de proyecto" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2994,22 +3737,22 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy msgid "Pyproject Metadata" msgstr "Nombre de proyecto" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -3018,32 +3761,32 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy msgid "Pyproject Metadata Key" msgstr "Nombre de proyecto" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3053,48 +3796,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -3102,11 +3845,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3115,11 +3858,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3127,49 +3870,70 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "Archivo de requisitos" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +msgid "Root License Directory" +msgstr "Nombre de proyecto" + +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "Archivo Fuente" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3178,11 +3942,11 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "Paquete de sistema" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." @@ -3190,11 +3954,11 @@ msgstr "" "Un paquete provisto en un formato nativo del sistema operativo, por ejemplo, " "un archivo de RPM o de APT." -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3203,11 +3967,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "Entorno virtual" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3215,16 +3979,16 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 #, fuzzy msgid "Wheel Format" msgstr "Formato de archivo" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3232,22 +3996,22 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy msgid "Wheel Project" msgstr "Proyecto" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3401,7 +4165,7 @@ msgstr "Descripción" #: ../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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "Ejemplos" @@ -3760,7 +4524,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4451,7 +5215,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -6166,6 +6930,336 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +#, fuzzy +#| msgid "Examples" +msgid "Licensing Examples" +msgstr "Ejemplos" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +#, fuzzy +msgid "Basic example" +msgstr "Por ejemplo:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +#, fuzzy +msgid "Advanced example" +msgstr "Por ejemplo:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +#, fuzzy +msgid "Expression examples" +msgstr "Por ejemplo:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8832,13 +9926,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8846,11 +9941,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8860,29 +9955,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8890,37 +9985,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8929,101 +10024,101 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 #, fuzzy msgid "Put the version of your project." msgstr "Añada palabras clave que describan su proyecto." -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 #, fuzzy msgid "Dependencies and requirements" msgstr "Archivos de requisitos" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 #, fuzzy msgid "Creating executable scripts" msgstr "Creación de los archivos del paquete" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -9031,93 +10126,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -9126,31 +10263,93 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +#, fuzzy +msgid "``license-files``" +msgstr "Dependencias externas" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -9159,26 +10358,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9186,28 +10385,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9215,26 +10414,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "Ejemplo completo" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -12162,23 +13361,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -12186,7 +13392,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -12194,64 +13400,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12259,28 +13465,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12289,22 +13495,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12312,29 +13518,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12344,7 +13563,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12352,7 +13571,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12360,17 +13579,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12378,39 +13597,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12420,11 +13639,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12433,38 +13652,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12472,7 +13691,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12480,18 +13699,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12500,7 +13719,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12511,7 +13730,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12529,7 +13748,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12538,37 +13757,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12576,11 +13795,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12690,8 +13922,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12798,8 +14030,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13419,24 +14651,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13444,29 +14685,29 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 #, fuzzy msgid "Requires" msgstr "Archivo de requisitos" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13477,33 +14718,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13512,89 +14753,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13944,12 +15185,12 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 #, fuzzy msgid "Names" msgstr "Nombre" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13961,11 +15202,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13973,7 +15214,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13981,18 +15222,17 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 #, fuzzy msgid "Versions" msgstr "Versión" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -14003,11 +15243,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -14016,13 +15256,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -14031,7 +15271,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -14044,7 +15284,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -14054,7 +15294,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -14062,20 +15302,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -14085,197 +15325,198 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 #, fuzzy msgid "Python equivalent" msgstr "Versión de Python" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 #, fuzzy msgid "``python_version``" msgstr "Versión de Python" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 #, fuzzy msgid "``python_full_version``" msgstr "Versión de Python" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14283,24 +15524,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14327,7 +15568,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14481,17 +15722,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14500,7 +15741,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14508,7 +15749,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14516,34 +15757,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14552,13 +15793,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14566,7 +15807,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14574,24 +15815,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14599,22 +15840,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14625,65 +15866,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14691,106 +15932,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -16018,7 +17259,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -16084,7 +17325,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 #, fuzzy msgid "Recommendations" msgstr "Recomendaciones de herramientas" @@ -16377,12 +17618,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16444,83 +17685,286 @@ msgstr "" msgid "``manylinux2014``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux_x_y``" +#: ../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 +#, fuzzy +msgid "``musllinux``" +msgstr "Responsable" + +#: ../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 +#, fuzzy +#| msgid "``install``" +msgid "``intel``" +msgstr "``install``" + +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -#, fuzzy -msgid "``musllinux``" -msgstr "Responsable" - -#: ../source/specifications/platform-compatibility-tags.rst:152 +#: ../source/specifications/platform-compatibility-tags.rst:286 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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:157 +#: ../source/specifications/platform-compatibility-tags.rst:289 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:" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:188 +#: ../source/specifications/platform-compatibility-tags.rst:291 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." +"``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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16528,7 +17972,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16539,14 +17983,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16555,69 +17999,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16628,11 +18072,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16642,7 +18086,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16650,11 +18094,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16662,13 +18106,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16679,23 +18123,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16703,11 +18147,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16717,33 +18161,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16751,13 +18195,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16766,34 +18210,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "El archivo :file:`.pypirc`" @@ -17036,7 +18488,7 @@ msgid "``dependencies``" msgstr "Dependencias externas" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -17048,62 +18500,63 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 #, fuzzy msgid "``maintainers``" msgstr "Responsable" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 #, fuzzy msgid "``optional-dependencies``" msgstr "Dependencias externas" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." @@ -17111,22 +18564,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:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -17140,7 +18593,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -17149,7 +18602,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -17161,41 +18614,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -17203,20 +18760,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17225,92 +18782,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17318,14 +18878,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17333,7 +18893,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17341,24 +18901,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17366,7 +18926,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17377,17 +18937,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17395,19 +18955,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17416,20 +18976,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17437,18 +18997,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17456,7 +19016,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17464,19 +19024,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17579,7 +19145,20 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +#, fuzzy +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"described in detail below:" +msgstr "" +"El directorio ``.dist-info`` puede contener los archivos que se describen a " +"detalle a continuación:" + +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17587,7 +19166,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17595,58 +19174,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "El archivo METADATA" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "El archivo RECORD" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "delimitador de campos: ``,`` (coma)," -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17654,7 +19233,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17663,13 +19242,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17678,7 +19257,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17687,18 +19266,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17706,7 +19285,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17723,11 +19302,11 @@ msgstr "" "lo contrario la desinstalación del paquete dejará archivos no listados en su " "lugar (posiblemente resultando en un paquete de espacio de nombres zombie)." -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "El archivo INSTALLER" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17735,15 +19314,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17751,11 +19330,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17763,29 +19342,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17794,11 +19387,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17806,14 +19399,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17822,28 +19415,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17872,15 +19465,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17888,23 +19489,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17920,44 +19521,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17965,7 +19566,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17974,7 +19575,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17982,22 +19617,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -18006,18 +19641,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "Traducciones" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -18027,11 +19666,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -18041,7 +19680,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -18049,7 +19688,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -18057,12 +19696,12 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy msgid "Installers" msgstr "Instalador" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -18072,7 +19711,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -18082,14 +19721,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -18099,7 +19738,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -18107,7 +19746,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -18116,71 +19755,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -18189,7 +19828,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -18199,49 +19838,72 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 #, fuzzy msgid "Clients" msgstr "Contenido" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18250,7 +19912,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18262,7 +19924,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18272,19 +19934,19 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 #, fuzzy msgid "Backwards Compatibility" msgstr "Etiquetas de compatibilidad con plataformas" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18292,11 +19954,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18304,7 +19966,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18314,7 +19976,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18324,7 +19986,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18332,28 +19994,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18362,38 +20024,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "Traducciones" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18401,19 +20063,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy msgid "Project List" msgstr "Proyecto" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 #, fuzzy msgid "As an example:" msgstr "Por ejemplo:" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18468,7 +20136,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18526,14 +20223,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18543,7 +20240,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18551,44 +20248,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18597,7 +20312,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18608,7 +20323,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18616,7 +20361,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18680,12 +20429,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "Versión" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18694,65 +20443,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18760,7 +20509,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18771,7 +20520,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18780,33 +20529,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18816,7 +20565,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18826,7 +20575,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18834,7 +20583,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18845,22 +20594,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18869,25 +20618,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18895,13 +20644,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18911,19 +20660,19 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 #, fuzzy msgid "Endpoint Configuration" msgstr "Configuraciones habituales" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18931,7 +20680,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18941,7 +20690,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18949,11 +20698,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18964,7 +20713,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18972,7 +20721,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18981,7 +20730,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18989,7 +20738,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18999,20 +20748,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -19020,7 +20769,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -19029,18 +20778,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -19048,13 +20797,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -19063,23 +20812,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -19088,216 +20837,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19330,11 +20931,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19344,11 +20945,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19357,20 +20958,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19378,29 +20979,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19408,22 +21018,22 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 #, fuzzy msgid "Source distribution archive features" msgstr "Formatos de archivo de distribución de paquetes" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19431,7 +21041,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19441,11 +21051,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19453,113 +21063,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -22229,7 +23845,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "Próximos pasos" @@ -22486,7 +24102,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22495,24 +24111,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22521,31 +24137,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22553,21 +24181,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22576,57 +24204,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22729,23 +24360,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22753,28 +24384,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22782,44 +24413,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Persian `, 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 " @@ -1890,7 +2588,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy msgid "Versioning" msgstr "ترجمه‌ها" @@ -2689,49 +3387,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2740,7 +3480,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2748,7 +3488,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2756,32 +3496,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2791,21 +3531,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "ماژول خالص" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2814,31 +3554,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2848,48 +3588,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2897,11 +3637,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2910,11 +3650,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2922,49 +3662,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2973,21 +3733,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2996,11 +3756,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3008,15 +3768,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3024,21 +3784,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3190,7 +3950,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3547,7 +4307,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4240,7 +5000,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5924,6 +6684,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8582,13 +9667,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8596,11 +9682,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8610,29 +9696,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8640,37 +9726,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8679,98 +9765,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8778,93 +9864,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8873,31 +10001,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8906,26 +10095,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8933,28 +10122,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8962,26 +10151,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11897,23 +13086,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11921,7 +13117,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11929,64 +13125,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11994,28 +13190,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12024,22 +13220,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12047,29 +13243,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12079,7 +13288,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12087,7 +13296,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12095,17 +13304,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12113,39 +13322,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12155,11 +13364,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12168,38 +13377,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12207,7 +13416,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12215,18 +13424,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12235,7 +13444,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12246,7 +13455,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12264,7 +13473,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12273,37 +13482,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12311,11 +13520,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12425,8 +13647,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12533,8 +13755,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13154,24 +14376,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13179,28 +14410,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13211,33 +14442,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13246,89 +14477,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13673,11 +14904,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13689,11 +14920,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13701,7 +14932,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13709,18 +14940,17 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 #, fuzzy msgid "Versions" msgstr "ترجمه‌ها" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13731,11 +14961,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13744,13 +14974,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13759,7 +14989,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13772,7 +15002,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13782,7 +15012,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13790,20 +15020,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13813,194 +15043,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14008,24 +15239,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14052,7 +15283,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14205,17 +15436,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14224,7 +15455,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14232,7 +15463,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14240,34 +15471,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14276,13 +15507,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14290,7 +15521,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14298,24 +15529,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14323,22 +15554,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14349,65 +15580,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14415,106 +15646,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15736,7 +16967,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15801,7 +17032,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16091,12 +17322,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16150,90 +17381,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16241,7 +17673,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16252,14 +17684,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16268,69 +17700,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16341,11 +17773,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16355,7 +17787,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16363,11 +17795,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16375,13 +17807,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16392,23 +17824,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16416,11 +17848,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16430,33 +17862,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16464,13 +17896,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16479,34 +17911,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16747,7 +18187,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16759,81 +18199,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16847,7 +18288,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16856,7 +18297,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16868,41 +18309,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16910,20 +18455,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16932,92 +18477,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17025,14 +18573,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17040,7 +18588,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17048,24 +18596,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17073,7 +18621,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17084,17 +18632,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17102,19 +18650,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17123,20 +18671,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17144,18 +18692,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17163,7 +18711,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17171,19 +18719,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17281,7 +18835,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17289,7 +18853,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17297,58 +18861,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17356,7 +18920,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17365,13 +18929,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17380,7 +18944,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17389,18 +18953,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17408,7 +18972,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17418,11 +18982,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17430,15 +18994,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17446,11 +19010,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17458,29 +19022,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17489,11 +19067,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17501,14 +19079,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17517,28 +19095,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17566,15 +19144,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17582,23 +19168,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17614,44 +19200,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17659,7 +19245,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17668,7 +19254,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17676,22 +19296,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17700,18 +19320,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "ترجمه‌ها" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17721,11 +19345,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17735,7 +19359,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17743,7 +19367,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17751,13 +19375,13 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy #| msgid "Translations" msgid "Installers" msgstr "ترجمه‌ها" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17767,7 +19391,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17777,14 +19401,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17794,7 +19418,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17802,7 +19426,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17811,71 +19435,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17884,7 +19508,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17894,48 +19518,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17944,7 +19591,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17956,7 +19603,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17966,18 +19613,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17985,11 +19632,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17997,7 +19644,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18007,7 +19654,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18017,7 +19664,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18025,28 +19672,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18055,38 +19702,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "ترجمه‌ها" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18094,19 +19741,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18159,7 +19812,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18216,14 +19898,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18233,7 +19915,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18241,44 +19923,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18287,7 +19987,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18298,7 +19998,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18306,7 +20036,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18369,12 +20103,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "ترجمه‌ها" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18383,65 +20117,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18449,7 +20183,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18460,7 +20194,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18469,33 +20203,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18505,7 +20239,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18515,7 +20249,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18523,7 +20257,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18534,22 +20268,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18558,25 +20292,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18584,13 +20318,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18600,18 +20334,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18619,7 +20353,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18629,7 +20363,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18637,11 +20371,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18652,7 +20386,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18660,7 +20394,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18669,7 +20403,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18677,7 +20411,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18687,20 +20421,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18708,7 +20442,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18717,18 +20451,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18736,13 +20470,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18751,23 +20485,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18776,216 +20510,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19018,11 +20604,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19032,11 +20618,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19045,20 +20631,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19066,29 +20652,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19096,21 +20691,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19118,7 +20713,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19128,11 +20723,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19140,113 +20735,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21903,7 +23504,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22160,7 +23761,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22169,24 +23770,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22195,31 +23796,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22227,21 +23840,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22250,57 +23863,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22398,23 +24014,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22422,28 +24038,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22451,44 +24067,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Filipino `, 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 " @@ -1890,7 +2588,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2684,49 +3382,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2735,7 +3475,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2743,7 +3483,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2751,32 +3491,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2786,21 +3526,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2809,31 +3549,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2843,48 +3583,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2892,11 +3632,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2905,11 +3645,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2917,49 +3657,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2968,21 +3728,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2991,11 +3751,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3003,15 +3763,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3019,21 +3779,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3185,7 +3945,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3542,7 +4302,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4230,7 +4990,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5910,6 +6670,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8562,13 +9647,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8576,11 +9662,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8590,29 +9676,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8620,37 +9706,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8659,98 +9745,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8758,93 +9844,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8853,31 +9981,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8886,26 +10075,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8913,28 +10102,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8942,26 +10131,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11877,23 +13066,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11901,7 +13097,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11909,64 +13105,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11974,28 +13170,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12004,22 +13200,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12027,29 +13223,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12059,7 +13268,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12067,7 +13276,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12075,17 +13284,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12093,39 +13302,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12135,11 +13344,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12148,38 +13357,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12187,7 +13396,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12195,18 +13404,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12215,7 +13424,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12226,7 +13435,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12244,7 +13453,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12253,37 +13462,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12291,11 +13500,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12405,8 +13627,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12513,8 +13735,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13134,24 +14356,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13159,28 +14390,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13191,33 +14422,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13226,89 +14457,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13653,11 +14884,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13669,11 +14900,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13681,7 +14912,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13689,17 +14920,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13710,11 +14940,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13723,13 +14953,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13738,7 +14968,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13751,7 +14981,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13761,7 +14991,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13769,20 +14999,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13792,194 +15022,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13987,24 +15218,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14031,7 +15262,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14184,17 +15415,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14203,7 +15434,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14211,7 +15442,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14219,34 +15450,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14255,13 +15486,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14269,7 +15500,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14277,24 +15508,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14302,22 +15533,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14328,65 +15559,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14394,106 +15625,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15715,7 +16946,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15780,7 +17011,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16068,12 +17299,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16127,90 +17358,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16218,7 +17650,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16229,14 +17661,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16245,69 +17677,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16318,11 +17750,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16332,7 +17764,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16340,11 +17772,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16352,13 +17784,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16369,23 +17801,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16393,11 +17825,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16407,33 +17839,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16441,13 +17873,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16456,34 +17888,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16724,7 +18164,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16736,81 +18176,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16824,7 +18265,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16833,7 +18274,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16845,41 +18286,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16887,20 +18432,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16909,92 +18454,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17002,14 +18550,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17017,7 +18565,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17025,24 +18573,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17050,7 +18598,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17061,17 +18609,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17079,19 +18627,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17100,20 +18648,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17121,18 +18669,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17140,7 +18688,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17148,19 +18696,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17258,7 +18812,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17266,7 +18830,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17274,58 +18838,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17333,7 +18897,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17342,13 +18906,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17357,7 +18921,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17366,18 +18930,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17385,7 +18949,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17395,11 +18959,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17407,15 +18971,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17423,11 +18987,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17435,29 +18999,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17466,11 +19044,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17478,14 +19056,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17494,28 +19072,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17543,15 +19121,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17559,23 +19145,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17591,44 +19177,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17636,7 +19222,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17645,7 +19231,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17653,22 +19273,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17677,17 +19297,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17697,11 +19321,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17711,7 +19335,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17719,7 +19343,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17727,11 +19351,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17741,7 +19365,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17751,14 +19375,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17768,7 +19392,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17776,7 +19400,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17785,71 +19409,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17858,7 +19482,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17868,48 +19492,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17918,7 +19565,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17930,7 +19577,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17940,18 +19587,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17959,11 +19606,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17971,7 +19618,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17981,7 +19628,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17991,7 +19638,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17999,28 +19646,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18029,37 +19676,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18067,19 +19714,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18132,7 +19785,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18189,14 +19871,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18206,7 +19888,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18214,44 +19896,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18260,7 +19960,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18271,7 +19971,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18279,7 +20009,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18342,11 +20076,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18355,65 +20089,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18421,7 +20155,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18432,7 +20166,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18441,33 +20175,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18477,7 +20211,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18487,7 +20221,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18495,7 +20229,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18506,22 +20240,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18530,25 +20264,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18556,13 +20290,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18572,18 +20306,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18591,7 +20325,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18601,7 +20335,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18609,11 +20343,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18624,7 +20358,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18632,7 +20366,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18641,7 +20375,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18649,7 +20383,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18659,20 +20393,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18680,7 +20414,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18689,18 +20423,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18708,13 +20442,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18723,23 +20457,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18748,216 +20482,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18990,11 +20576,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19004,11 +20590,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19017,20 +20603,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19038,29 +20624,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19068,21 +20663,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19090,7 +20685,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19100,11 +20695,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19112,113 +20707,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21866,7 +23467,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22123,7 +23724,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22132,24 +23733,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22158,31 +23759,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22190,21 +23803,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22213,57 +23826,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22361,23 +23977,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22385,28 +24001,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22414,44 +24030,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2024. # Pierre PETAT , 2024. # Laurent FAVOLE , 2024. +# Bruno Alla , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-12-25 20:00+0000\n" -"Last-Translator: Laurent FAVOLE \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-02-17 11:31+0000\n" +"Last-Translator: Bruno Alla \n" "Language-Team: French \n" "Language: fr\n" @@ -21,7 +22,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.10-dev\n" +"X-Generator: Weblate 5.10.1-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -589,6 +590,7 @@ msgid "Deploying Python applications" msgstr "Déployer des applications Python" #: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 #: ../source/discussions/single-source-version.rst:0 #: ../source/guides/distributing-packages-using-setuptools.rst:0 #: ../source/guides/index-mirrors-and-caches.rst:0 @@ -609,6 +611,7 @@ msgid "Incomplete" msgstr "Incomplet" #: ../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 @@ -702,6 +705,7 @@ msgid "" msgstr "" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "macOS" @@ -878,6 +882,704 @@ msgid "" "library/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 +#, fuzzy +#| msgid "Source distributions" +msgid "Provide complete source distributions" +msgstr "Distributions sources" + +#: ../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 +#, fuzzy +msgid "Aim for stable releases" +msgstr "Version" + +#: ../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 " @@ -2044,7 +2746,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy msgid "Versioning" msgstr "Traductions" @@ -2819,75 +3521,119 @@ msgid "" "package` for a breakdown of the differences." msgstr "" -#: ../source/glossary.rst:133 -#, fuzzy -msgid "Installed Project" -msgstr "Installateur" +#: ../source/glossary.rst:133 +#, fuzzy +msgid "Installed Project" +msgstr "Installateur" + +#: ../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 specicifcation :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 +#, fuzzy +#| msgid "``classifiers``" +msgid "License Classifier" +msgstr "``classifiers``" + +#: ../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 +msgid "License Expression" +msgstr "" + +#: ../source/glossary.rst:158 +msgid "SPDX Expression" +msgstr "" -#: ../source/glossary.rst:136 +#: ../source/glossary.rst:161 msgid "" -"A :term:`Project` that is installed for use with a Python interpreter or :" -"term:`Virtual Environment`, as described in the specicifcation :ref:" -"`recording-installed-packages`." +"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:140 -msgid "Known Good Set (KGS)" +#: ../source/glossary.rst:169 +msgid "License Identifier" msgstr "" -#: ../source/glossary.rst:143 +#: ../source/glossary.rst:170 +msgid "SPDX Identifier" +msgstr "" + +#: ../source/glossary.rst:173 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." +"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:149 +#: ../source/glossary.rst:183 msgid "Module" msgstr "Module" -#: ../source/glossary.rst:152 +#: ../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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 #: ../source/guides/index-mirrors-and-caches.rst:52 msgid "Project" msgstr "Projet" -#: ../source/glossary.rst:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2896,7 +3642,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2904,7 +3650,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2912,33 +3658,33 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy msgid "Project Root Directory" msgstr "Nom du projet" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2948,22 +3694,22 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Module pur" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy msgid "Pyproject Metadata" msgstr "Nom du projet" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2972,32 +3718,32 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy msgid "Pyproject Metadata Key" msgstr "pyproject.toml" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3007,11 +3753,11 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "Index des Paquets Python (PyPI)" -#: ../source/glossary.rst:265 +#: ../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 " @@ -3021,31 +3767,31 @@ msgstr "" "par défaut pour la communauté Python. Il est ouvert à tous les développeurs " "Python pour qu'ils utilisent et distribuent leurs paquets." -#: ../source/glossary.rst:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "Version" -#: ../source/glossary.rst:283 +#: ../source/glossary.rst:317 msgid "" "A snapshot of a :term:`Project` at a particular point in time, denoted by a " "version identifier." @@ -3053,7 +3799,7 @@ msgstr "" "Une image d'un :term:`Projet` à un certain moment dans le temps, défini par " "un numéro de version." -#: ../source/glossary.rst:286 +#: ../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 " @@ -3061,11 +3807,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "Dépendance" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3074,11 +3820,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3086,49 +3832,70 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +msgid "Root License Directory" +msgstr "Nom du projet" + +#: ../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 "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3137,11 +3904,11 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "Paquet système" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." @@ -3149,11 +3916,11 @@ msgstr "" "Un paquet fourni dans un format natif au système d'exploitation, par ex. un " "fichier rpm ou dpkg." -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3162,11 +3929,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "Environnement virtuel" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3174,15 +3941,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "Wheel" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3190,22 +3957,22 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy msgid "Wheel Project" msgstr "Projet" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3357,7 +4124,7 @@ msgstr "Description" #: ../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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "Exemples" @@ -3734,7 +4501,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "Références" @@ -4428,7 +5195,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -6123,6 +6890,336 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +#, fuzzy +#| msgid "Examples" +msgid "Licensing Examples" +msgstr "Exemples" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +#, fuzzy +msgid "Basic example" +msgstr "Exemples" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +#, fuzzy +msgid "Advanced example" +msgstr "Exemples" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +#, fuzzy +msgid "Expression examples" +msgstr "Exemples" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8794,13 +9891,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8808,11 +9906,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8822,29 +9920,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8852,37 +9950,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "``name``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8891,100 +9989,100 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 #, fuzzy msgid "Put the version of your project." msgstr "Configurer votre projet" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 #, fuzzy msgid "Dependencies and requirements" msgstr "Fichiers requirements vs install_requires" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies`` / ``optional-dependencies``" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "``requires-python``" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8992,94 +10090,136 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 #, fuzzy msgid "About your project" msgstr "Configurer votre projet" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "``authors`` / ``maintainers``" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "``description``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "``readme``" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "``license``" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -9088,25 +10228,88 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +#, fuzzy +#| msgid "``license``" +msgid "``license-files``" +msgstr "``license``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "``keywords``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "``classifiers``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 #, fuzzy msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " @@ -9115,7 +10318,7 @@ msgstr "" "Renseignez une liste de classifieurs qui catégorisent votre projet. Pour la " "liste complète, consultez https://pypi.org/classifiers/." -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -9124,26 +10327,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "``urls``" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9151,28 +10354,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9180,27 +10383,27 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 #, fuzzy msgid "A full example" msgstr "Exemples" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -12235,23 +13438,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -12259,7 +13469,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -12267,64 +13477,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12332,28 +13542,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12362,22 +13572,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12385,29 +13595,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12417,7 +13640,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12425,7 +13648,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12433,17 +13656,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12451,15 +13674,15 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "Voir" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "https://datatracker.ietf.org/doc/html/rfc7515" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" @@ -12467,26 +13690,26 @@ msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "https://datatracker.ietf.org/doc/html/rfc7517" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "Foire aux questions" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12496,11 +13719,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12509,38 +13732,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12548,7 +13771,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12556,18 +13779,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12576,7 +13799,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12587,7 +13810,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12605,7 +13828,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12614,37 +13837,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "Historique" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12652,11 +13875,28 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +#, fuzzy +#| msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" +"Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" +"`241`." + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "Annexe" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12766,8 +14006,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "Exemple ::" @@ -12874,8 +14114,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "Exemples::" @@ -13502,24 +14742,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13527,28 +14776,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "Requires" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13559,33 +14808,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "Provides" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13594,91 +14843,91 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "Obsoletes" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 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:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "Restreint les noms supplémentaires à être normalisés." -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -14030,11 +15279,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "Noms" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -14046,11 +15295,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "Extras" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -14058,7 +15307,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -14066,17 +15315,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "Versions" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -14087,11 +15335,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -14100,13 +15348,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -14115,7 +15363,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -14128,7 +15376,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -14138,7 +15386,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -14146,20 +15394,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -14169,195 +15417,196 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "Marqueur" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 #, fuzzy msgid "Python equivalent" msgstr "Version de Python" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "``os_name``" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "``sys_platform``" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "``platform_machine``" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "``x86_64``" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "``platform_python_implementation``" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "``platform_release``" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "``platform_system``" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "``platform_version``" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "``python_version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "``'.'.join(platform.python_version_tuple()[:2])``" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "``python_full_version``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "``implementation_name``" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "``cpython``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "``implementation_version``" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "``extra``" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "``test``" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14365,24 +15614,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14409,7 +15658,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14562,17 +15811,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14581,7 +15830,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14589,7 +15838,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14597,34 +15846,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14633,13 +15882,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14647,7 +15896,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14655,24 +15904,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14680,22 +15929,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14706,65 +15955,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "Git" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" msgstr "git" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14772,106 +16021,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "Mercurial" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" msgstr "hg" -#: ../source/specifications/direct-url-data-structure.rst:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "Bazaar" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "https://www.breezy-vcs.org/" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" msgstr "bzr" -#: ../source/specifications/direct-url-data-structure.rst:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" msgstr "svn" -#: ../source/specifications/direct-url-data-structure.rst:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "Schéma JSON" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -16104,7 +17353,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -16169,7 +17418,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16464,12 +17713,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16567,47 +17816,285 @@ msgstr "``>=2.0.0``" msgid "``>=3.0.0``" msgstr "``>=3.0.0``" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=3.3.0`` [#]_" +#: ../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 "``arm64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``universal``" +msgstr "``universal``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``intel``" +msgstr "``intel``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``i386``, ``x86_64``" +msgstr "``i386``, ``x86_64``" + +#: ../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 "``fat64``" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +msgid "``ppc64``, ``x86_64``" +msgstr "``ppc64``, ``x86_64``" + +#: ../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 "" +"La version minimale prise en charge de macOS peut également être limitée par " +"l'architecture. Par exemple, macOS 11 (Big Sur) a été la première version à " +"prendre en charge arm64. Ces contraintes supplémentaires sont appliquées de " +"manière transparente par les outils de compilation macOS lors de la création " +"de binaires prenant en charge des architectures multiples." + +#: ../source/specifications/platform-compatibility-tags.rst:235 +msgid "Android" +msgstr "Android" + +#: ../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 "" +"Android utilise le schéma :file:`android_{apilevel}_{abi}`, indiquant la " +"compatibilité avec le niveau d'API Android donné ou supérieur, sur l'ABI " +"donné. Par exemple, ``android_27_arm64_v8a`` indique la prise en charge du " +"niveau d'API 27 ou supérieur, sur les appareils ``arm64_v8a``. Android ne " +"fait aucune distinction entre les appareils physiques et les appareils " +"émulés." + +#: ../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 "" +"Le niveau d'API doit être un entier positif. Ce n'est *pas* la même chose " +"que la version Android destinée aux utilisateurs. Par exemple, la version " +"connue sous le nom d'Android 12 (nom de code « Snow Cone ») utilise le " +"niveau d'API 31 ou 32, selon la version Android spécifique utilisée. La " +"documentation de la version d'Android contient la `liste complète des " +"versions d'Android et de leurs niveaux d'API correspondants `__." + +#: ../source/specifications/platform-compatibility-tags.rst:250 +msgid "" +"There are 4 `supported ABIs `__. Normalized according to the rules above, they are:" +msgstr "" +"Il existe 4 `ABI pris en charge `__. Normalisés selon les règles ci-dessus, ils sont :" + +#: ../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 "``x86``" + +#: ../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 "" +"Pratiquement tous les appareils physiques actuels utilisent l'une des " +"architectures ARM. ``x86`` et ``x86_64`` sont pris en charge pour une " +"utilisation dans l'émulateur. ``x86`` n'est plus pris en charge en tant que " +"plateforme de développement depuis 2020, et aucune nouvelle image " +"d'émulateur n'a été publiée depuis." + +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" +msgstr "iOS" + +#: ../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 "" +"iOS utilise le schéma :file:`ios_{x}_{y}_{arch}_{sdk}`, indiquant la " +"compatibilité avec iOS ``x.y`` ou version ultérieure, sur l'architecture " +"``arch``, en utilisant le SDK ``sdk``." -#: ../source/specifications/platform-compatibility-tags.rst:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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 "" +"Les valeurs de ``x`` et ``y`` correspondent respectivement au numéro de " +"version majeur et mineur de la version iOS. Elles doivent toutes deux être " +"des entiers positifs. Le numéro de version comprend toujours une version " +"majeure *et* mineure, même si la numérotation officielle des versions " +"d'Apple ne fait référence qu'à la valeur majeure. Par exemple, " +"``ios_13_0_arm64_iphonesimulator`` indique la compatibilité avec iOS 13 ou " +"une version ultérieure." -#: ../source/specifications/platform-compatibility-tags.rst:150 -msgid "``musllinux``" +#: ../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 "" +"La valeur de ``arch`` doit correspondre à la valeur de :py:func:`platform." +"machine()` sur le système." -#: ../source/specifications/platform-compatibility-tags.rst:152 +#: ../source/specifications/platform-compatibility-tags.rst:280 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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:157 +#: ../source/specifications/platform-compatibility-tags.rst:286 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:" +"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:188 +#: ../source/specifications/platform-compatibility-tags.rst:289 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." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:194 +#: ../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 #, fuzzy msgid "Use" msgstr "Usage :" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16615,7 +18102,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16626,14 +18113,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16642,69 +18129,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "cp33-cp33m-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "cp33-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "cp3-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "cp33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "cp3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "py33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "py3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "cp33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "cp3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "py33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "py3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "py32-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "py31-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "py30-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16715,11 +18202,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16729,7 +18216,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16737,11 +18224,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16749,13 +18236,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16766,23 +18253,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16790,11 +18277,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16804,33 +18291,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16838,13 +18325,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16853,34 +18340,50 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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 +#, fuzzy +#| msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgid "December 2023: The tags for iOS were approved through :pep:`730`." +msgstr "" +"Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" +"`241`." + +#: ../source/specifications/platform-compatibility-tags.rst:445 +#, fuzzy +#| msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgid "March 2024: The tags for Android were approved through :pep:`738`." +msgstr "" +"Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" +"`241`." + #: ../source/specifications/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -17125,7 +18628,7 @@ msgid "``dependencies``" msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "``dynamic``" @@ -17137,81 +18640,82 @@ msgstr "``entry-points``" msgid "``gui-scripts``" msgstr "``gui-scripts``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "``maintainers``" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "``optional-dependencies``" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -17225,7 +18729,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -17234,7 +18738,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -17246,41 +18750,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -17288,20 +18896,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17310,92 +18918,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17403,14 +19014,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17418,7 +19029,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17426,24 +19037,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17451,7 +19062,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17462,17 +19073,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17480,19 +19091,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17501,20 +19112,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17522,18 +19133,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "Configuration arbitraire d'outils : la table ``[tool]``" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17541,7 +19152,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17549,19 +19160,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17659,7 +19276,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17667,7 +19294,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17675,58 +19302,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17734,7 +19361,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17743,13 +19370,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17758,7 +19385,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17767,18 +19394,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17786,7 +19413,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17796,11 +19423,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17808,15 +19435,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17824,11 +19451,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17836,29 +19463,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17867,11 +19508,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17879,14 +19520,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17895,28 +19536,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17945,15 +19586,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17961,23 +19610,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17993,44 +19642,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -18038,7 +19687,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -18047,7 +19696,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -18055,22 +19738,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -18079,18 +19762,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "Traductions" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -18100,11 +19787,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -18114,7 +19801,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -18122,7 +19809,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -18130,12 +19817,12 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy msgid "Installers" msgstr "Installateur" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -18145,7 +19832,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -18155,14 +19842,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -18172,7 +19859,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -18180,7 +19867,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -18189,71 +19876,73 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +#, fuzzy +#| msgid "This would end up looking like::" +msgid "This would end up looking like:" msgstr "Cela ressemblerait à ::" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -18262,59 +19951,82 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 +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:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 +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:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 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)." +"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:240 +#: ../source/specifications/simple-repository-api.rst:285 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 #, fuzzy msgid "Clients" msgstr "Contenu" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18323,7 +20035,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18335,7 +20047,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18345,18 +20057,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18364,11 +20076,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18376,7 +20088,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18386,7 +20098,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18396,7 +20108,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18404,28 +20116,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18434,38 +20146,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "Traductions" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18473,19 +20185,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy msgid "Project List" msgstr "Projet" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 #, fuzzy msgid "As an example:" msgstr "Exemples" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18540,7 +20258,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18598,14 +20345,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18615,7 +20362,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18623,44 +20370,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18669,7 +20434,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18680,7 +20445,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18688,7 +20483,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18752,12 +20551,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "Traductions" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18766,65 +20565,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18832,7 +20631,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18843,7 +20642,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18852,33 +20651,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18888,7 +20687,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18898,7 +20697,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18906,7 +20705,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18917,22 +20716,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18941,25 +20740,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18967,13 +20766,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18983,18 +20782,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -19002,7 +20801,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -19012,7 +20811,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -19020,11 +20819,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -19035,7 +20834,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -19043,7 +20842,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -19052,7 +20851,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -19060,7 +20859,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -19070,20 +20869,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -19091,7 +20890,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -19100,18 +20899,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -19119,13 +20918,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -19134,23 +20933,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -19159,217 +20958,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -#, fuzzy -msgid "Additional file information" -msgstr "Outils supplémentaires" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19402,11 +21052,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19416,11 +21066,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19429,20 +21079,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19450,29 +21100,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19480,21 +21139,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19502,7 +21161,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19512,11 +21171,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19524,113 +21183,123 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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 +#, fuzzy +#| msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" +"Mars 2001 : Les métadonnées de base 1.0 ont été approuvées grâce au :pep:" +"`241`." + #: ../source/specifications/version-specifiers.rst:7 #: ../source/specifications/version-specifiers.rst:782 msgid "Version specifiers" @@ -22295,7 +23964,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22552,7 +24221,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22561,24 +24230,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22587,31 +24256,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22619,21 +24300,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22642,57 +24323,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22790,23 +24474,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22814,28 +24498,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22843,44 +24527,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages `, 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 " @@ -1884,7 +2582,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2678,49 +3376,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2729,7 +3469,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2737,7 +3477,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2745,32 +3485,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2780,21 +3520,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2803,31 +3543,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2837,48 +3577,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2886,11 +3626,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2899,11 +3639,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2911,49 +3651,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2962,21 +3722,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2985,11 +3745,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -2997,15 +3757,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3013,21 +3773,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3179,7 +3939,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3536,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4224,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5904,6 +6664,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8556,13 +9641,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8570,11 +9656,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8584,29 +9670,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8614,37 +9700,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8653,98 +9739,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8752,93 +9838,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +9975,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8880,26 +10069,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8907,28 +10096,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8936,26 +10125,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11871,23 +13060,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11895,7 +13091,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11903,64 +13099,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11968,28 +13164,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -11998,22 +13194,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12021,29 +13217,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12053,7 +13262,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12061,7 +13270,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12069,17 +13278,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12087,39 +13296,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12129,11 +13338,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12142,38 +13351,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12181,7 +13390,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12189,18 +13398,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12209,7 +13418,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12220,7 +13429,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12238,7 +13447,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12247,37 +13456,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12285,11 +13494,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12399,8 +13621,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12507,8 +13729,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13128,24 +14350,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13153,28 +14384,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13185,33 +14416,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13220,89 +14451,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13647,11 +14878,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13663,11 +14894,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13675,7 +14906,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13683,17 +14914,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13704,11 +14934,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13717,13 +14947,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13732,7 +14962,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13745,7 +14975,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13755,7 +14985,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13763,20 +14993,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13786,194 +15016,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13981,24 +15212,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14025,7 +15256,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14178,17 +15409,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14197,7 +15428,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14205,7 +15436,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14213,34 +15444,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14249,13 +15480,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14263,7 +15494,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14271,24 +15502,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14296,22 +15527,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14322,65 +15553,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14388,106 +15619,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15709,7 +16940,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15774,7 +17005,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16062,12 +17293,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16121,90 +17352,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16212,7 +17644,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16223,14 +17655,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16239,69 +17671,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16312,11 +17744,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16326,7 +17758,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16334,11 +17766,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16346,13 +17778,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16363,23 +17795,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16387,11 +17819,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16401,33 +17833,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16435,13 +17867,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16450,34 +17882,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16718,7 +18158,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16730,81 +18170,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16818,7 +18259,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16827,7 +18268,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16839,41 +18280,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16881,20 +18426,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16903,92 +18448,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16996,14 +18544,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17011,7 +18559,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17019,24 +18567,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17044,7 +18592,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17055,17 +18603,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17073,19 +18621,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17094,20 +18642,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17115,18 +18663,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17134,7 +18682,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17142,19 +18690,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17252,7 +18806,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17260,7 +18824,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17268,58 +18832,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17327,7 +18891,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17336,13 +18900,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17351,7 +18915,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17360,18 +18924,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17379,7 +18943,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17389,11 +18953,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17401,15 +18965,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17417,11 +18981,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17429,29 +18993,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17460,11 +19038,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17472,14 +19050,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17488,28 +19066,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17537,15 +19115,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17553,23 +19139,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17585,44 +19171,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17630,7 +19216,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17639,7 +19225,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17647,22 +19267,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17671,17 +19291,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17691,11 +19315,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17705,7 +19329,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17713,7 +19337,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17721,11 +19345,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17735,7 +19359,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17745,14 +19369,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17762,7 +19386,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17770,7 +19394,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17779,71 +19403,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17852,7 +19476,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17862,48 +19486,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17912,7 +19559,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17924,7 +19571,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17934,18 +19581,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17953,11 +19600,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17965,7 +19612,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17975,7 +19622,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17985,7 +19632,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17993,28 +19640,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18023,37 +19670,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18061,19 +19708,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18126,7 +19779,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18183,14 +19865,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18200,7 +19882,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18208,44 +19890,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18254,7 +19954,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18265,7 +19965,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18273,7 +20003,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18336,11 +20070,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18349,65 +20083,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18415,7 +20149,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18426,7 +20160,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18435,33 +20169,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18471,7 +20205,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18481,7 +20215,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18489,7 +20223,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18500,22 +20234,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18524,25 +20258,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18550,13 +20284,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18566,18 +20300,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18585,7 +20319,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18595,7 +20329,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18603,11 +20337,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18618,7 +20352,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18626,7 +20360,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18635,7 +20369,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18643,7 +20377,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18653,20 +20387,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18674,7 +20408,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18683,18 +20417,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18702,13 +20436,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18717,23 +20451,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18742,216 +20476,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18984,11 +20570,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18998,11 +20584,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19011,20 +20597,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19032,29 +20618,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19062,21 +20657,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19084,7 +20679,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19094,11 +20689,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19106,113 +20701,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21860,7 +23461,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22117,7 +23718,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22126,24 +23727,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22152,31 +23753,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22184,21 +23797,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22207,57 +23820,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22355,23 +23971,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22379,28 +23995,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22408,44 +24024,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages `, 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 " @@ -1884,7 +2582,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2678,49 +3376,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2729,7 +3469,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2737,7 +3477,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2745,32 +3485,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2780,21 +3520,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2803,31 +3543,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2837,48 +3577,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2886,11 +3626,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2899,11 +3639,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2911,49 +3651,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2962,21 +3722,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2985,11 +3745,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -2997,15 +3757,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3013,21 +3773,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3179,7 +3939,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3536,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4224,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5904,6 +6664,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8556,13 +9641,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8570,11 +9656,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8584,29 +9670,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8614,37 +9700,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8653,98 +9739,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8752,93 +9838,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +9975,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8880,26 +10069,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8907,28 +10096,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8936,26 +10125,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11871,23 +13060,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11895,7 +13091,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11903,64 +13099,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11968,28 +13164,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -11998,22 +13194,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12021,29 +13217,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12053,7 +13262,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12061,7 +13270,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12069,17 +13278,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12087,39 +13296,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12129,11 +13338,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12142,38 +13351,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12181,7 +13390,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12189,18 +13398,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12209,7 +13418,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12220,7 +13429,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12238,7 +13447,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12247,37 +13456,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12285,11 +13494,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12399,8 +13621,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12507,8 +13729,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13128,24 +14350,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13153,28 +14384,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13185,33 +14416,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13220,89 +14451,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13647,11 +14878,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13663,11 +14894,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13675,7 +14906,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13683,17 +14914,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13704,11 +14934,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13717,13 +14947,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13732,7 +14962,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13745,7 +14975,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13755,7 +14985,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13763,20 +14993,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13786,194 +15016,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13981,24 +15212,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14025,7 +15256,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14178,17 +15409,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14197,7 +15428,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14205,7 +15436,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14213,34 +15444,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14249,13 +15480,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14263,7 +15494,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14271,24 +15502,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14296,22 +15527,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14322,65 +15553,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14388,106 +15619,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15709,7 +16940,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15774,7 +17005,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16062,12 +17293,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16121,90 +17352,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16212,7 +17644,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16223,14 +17655,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16239,69 +17671,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16312,11 +17744,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16326,7 +17758,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16334,11 +17766,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16346,13 +17778,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16363,23 +17795,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16387,11 +17819,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16401,33 +17833,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16435,13 +17867,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16450,34 +17882,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16718,7 +18158,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16730,81 +18170,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16818,7 +18259,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16827,7 +18268,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16839,41 +18280,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16881,20 +18426,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16903,92 +18448,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16996,14 +18544,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17011,7 +18559,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17019,24 +18567,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17044,7 +18592,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17055,17 +18603,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17073,19 +18621,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17094,20 +18642,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17115,18 +18663,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17134,7 +18682,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17142,19 +18690,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17252,7 +18806,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17260,7 +18824,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17268,58 +18832,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17327,7 +18891,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17336,13 +18900,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17351,7 +18915,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17360,18 +18924,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17379,7 +18943,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17389,11 +18953,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17401,15 +18965,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17417,11 +18981,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17429,29 +18993,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17460,11 +19038,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17472,14 +19050,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17488,28 +19066,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17537,15 +19115,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17553,23 +19139,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17585,44 +19171,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17630,7 +19216,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17639,7 +19225,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17647,22 +19267,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17671,17 +19291,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17691,11 +19315,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17705,7 +19329,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17713,7 +19337,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17721,11 +19345,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17735,7 +19359,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17745,14 +19369,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17762,7 +19386,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17770,7 +19394,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17779,71 +19403,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17852,7 +19476,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17862,48 +19486,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17912,7 +19559,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17924,7 +19571,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17934,18 +19581,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17953,11 +19600,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17965,7 +19612,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17975,7 +19622,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17985,7 +19632,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17993,28 +19640,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18023,37 +19670,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18061,19 +19708,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18126,7 +19779,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18183,14 +19865,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18200,7 +19882,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18208,44 +19890,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18254,7 +19954,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18265,7 +19965,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18273,7 +20003,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18336,11 +20070,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18349,65 +20083,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18415,7 +20149,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18426,7 +20160,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18435,33 +20169,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18471,7 +20205,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18481,7 +20215,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18489,7 +20223,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18500,22 +20234,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18524,25 +20258,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18550,13 +20284,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18566,18 +20300,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18585,7 +20319,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18595,7 +20329,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18603,11 +20337,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18618,7 +20352,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18626,7 +20360,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18635,7 +20369,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18643,7 +20377,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18653,20 +20387,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18674,7 +20408,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18683,18 +20417,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18702,13 +20436,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18717,23 +20451,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18742,216 +20476,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18984,11 +20570,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18998,11 +20584,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19011,20 +20597,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19032,29 +20618,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19062,21 +20657,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19084,7 +20679,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19094,11 +20689,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19106,113 +20701,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21860,7 +23461,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22117,7 +23718,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22126,24 +23727,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22152,31 +23753,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22184,21 +23797,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22207,57 +23820,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22355,23 +23971,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22379,28 +23995,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22408,44 +24024,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages `, 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 " @@ -1884,7 +2582,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2678,49 +3376,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2729,7 +3469,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2737,7 +3477,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2745,32 +3485,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2780,21 +3520,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2803,31 +3543,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2837,48 +3577,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2886,11 +3626,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2899,11 +3639,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2911,49 +3651,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2962,21 +3722,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2985,11 +3745,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -2997,15 +3757,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3013,21 +3773,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3179,7 +3939,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3536,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4224,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5904,6 +6664,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8556,13 +9641,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8570,11 +9656,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8584,29 +9670,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8614,37 +9700,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8653,98 +9739,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8752,93 +9838,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +9975,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8880,26 +10069,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8907,28 +10096,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8936,26 +10125,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11871,23 +13060,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11895,7 +13091,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11903,64 +13099,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11968,28 +13164,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -11998,22 +13194,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12021,29 +13217,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12053,7 +13262,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12061,7 +13270,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12069,17 +13278,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12087,39 +13296,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12129,11 +13338,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12142,38 +13351,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12181,7 +13390,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12189,18 +13398,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12209,7 +13418,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12220,7 +13429,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12238,7 +13447,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12247,37 +13456,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12285,11 +13494,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12399,8 +13621,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12507,8 +13729,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13128,24 +14350,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13153,28 +14384,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13185,33 +14416,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13220,89 +14451,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13647,11 +14878,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13663,11 +14894,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13675,7 +14906,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13683,17 +14914,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13704,11 +14934,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13717,13 +14947,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13732,7 +14962,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13745,7 +14975,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13755,7 +14985,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13763,20 +14993,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13786,194 +15016,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13981,24 +15212,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14025,7 +15256,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14178,17 +15409,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14197,7 +15428,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14205,7 +15436,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14213,34 +15444,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14249,13 +15480,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14263,7 +15494,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14271,24 +15502,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14296,22 +15527,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14322,65 +15553,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14388,106 +15619,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15709,7 +16940,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15774,7 +17005,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16062,12 +17293,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16121,90 +17352,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16212,7 +17644,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16223,14 +17655,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16239,69 +17671,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16312,11 +17744,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16326,7 +17758,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16334,11 +17766,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16346,13 +17778,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16363,23 +17795,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16387,11 +17819,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16401,33 +17833,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16435,13 +17867,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16450,34 +17882,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16718,7 +18158,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16730,81 +18170,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16818,7 +18259,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16827,7 +18268,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16839,41 +18280,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16881,20 +18426,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16903,92 +18448,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16996,14 +18544,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17011,7 +18559,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17019,24 +18567,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17044,7 +18592,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17055,17 +18603,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17073,19 +18621,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17094,20 +18642,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17115,18 +18663,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17134,7 +18682,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17142,19 +18690,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17252,7 +18806,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17260,7 +18824,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17268,58 +18832,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17327,7 +18891,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17336,13 +18900,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17351,7 +18915,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17360,18 +18924,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17379,7 +18943,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17389,11 +18953,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17401,15 +18965,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17417,11 +18981,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17429,29 +18993,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17460,11 +19038,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17472,14 +19050,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17488,28 +19066,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17537,15 +19115,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17553,23 +19139,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17585,44 +19171,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17630,7 +19216,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17639,7 +19225,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17647,22 +19267,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17671,17 +19291,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17691,11 +19315,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17705,7 +19329,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17713,7 +19337,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17721,11 +19345,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17735,7 +19359,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17745,14 +19369,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17762,7 +19386,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17770,7 +19394,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17779,71 +19403,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17852,7 +19476,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17862,48 +19486,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17912,7 +19559,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17924,7 +19571,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17934,18 +19581,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17953,11 +19600,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17965,7 +19612,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17975,7 +19622,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17985,7 +19632,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17993,28 +19640,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18023,37 +19670,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18061,19 +19708,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18126,7 +19779,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18183,14 +19865,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18200,7 +19882,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18208,44 +19890,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18254,7 +19954,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18265,7 +19965,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18273,7 +20003,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18336,11 +20070,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18349,65 +20083,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18415,7 +20149,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18426,7 +20160,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18435,33 +20169,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18471,7 +20205,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18481,7 +20215,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18489,7 +20223,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18500,22 +20234,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18524,25 +20258,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18550,13 +20284,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18566,18 +20300,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18585,7 +20319,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18595,7 +20329,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18603,11 +20337,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18618,7 +20352,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18626,7 +20360,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18635,7 +20369,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18643,7 +20377,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18653,20 +20387,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18674,7 +20408,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18683,18 +20417,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18702,13 +20436,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18717,23 +20451,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18742,216 +20476,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18984,11 +20570,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18998,11 +20584,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19011,20 +20597,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19032,29 +20618,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19062,21 +20657,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19084,7 +20679,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19094,11 +20689,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19106,113 +20701,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21860,7 +23461,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22117,7 +23718,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22126,24 +23727,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22152,31 +23753,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22184,21 +23797,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22207,57 +23820,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22355,23 +23971,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22379,28 +23995,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22408,44 +24024,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Hindi `, 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 " @@ -1900,7 +2598,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2696,49 +3394,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2747,7 +3487,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2755,7 +3495,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2763,34 +3503,34 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy #| msgid "Project name" msgid "Project Root Directory" msgstr "परियोजना" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2800,23 +3540,23 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata" msgstr "परियोजना" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2825,33 +3565,33 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata Key" msgstr "परियोजना" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2861,48 +3601,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2910,11 +3650,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2923,11 +3663,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2935,49 +3675,71 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +#| msgid "Project name" +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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2986,21 +3748,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3009,11 +3771,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3021,15 +3783,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3037,21 +3799,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3203,7 +3965,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3560,7 +4322,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4254,7 +5016,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5954,6 +6716,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8610,13 +9697,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8624,11 +9712,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8638,29 +9726,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8668,37 +9756,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8707,98 +9795,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8806,93 +9894,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8901,31 +10031,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8934,26 +10125,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8961,28 +10152,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8990,26 +10181,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11925,23 +13116,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11949,7 +13147,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11957,64 +13155,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12022,28 +13220,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12052,22 +13250,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12075,29 +13273,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12107,7 +13318,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12115,7 +13326,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12123,17 +13334,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12141,39 +13352,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12183,11 +13394,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12196,38 +13407,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12235,7 +13446,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12243,18 +13454,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12263,7 +13474,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12274,7 +13485,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12292,7 +13503,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12301,37 +13512,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12339,11 +13550,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12453,8 +13677,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12561,8 +13785,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13182,24 +14406,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13207,28 +14440,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13239,33 +14472,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13274,89 +14507,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13701,11 +14934,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13717,11 +14950,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13729,7 +14962,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13737,17 +14970,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13758,11 +14990,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13771,13 +15003,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13786,7 +15018,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13799,7 +15031,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13809,7 +15041,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13817,20 +15049,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13840,197 +15072,198 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 #, fuzzy msgid "Python equivalent" msgstr "पाइथॉन संस्करण" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 #, fuzzy msgid "``python_version``" msgstr "पाइथॉन संस्करण" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 #, fuzzy msgid "``python_full_version``" msgstr "पाइथॉन संस्करण" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14038,24 +15271,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14082,7 +15315,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14235,17 +15468,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14254,7 +15487,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14262,7 +15495,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14270,34 +15503,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14306,13 +15539,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14320,7 +15553,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14328,24 +15561,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14353,22 +15586,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14379,65 +15612,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14445,106 +15678,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15768,7 +17001,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15833,7 +17066,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16121,12 +17354,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16180,90 +17413,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16271,7 +17705,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16282,14 +17716,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16298,69 +17732,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16371,11 +17805,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16385,7 +17819,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16393,11 +17827,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16405,13 +17839,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16422,23 +17856,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16446,11 +17880,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16460,33 +17894,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16494,13 +17928,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16509,34 +17943,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16777,7 +18219,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16789,81 +18231,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16877,7 +18320,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16886,7 +18329,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16898,41 +18341,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16940,20 +18487,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16962,92 +18509,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17055,14 +18605,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17070,7 +18620,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17078,24 +18628,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17103,7 +18653,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17114,17 +18664,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17132,19 +18682,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17153,20 +18703,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17174,18 +18724,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17193,7 +18743,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17201,19 +18751,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17311,7 +18867,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17319,7 +18885,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17327,58 +18893,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17386,7 +18952,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17395,13 +18961,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17410,7 +18976,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17419,18 +18985,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17438,7 +19004,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17448,11 +19014,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17460,15 +19026,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17476,11 +19042,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17488,29 +19054,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17519,11 +19099,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17531,14 +19111,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17547,28 +19127,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17596,15 +19176,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17612,23 +19200,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17644,44 +19232,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17689,7 +19277,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17698,7 +19286,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17706,22 +19328,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17730,17 +19352,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17750,11 +19376,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17764,7 +19390,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17772,7 +19398,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17780,13 +19406,13 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy #| msgid "Installing packages" msgid "Installers" msgstr "पैकेज प्रतिष्ठापन" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17796,7 +19422,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17806,14 +19432,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17823,7 +19449,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17831,7 +19457,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17840,71 +19466,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17913,7 +19539,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17923,48 +19549,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17973,7 +19622,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17985,7 +19634,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17995,18 +19644,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18014,11 +19663,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18026,7 +19675,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18036,7 +19685,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18046,7 +19695,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18054,28 +19703,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18084,37 +19733,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18122,19 +19771,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy #| msgid "Project name" msgid "Project List" msgstr "परियोजना" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18189,7 +19844,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18248,14 +19932,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18265,7 +19949,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18273,44 +19957,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18319,7 +20021,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18330,7 +20032,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18338,7 +20070,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18401,11 +20137,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18414,65 +20150,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18480,7 +20216,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18491,7 +20227,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18500,33 +20236,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18536,7 +20272,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18546,7 +20282,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18554,7 +20290,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18565,22 +20301,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18589,25 +20325,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18615,13 +20351,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18631,18 +20367,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18650,7 +20386,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18660,7 +20396,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18668,11 +20404,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18683,7 +20419,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18691,7 +20427,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18700,7 +20436,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18708,7 +20444,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18718,20 +20454,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18739,7 +20475,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18748,18 +20484,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18767,13 +20503,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18782,23 +20518,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18807,216 +20543,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19049,11 +20637,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19063,11 +20651,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19076,20 +20664,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19097,29 +20685,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19127,21 +20724,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19149,7 +20746,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19159,11 +20756,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19171,113 +20768,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21927,7 +23530,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22184,7 +23787,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22193,24 +23796,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22219,31 +23822,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22251,21 +23866,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22274,57 +23889,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22422,23 +24040,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22446,28 +24064,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22475,44 +24093,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Indonesian `, 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 " @@ -1926,7 +2624,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy msgid "Versioning" msgstr "Penerjemahan" @@ -2725,49 +3423,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2776,7 +3516,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2784,7 +3524,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2792,32 +3532,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2827,21 +3567,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2850,31 +3590,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2884,48 +3624,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2933,11 +3673,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2946,11 +3686,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2958,49 +3698,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3009,21 +3769,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3032,11 +3792,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3044,15 +3804,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3060,21 +3820,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3226,7 +3986,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3583,7 +4343,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4276,7 +5036,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5960,6 +6720,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8618,13 +9703,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8632,11 +9718,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8646,29 +9732,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8676,37 +9762,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8715,98 +9801,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8814,93 +9900,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8909,31 +10037,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8942,26 +10131,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8969,28 +10158,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8998,26 +10187,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11933,23 +13122,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11957,7 +13153,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11965,64 +13161,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12030,28 +13226,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12060,22 +13256,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12083,29 +13279,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12115,7 +13324,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12123,7 +13332,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12131,17 +13340,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12149,39 +13358,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12191,11 +13400,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12204,38 +13413,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12243,7 +13452,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12251,18 +13460,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12271,7 +13480,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12282,7 +13491,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12300,7 +13509,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12309,37 +13518,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12347,11 +13556,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12461,8 +13683,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12569,8 +13791,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13190,24 +14412,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13215,28 +14446,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13247,33 +14478,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13282,89 +14513,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13711,11 +14942,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13727,11 +14958,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13739,7 +14970,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13747,18 +14978,17 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 #, fuzzy msgid "Versions" msgstr "Penerjemahan" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13769,11 +14999,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13782,13 +15012,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13797,7 +15027,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13810,7 +15040,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13820,7 +15050,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13828,20 +15058,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13851,194 +15081,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14046,24 +15277,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14090,7 +15321,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14243,17 +15474,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14262,7 +15493,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14270,7 +15501,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14278,34 +15509,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14314,13 +15545,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14328,7 +15559,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14336,24 +15567,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14361,22 +15592,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14387,65 +15618,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14453,106 +15684,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15776,7 +17007,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15841,7 +17072,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16131,12 +17362,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16190,90 +17421,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16281,7 +17713,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16292,14 +17724,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16308,69 +17740,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16381,11 +17813,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16395,7 +17827,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16403,11 +17835,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16415,13 +17847,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16432,23 +17864,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16456,11 +17888,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16470,33 +17902,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16504,13 +17936,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16519,34 +17951,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16787,7 +18227,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16799,81 +18239,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16887,7 +18328,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16896,7 +18337,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16908,41 +18349,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16950,20 +18495,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16972,92 +18517,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17065,14 +18613,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17080,7 +18628,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17088,24 +18636,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17113,7 +18661,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17124,17 +18672,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17142,19 +18690,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17163,20 +18711,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17184,18 +18732,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17203,7 +18751,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17211,19 +18759,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17321,7 +18875,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17329,7 +18893,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17337,58 +18901,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17396,7 +18960,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17405,13 +18969,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17420,7 +18984,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17429,18 +18993,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17448,7 +19012,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17458,11 +19022,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17470,15 +19034,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17486,11 +19050,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17498,29 +19062,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17529,11 +19107,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17541,14 +19119,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17557,28 +19135,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17606,15 +19184,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17622,23 +19208,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17654,44 +19240,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17699,7 +19285,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17708,7 +19294,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17716,22 +19336,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17740,18 +19360,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "Penerjemahan" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17761,11 +19385,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17775,7 +19399,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17783,7 +19407,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17791,13 +19415,13 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy #| msgid "Translations" msgid "Installers" msgstr "Penerjemahan" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17807,7 +19431,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17817,14 +19441,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17834,7 +19458,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17842,7 +19466,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17851,71 +19475,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17924,7 +19548,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17934,48 +19558,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17984,7 +19631,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17996,7 +19643,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18006,18 +19653,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18025,11 +19672,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18037,7 +19684,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18047,7 +19694,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18057,7 +19704,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18065,28 +19712,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18095,38 +19742,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "Penerjemahan" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18134,19 +19781,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18199,7 +19852,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18256,14 +19938,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18273,7 +19955,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18281,44 +19963,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18327,7 +20027,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18338,7 +20038,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18346,7 +20076,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18409,12 +20143,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "Penerjemahan" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18423,65 +20157,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18489,7 +20223,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18500,7 +20234,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18509,33 +20243,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18545,7 +20279,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18555,7 +20289,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18563,7 +20297,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18574,22 +20308,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18598,25 +20332,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18624,13 +20358,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18640,18 +20374,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18659,7 +20393,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18669,7 +20403,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18677,11 +20411,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18692,7 +20426,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18700,7 +20434,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18709,7 +20443,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18717,7 +20451,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18727,20 +20461,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18748,7 +20482,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18757,18 +20491,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18776,13 +20510,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18791,23 +20525,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18816,216 +20550,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19058,11 +20644,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19072,11 +20658,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19085,20 +20671,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19106,29 +20692,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19136,21 +20731,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19158,7 +20753,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19168,11 +20763,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19180,113 +20775,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21943,7 +23544,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22200,7 +23801,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22209,24 +23810,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22235,31 +23836,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22267,21 +23880,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "Membuat sebuah LICENSE" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22290,57 +23903,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22438,23 +24054,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "dan *import* package tersebut:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22462,28 +24078,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22491,44 +24107,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2021, 2022, 2023, 2024. +# moto kawasaki , 2021, 2022, 2023, 2024, 2025. # tsutsu3 , 2023. # nikkie , 2023. # Rafael Fontenelle , 2024. @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-06-19 16:34+0000\n" -"PO-Revision-Date: 2024-12-25 20:00+0000\n" +"PO-Revision-Date: 2025-02-15 03:43+0000\n" "Last-Translator: moto kawasaki \n" "Language-Team: Japanese \n" @@ -19,7 +19,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.10-dev\n" +"X-Generator: Weblate 5.10\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -33,15 +33,15 @@ msgstr "|PyPUG| は貢献者を歓迎します!さまざまな貢献方法が #: ../source/contribute.rst:10 msgid "Reading the guide and giving feedback" -msgstr "このガイド文書を読んでフィードバックを伝えること" +msgstr "このガイド文書を読んでフィードバックを伝える" #: ../source/contribute.rst:11 msgid "Reviewing new contributions" -msgstr "新しい貢献内容を査読すること" +msgstr "新しい貢献内容を査読する" #: ../source/contribute.rst:12 msgid "Revising existing content" -msgstr "既存の文書を修正すること" +msgstr "既存の文書を修正する" #: ../source/contribute.rst:13 msgid "Writing new content" @@ -10599,7 +10599,7 @@ msgstr "" #: ../source/guides/tool-recommendations.rst:28 msgid "Installing packages" -msgstr "パッケージのインストール" +msgstr "パッケージをインストールする" #: ../source/guides/tool-recommendations.rst:30 msgid "" @@ -23017,6 +23017,11 @@ msgid "" "to the correct location. If relative, they are relative to the current URL " "as if it were HTML." msgstr "" +"JSON は URL 型をネイティブにサポートしているわけではない一方で、この API " +"における任意の値で URL " +"を表現するようなものは、それが正しい場所を指し示している限り絶対パスであって" +"も相対パスであっても構いません。相対パスの場合には、恰も HTML " +"であるかのように、現在の URL に対する相対パスになっています。" #: ../source/specifications/simple-repository-api.rst:368 msgid "" @@ -23529,6 +23534,13 @@ msgid "" "pypi.simple.latest+json`` request that returns a ``v1.x`` response should " "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" +"この仕様では、メタバージョン ``latest`` " +"が使われているのであれば、そのサーバは、実際のバージョンのための Content-" +"Type をレスポンスの中に伴わなければならないということを **要求しています** " +"(すなわち、 ``Accept: application/vnd.pypi.simple.latest+json`` " +"を含んだリクエストが ``v1.x`` を返す時、レスポンスには ``application/" +"vnd.pypi.simple.v1+json`` を値とする ``Content-Type`` " +"が入っていなければならないということです) 。" #: ../source/specifications/simple-repository-api.rst:623 msgid "" @@ -28723,11 +28735,11 @@ msgid "" msgstr "" "``distribution-1.0.data/`` " "の下の全てのサブツリーを、その目的地となるディレクトリパスに移動しましょう。 " -"``distribution-1.0.data/(purelib|platlib|headers|scripts|data)`` のような " -"``distribution-1.0.data/`` の下のサブディレクトリは、それぞれ、目的地となるデ" -"ィレクトリの辞書のキーになっています。このようなサブディレクトリ群は、 :ref:`" -"sysconfig によって定義されるインストールパス群 ` " -"です。" +"``distribution-1.0.data/(purelib|platlib|headers|scripts|data)`` のような ``" +"distribution-1.0.data/`` " +"の下のサブディレクトリは、それぞれ、目的地となるディレクトリの辞書のキーにな" +"っています。このようなサブディレクトリ群は、 :ref:`sysconfig " +"によって定義されるインストールパス群 ` です。" #~ msgid "" #~ "A library that takes a source tree or :term:`source distribution \n" "Language-Team: Korean `, 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 " @@ -1942,7 +2640,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy msgid "Versioning" msgstr "번역" @@ -2742,51 +3440,93 @@ msgid "" 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 +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:152 +#: ../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:155 +#: ../source/glossary.rst:189 #, fuzzy msgid "Package Index" msgstr "패키지 인덱스" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 #, fuzzy msgid "Per Project Index" msgstr "프로젝트별 인덱스" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2795,7 +3535,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2803,7 +3543,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2811,34 +3551,34 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy #| msgid "Project name" msgid "Project Root Directory" msgstr "프로젝트 이름" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2848,23 +3588,23 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata" msgstr "프로젝트 이름" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2873,33 +3613,33 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata Key" msgstr "프로젝트 이름" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2909,48 +3649,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2958,11 +3698,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2971,12 +3711,12 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 #, fuzzy msgid "Requirement Specifier" msgstr "요구 사항 지정자" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2984,49 +3724,71 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +#| msgid "Project name" +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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3035,21 +3797,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3058,11 +3820,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3070,15 +3832,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3086,23 +3848,23 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy #| msgid "Project" msgid "Wheel Project" msgstr "프로젝트" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3254,7 +4016,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3611,7 +4373,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4304,7 +5066,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5994,6 +6756,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8652,13 +9739,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8666,11 +9754,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8680,29 +9768,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8710,37 +9798,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8749,98 +9837,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8848,93 +9936,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8943,31 +10073,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8976,26 +10167,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9003,28 +10194,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9032,26 +10223,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11967,23 +13158,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11991,7 +13189,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11999,64 +13197,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12064,28 +13262,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12094,22 +13292,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12117,29 +13315,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12149,7 +13360,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12157,7 +13368,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12165,17 +13376,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12183,39 +13394,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12225,11 +13436,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12238,38 +13449,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12277,7 +13488,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12285,18 +13496,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12305,7 +13516,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12316,7 +13527,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12334,7 +13545,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12343,37 +13554,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12381,11 +13592,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12495,8 +13719,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12603,8 +13827,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13224,24 +14448,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13249,28 +14482,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13281,33 +14514,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13316,89 +14549,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13746,11 +14979,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13762,11 +14995,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13774,7 +15007,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13782,18 +15015,17 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 #, fuzzy msgid "Versions" msgstr "번역" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13804,11 +15036,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13817,13 +15049,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13832,7 +15064,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13845,7 +15077,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13855,7 +15087,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13863,20 +15095,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13886,194 +15118,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14081,24 +15314,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14125,7 +15358,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14278,17 +15511,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14297,7 +15530,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14305,7 +15538,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14313,34 +15546,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14349,13 +15582,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14363,7 +15596,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14371,24 +15604,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14396,22 +15629,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14422,65 +15655,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14488,106 +15721,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15812,7 +17045,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15877,7 +17110,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16167,12 +17400,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16226,90 +17459,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16317,7 +17751,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16328,14 +17762,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16344,69 +17778,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16417,11 +17851,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16431,7 +17865,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16439,11 +17873,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16451,13 +17885,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16468,23 +17902,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16492,11 +17926,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16506,33 +17940,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16540,13 +17974,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16555,34 +17989,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16823,7 +18265,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16835,81 +18277,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16923,7 +18366,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16932,7 +18375,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16944,41 +18387,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16986,20 +18533,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17008,92 +18555,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17101,14 +18651,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17116,7 +18666,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17124,24 +18674,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17149,7 +18699,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17160,17 +18710,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17178,19 +18728,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17199,20 +18749,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17220,18 +18770,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17239,7 +18789,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17247,19 +18797,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17357,7 +18913,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17365,7 +18931,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17373,58 +18939,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17432,7 +18998,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17441,13 +19007,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17456,7 +19022,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17465,18 +19031,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17484,7 +19050,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17494,11 +19060,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17506,15 +19072,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17522,11 +19088,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17534,29 +19100,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17565,11 +19145,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17577,14 +19157,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17593,28 +19173,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17642,15 +19222,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17658,23 +19246,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17690,44 +19278,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17735,7 +19323,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17744,7 +19332,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17752,22 +19374,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17776,18 +19398,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "번역" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17797,11 +19423,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17811,7 +19437,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17819,7 +19445,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17827,13 +19453,13 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy #| msgid "Translations" msgid "Installers" msgstr "번역" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17843,7 +19469,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17853,14 +19479,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17870,7 +19496,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17878,7 +19504,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17887,71 +19513,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17960,7 +19586,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17970,48 +19596,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18020,7 +19669,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18032,7 +19681,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18042,18 +19691,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18061,11 +19710,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18073,7 +19722,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18083,7 +19732,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18093,7 +19742,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18101,28 +19750,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18131,38 +19780,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "번역" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18170,19 +19819,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy #| msgid "Project" msgid "Project List" msgstr "프로젝트" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18237,7 +19892,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18296,14 +19980,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18313,7 +19997,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18321,44 +20005,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18367,7 +20069,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18378,7 +20080,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18386,7 +20118,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18449,12 +20185,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "번역" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18463,65 +20199,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18529,7 +20265,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18540,7 +20276,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18549,33 +20285,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18585,7 +20321,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18595,7 +20331,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18603,7 +20339,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18614,22 +20350,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18638,25 +20374,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18664,13 +20400,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18680,18 +20416,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18699,7 +20435,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18709,7 +20445,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18717,11 +20453,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18732,7 +20468,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18740,7 +20476,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18749,7 +20485,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18757,7 +20493,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18767,20 +20503,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18788,7 +20524,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18797,18 +20533,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18816,13 +20552,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18831,23 +20567,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18856,216 +20592,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19098,11 +20686,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19112,11 +20700,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19125,20 +20713,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19146,29 +20734,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19176,21 +20773,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19198,7 +20795,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19208,11 +20805,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19220,113 +20817,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21984,7 +23587,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22241,7 +23844,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22250,24 +23853,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22276,31 +23879,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22308,21 +23923,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22331,57 +23946,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22479,23 +24097,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22503,28 +24121,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22532,44 +24150,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Chinese (Literary) `, 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 " @@ -1890,7 +2588,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2684,49 +3382,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2735,7 +3475,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2743,7 +3483,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2751,32 +3491,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2786,21 +3526,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2809,31 +3549,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2843,48 +3583,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2892,11 +3632,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2905,11 +3645,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2917,49 +3657,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "源码" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2968,21 +3728,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "版本指定器" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2991,11 +3751,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3003,15 +3763,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3019,21 +3779,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3185,7 +3945,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3542,7 +4302,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4230,7 +4990,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5910,6 +6670,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8562,13 +9647,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8576,11 +9662,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8590,29 +9676,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8620,37 +9706,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8659,98 +9745,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8758,93 +9844,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8853,31 +9981,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8886,26 +10075,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8913,28 +10102,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8942,26 +10131,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11877,23 +13066,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11901,7 +13097,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11909,64 +13105,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11974,28 +13170,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12004,22 +13200,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12027,29 +13223,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12059,7 +13268,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12067,7 +13276,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12075,17 +13284,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12093,39 +13302,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12135,11 +13344,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12148,38 +13357,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12187,7 +13396,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12195,18 +13404,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12215,7 +13424,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12226,7 +13435,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12244,7 +13453,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12253,37 +13462,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12291,11 +13500,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12405,8 +13627,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12513,8 +13735,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13134,24 +14356,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13159,28 +14390,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13191,33 +14422,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13226,89 +14457,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13653,11 +14884,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13669,11 +14900,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13681,7 +14912,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13689,17 +14920,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13710,11 +14940,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13723,13 +14953,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13738,7 +14968,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13751,7 +14981,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13761,7 +14991,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13769,20 +14999,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13792,194 +15022,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13987,24 +15218,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14031,7 +15262,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14184,17 +15415,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14203,7 +15434,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14211,7 +15442,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14219,34 +15450,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14255,13 +15486,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14269,7 +15500,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14277,24 +15508,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14302,22 +15533,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14328,65 +15559,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14394,106 +15625,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15715,7 +16946,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15780,7 +17011,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16068,12 +17299,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16127,90 +17358,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16218,7 +17650,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16229,14 +17661,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16245,69 +17677,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16318,11 +17750,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16332,7 +17764,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16340,11 +17772,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16352,13 +17784,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16369,23 +17801,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16393,11 +17825,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16407,33 +17839,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16441,13 +17873,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16456,34 +17888,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16724,7 +18164,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16736,81 +18176,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16824,7 +18265,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16833,7 +18274,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16845,41 +18286,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16887,20 +18432,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16909,92 +18454,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17002,14 +18550,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17017,7 +18565,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17025,24 +18573,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17050,7 +18598,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17061,17 +18609,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17079,19 +18627,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17100,20 +18648,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17121,18 +18669,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17140,7 +18688,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17148,19 +18696,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17258,7 +18812,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17266,7 +18830,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17274,58 +18838,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17333,7 +18897,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17342,13 +18906,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17357,7 +18921,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17366,18 +18930,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17385,7 +18949,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17395,11 +18959,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17407,15 +18971,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17423,11 +18987,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17435,29 +18999,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17466,11 +19044,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17478,14 +19056,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17494,28 +19072,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17543,15 +19121,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17559,23 +19145,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17591,44 +19177,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17636,7 +19222,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17645,7 +19231,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17653,22 +19273,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17677,17 +19297,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17697,11 +19321,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17711,7 +19335,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17719,7 +19343,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17727,11 +19351,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17741,7 +19365,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17751,14 +19375,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17768,7 +19392,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17776,7 +19400,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17785,71 +19409,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17858,7 +19482,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17868,48 +19492,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17918,7 +19565,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17930,7 +19577,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17940,18 +19587,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17959,11 +19606,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17971,7 +19618,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17981,7 +19628,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17991,7 +19638,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17999,28 +19646,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18029,37 +19676,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18067,19 +19714,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18132,7 +19785,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18189,14 +19871,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18206,7 +19888,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18214,44 +19896,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18260,7 +19960,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18271,7 +19971,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18279,7 +20009,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18342,11 +20076,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18355,65 +20089,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18421,7 +20155,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18432,7 +20166,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18441,33 +20175,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18477,7 +20211,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18487,7 +20221,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18495,7 +20229,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18506,22 +20240,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18530,25 +20264,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18556,13 +20290,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18572,18 +20306,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18591,7 +20325,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18601,7 +20335,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18609,11 +20343,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18624,7 +20358,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18632,7 +20366,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18641,7 +20375,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18649,7 +20383,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18659,20 +20393,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18680,7 +20414,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18689,18 +20423,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18708,13 +20442,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18723,23 +20457,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18748,216 +20482,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18990,11 +20576,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19004,11 +20590,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19017,20 +20603,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19038,29 +20624,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19068,21 +20663,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19090,7 +20685,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19100,11 +20695,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19112,113 +20707,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21866,7 +23467,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22123,7 +23724,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22132,24 +23733,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22158,31 +23759,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22190,21 +23803,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22213,57 +23826,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22361,23 +23977,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22385,28 +24001,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22414,44 +24030,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Macedonian `, 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 +#, fuzzy +#| msgid "Binary Distribution" +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 " @@ -1890,7 +2590,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2686,49 +3386,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2737,7 +3479,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2745,7 +3487,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2753,32 +3495,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2788,21 +3530,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2811,31 +3553,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2845,48 +3587,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2894,11 +3636,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2907,11 +3649,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2919,49 +3661,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2970,21 +3732,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2993,11 +3755,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3005,15 +3767,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3021,21 +3783,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3187,7 +3949,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3544,7 +4306,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4232,7 +4994,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5912,6 +6674,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8566,13 +9653,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8580,11 +9668,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8594,29 +9682,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8624,37 +9712,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8663,98 +9751,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8762,93 +9850,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8857,31 +9987,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8890,26 +10081,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8917,28 +10108,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8946,26 +10137,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11881,23 +13072,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11905,7 +13103,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11913,64 +13111,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11978,28 +13176,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12008,22 +13206,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12031,29 +13229,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12063,7 +13274,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12071,7 +13282,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12079,17 +13290,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12097,39 +13308,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12139,11 +13350,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12152,38 +13363,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12191,7 +13402,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12199,18 +13410,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12219,7 +13430,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12230,7 +13441,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12248,7 +13459,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12257,37 +13468,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12295,11 +13506,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12409,8 +13633,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12517,8 +13741,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13138,24 +14362,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13163,28 +14396,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13195,33 +14428,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13230,89 +14463,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13657,11 +14890,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13673,11 +14906,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13685,7 +14918,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13693,17 +14926,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13714,11 +14946,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13727,13 +14959,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13742,7 +14974,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13755,7 +14987,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13765,7 +14997,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13773,20 +15005,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13796,194 +15028,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13991,24 +15224,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14035,7 +15268,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14188,17 +15421,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14207,7 +15440,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14215,7 +15448,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14223,34 +15456,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14259,13 +15492,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14273,7 +15506,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14281,24 +15514,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14306,22 +15539,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14332,65 +15565,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14398,106 +15631,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15719,7 +16952,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15784,7 +17017,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16072,12 +17305,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16131,90 +17364,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16222,7 +17656,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16233,14 +17667,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16249,69 +17683,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16322,11 +17756,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16336,7 +17770,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16344,11 +17778,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16356,13 +17790,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16373,23 +17807,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16397,11 +17831,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16411,33 +17845,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16445,13 +17879,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16460,34 +17894,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16728,7 +18170,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16740,81 +18182,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16828,7 +18271,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16837,7 +18280,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16849,41 +18292,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16891,20 +18438,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16913,92 +18460,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17006,14 +18556,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17021,7 +18571,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17029,24 +18579,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17054,7 +18604,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17065,17 +18615,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17083,19 +18633,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17104,20 +18654,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17125,18 +18675,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17144,7 +18694,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17152,19 +18702,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17262,7 +18818,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17270,7 +18836,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17278,58 +18844,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17337,7 +18903,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17346,13 +18912,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17361,7 +18927,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17370,18 +18936,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17389,7 +18955,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17399,11 +18965,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17411,15 +18977,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17427,11 +18993,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17439,29 +19005,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17470,11 +19050,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17482,14 +19062,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17498,28 +19078,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17547,15 +19127,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17563,23 +19151,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17595,44 +19183,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17640,7 +19228,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17649,7 +19237,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17657,22 +19279,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17681,17 +19303,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17701,11 +19327,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17715,7 +19341,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17723,7 +19349,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17731,11 +19357,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17745,7 +19371,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17755,14 +19381,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17772,7 +19398,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17780,7 +19406,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17789,71 +19415,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17862,7 +19488,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17872,48 +19498,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17922,7 +19571,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17934,7 +19583,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17944,18 +19593,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17963,11 +19612,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17975,7 +19624,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17985,7 +19634,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17995,7 +19644,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18003,28 +19652,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18033,37 +19682,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18071,19 +19720,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18136,7 +19791,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18193,14 +19877,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18210,7 +19894,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18218,44 +19902,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18264,7 +19966,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18275,7 +19977,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18283,7 +20015,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18346,11 +20082,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18359,65 +20095,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18425,7 +20161,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18436,7 +20172,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18445,33 +20181,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18481,7 +20217,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18491,7 +20227,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18499,7 +20235,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18510,22 +20246,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18534,25 +20270,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18560,13 +20296,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18576,18 +20312,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18595,7 +20331,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18605,7 +20341,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18613,11 +20349,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18628,7 +20364,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18636,7 +20372,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18645,7 +20381,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18653,7 +20389,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18663,20 +20399,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18684,7 +20420,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18693,18 +20429,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18712,13 +20448,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18727,23 +20463,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18752,216 +20488,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18994,11 +20582,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19008,11 +20596,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19021,20 +20609,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19042,29 +20630,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19072,21 +20669,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19094,7 +20691,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19104,11 +20701,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19116,113 +20713,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21870,7 +23473,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22127,7 +23730,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22136,24 +23739,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22162,31 +23765,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22194,21 +23809,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22217,57 +23832,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22365,23 +23983,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22389,28 +24007,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22418,44 +24036,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2025. +msgid "" +msgstr "" +"Project-Id-Version: Python Packaging User Guide\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-01-25 14:18+0000\n" +"Last-Translator: Prachi Joshi \n" +"Language-Team: Marathi \n" +"Language: mr\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.10-dev\n" + +#: ../source/contribute.rst:5 +msgid "Contribute to this guide" +msgstr "" + +#: ../source/contribute.rst:7 +msgid "" +"The |PyPUG| welcomes contributors! There are lots of ways to help out, " +"including:" +msgstr "" + +#: ../source/contribute.rst:10 +msgid "Reading the guide and giving feedback" +msgstr "" + +#: ../source/contribute.rst:11 +msgid "Reviewing new contributions" +msgstr "" + +#: ../source/contribute.rst:12 +msgid "Revising existing content" +msgstr "" + +#: ../source/contribute.rst:13 +msgid "Writing new content" +msgstr "" + +#: ../source/contribute.rst:14 +msgid "Translate 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:105 +msgid "**Do not translate the text in reference directly**" +msgstr "" + +#: ../source/contribute.rst:107 +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:124 +msgid "Building the guide locally" +msgstr "" + +#: ../source/contribute.rst:126 +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:130 +msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" +msgstr "" + +#: ../source/contribute.rst:137 +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:141 +msgid "" +"To build the guide, run the following shell command in the project's root " +"folder:" +msgstr "" + +#: ../source/contribute.rst:147 +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:152 +msgid "" +"You can build the guide and serve it via an HTTP server using the following " +"command:" +msgstr "" + +#: ../source/contribute.rst:159 +msgid "The guide will be browsable via http://localhost:8000." +msgstr "" + +#: ../source/contribute.rst:163 +msgid "Where the guide is deployed" +msgstr "" + +#: ../source/contribute.rst:165 +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:171 +msgid "Style guide" +msgstr "" + +#: ../source/contribute.rst:173 +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:180 +msgid "Purpose" +msgstr "" + +#: ../source/contribute.rst:182 +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:187 +msgid "Scope" +msgstr "" + +#: ../source/contribute.rst:189 +msgid "" +"The guide is meant to answer questions and solve problems with accurate and " +"focused recommendations." +msgstr "" + +#: ../source/contribute.rst:192 +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:200 +msgid "Audience" +msgstr "" + +#: ../source/contribute.rst:202 +msgid "The audience of this guide is anyone who uses Python with packages." +msgstr "" + +#: ../source/contribute.rst:204 +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:208 +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:214 +msgid "Voice and tone" +msgstr "" + +#: ../source/contribute.rst:216 +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:219 +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:224 +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:231 +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:238 +msgid "Conventions and mechanics" +msgstr "" + +#: ../source/contribute.rst:246 +msgid "**Write to the reader**" +msgstr "" + +#: ../source/contribute.rst:241 +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:252 +msgid "**State assumptions**" +msgstr "" + +#: ../source/contribute.rst:249 +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:257 +msgid "**Cross-reference generously**" +msgstr "" + +#: ../source/contribute.rst:255 +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:267 +msgid "**Respect naming practices**" +msgstr "" + +#: ../source/contribute.rst:260 +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:276 +msgid "**Use a gender-neutral style**" +msgstr "" + +#: ../source/contribute.rst:270 +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:288 +msgid "**Headings**" +msgstr "" + +#: ../source/contribute.rst:279 +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:284 +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:291 +msgid "**Numbers**" +msgstr "" + +#: ../source/contribute.rst:291 +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 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:362 +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 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:723 +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 specicifcation :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 +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:194 +#: ../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:357 +#: ../source/specifications/version-specifiers.rst:1069 +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:501 +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 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:73 +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 +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:97 +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 +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 initizalize the command-line interface here:" +msgstr "" + +#: ../source/guides/creating-command-line-tools.rst:111 +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:117 +msgid "``pyproject.toml``" +msgstr "" + +#: ../source/guides/creating-command-line-tools.rst:119 +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:122 +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:129 +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 +msgid "Installing the package with ``pipx``" +msgstr "" + +#: ../source/guides/creating-command-line-tools.rst:136 +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 +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 +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 +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 +msgid "" +"This syntax is a bit unpractical, 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 +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 +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 +msgid "Conclusion" +msgstr "" + +#: ../source/guides/creating-command-line-tools.rst:187 +msgid "" +"You know by now how to package a command-line application written in Python. " +"A further step could be to distribute you 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:147 +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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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/pyproject-toml`" +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:163 +msgid "Signing the distribution packages" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:165 +msgid "" +"The following job signs the distribution packages with `Sigstore`_, the same " +"artifact signing system `used to sign CPython `_." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:168 +msgid "" +"Firstly, it uses the `sigstore/gh-action-sigstore-python GitHub Action`_ to " +"sign the distribution packages. In the next step, an empty GitHub Release " +"from the current tag is created using the ``gh`` CLI. Note this step can be " +"further customised. See the `gh release documentation `_ as a reference." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:176 +msgid "" +"You may need to manage your ``GITHUB_TOKEN`` permissions to enable creating " +"the GitHub Release. See the `GitHub documentation `_ for " +"instructions. Specifically, the token needs the ``contents: write`` " +"permission." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:182 +msgid "Finally, the signed distributions are uploaded to the GitHub Release." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:192 +msgid "" +"This is a replacement for GPG signatures, for which support has been " +"`removed from PyPI `_. " +"However, this job is not mandatory for uploading to PyPI and can be omitted." +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:198 +msgid "Separate workflow for publishing to TestPyPI" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:200 +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:210 +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:214 +msgid "The whole CI/CD workflow" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:216 +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:224 +msgid "That's all, folks!" +msgstr "" + +#: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:226 +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:234 +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:242 +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 +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:94 +msgid "Static vs. dynamic metadata" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:96 +msgid "The rest of this guide is devoted to the ``[project]`` table." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:98 +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:102 +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:113 +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:119 +msgid "Basic information" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:124 +#: ../source/specifications/pyproject-toml.rst:120 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 +msgid "``name``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:126 +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:134 +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:138 +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:146 +#: ../source/specifications/pyproject-toml.rst:125 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 +msgid "``version``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:148 +msgid "Put the version of your project." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:155 +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:159 +msgid "This field is required, although it is often marked as dynamic using" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:166 +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:172 +msgid "Dependencies and requirements" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 +msgid "``dependencies``/``optional-dependencies``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:177 +msgid "If your project has dependencies, list them like this:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:189 +msgid "" +"See :ref:`Dependency specifiers ` for the full syntax " +"you can use to constrain versions." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:192 +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:205 +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:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 +msgid "``requires-python``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:216 +msgid "" +"This lets you declare the minimum version of Python that you support " +"[#requires-python-upper-bounds]_." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:228 +msgid "Creating executable scripts" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:230 +msgid "" +"To install a command as part of your package, declare it in the ``[project." +"scripts]`` table." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:238 +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:242 +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:252 +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:255 +msgid "" +"The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " +"is only relevant on Windows." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:261 +msgid "About your project" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 +msgid "``authors``/``maintainers``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:266 +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:286 +#: ../source/specifications/pyproject-toml.rst:135 +#: ../source/specifications/pyproject-toml.rst:178 +msgid "``description``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:288 +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:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 +msgid "``readme``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:301 +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:310 +msgid "The README's format is auto-detected from the extension:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:312 +msgid "``README.md`` → `GitHub-flavored Markdown `_," +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:313 +msgid "" +"``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:315 +msgid "You can also specify the format explicitly, like this:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:140 +#: ../source/specifications/pyproject-toml.rst:238 +msgid "``license``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 +msgid "or you can write the name of the license:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:384 +msgid "" +"If you are using a standard, well-known license, it is not necessary to use " +"this field. Instead, you should use 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.)" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 +#: ../source/specifications/pyproject-toml.rst:139 +#: ../source/specifications/pyproject-toml.rst:352 +msgid "``keywords``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:429 +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:441 +#: ../source/specifications/pyproject-toml.rst:133 +#: ../source/specifications/pyproject-toml.rst:362 +msgid "``classifiers``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:443 +msgid "" +"A list of PyPI classifiers that apply to your project. Check the `full list " +"of possibilities `_." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:467 +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:472 +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:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 +msgid "``urls``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:481 +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:486 +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:500 +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:504 +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:508 +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:518 +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:530 +msgid "Advanced plugins" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:532 +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:541 +msgid "See the :ref:`Plugin guide ` for more information." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:546 +msgid "A full example" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:609 +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/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 for 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:401 +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 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 "`Vagrant `_" +msgstr "" + +#: ../source/overview.rst:352 +msgid "" +"`VHD `_, `AMI `_, and :doc:`other formats " +"`" +msgstr "" + +#: ../source/overview.rst:353 +msgid "" +"`OpenStack `_ - A cloud " +"management system in Python, with extensive VM support" +msgstr "" + +#: ../source/overview.rst:356 +msgid "Bringing your own hardware" +msgstr "" + +#: ../source/overview.rst:358 +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 +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 +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:375 +msgid "A summary of technologies used to package Python applications." +msgstr "" + +#: ../source/overview.rst:375 +msgid "" +"The simplified gamut of technologies used to package Python applications." +msgstr "" + +#: ../source/overview.rst:378 +msgid "What about..." +msgstr "" + +#: ../source/overview.rst:380 +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 +msgid "Operating system packages" +msgstr "" + +#: ../source/overview.rst:386 +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:397 +msgid "" +"In most deployment pipelines, the OS package manager is just one piece of " +"the puzzle." +msgstr "" + +#: ../source/overview.rst:403 +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:412 +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 +msgid "Security" +msgstr "" + +#: ../source/overview.rst:419 +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 +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:431 +msgid "Wrap up" +msgstr "" + +#: ../source/overview.rst:433 +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 +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:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 +msgid "The .data directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:270 +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:278 +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:284 +msgid "Signed wheel files" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:286 +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:297 +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:302 +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:311 +msgid "(The hash value is the same format used in RECORD.)" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:313 +msgid "" +"If RECORD.p7s is used, it must contain a detached S/MIME format signature of " +"RECORD." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:316 +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:321 +msgid "See" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:323 +msgid "https://datatracker.ietf.org/doc/html/rfc7515" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:324 +msgid "" +"https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" +"serialization-01" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:325 +msgid "https://datatracker.ietf.org/doc/html/rfc7517" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:326 +msgid "" +"https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 +msgid "FAQ" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:334 +msgid "Wheel defines a .data directory. Should I put all my data there?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:336 +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:345 +msgid "Why does wheel include attached signatures?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:347 +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:355 +msgid "Why does wheel allow JWS signatures?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:357 +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:363 +msgid "Why does wheel also allow S/MIME signatures?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:365 +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:368 +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:373 +msgid "What's the deal with \"purelib\" vs. \"platlib\"?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:375 +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:380 +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:385 +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:393 +msgid "Is it possible to import Python code directly from a wheel file?" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:395 +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:401 +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:410 +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:427 +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:435 +#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/dependency-groups.rst:248 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 +#: ../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/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 +#: ../source/specifications/version-specifiers.rst:1266 +#: ../source/specifications/virtual-environments.rst:54 +msgid "History" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:437 +msgid "February 2013: This specification was approved through :pep:`427`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:438 +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:440 +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:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 +msgid "Appendix" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:453 +msgid "Example urlsafe-base64-nopad implementation::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:7 +msgid "Core metadata specifications" +msgstr "" + +#: ../source/specifications/core-metadata.rst:9 +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:12 +msgid "``Metadata-Version``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:13 +msgid "``Name``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:14 +msgid "``Version``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:16 +msgid "All the other fields are optional." +msgstr "" + +#: ../source/specifications/core-metadata.rst:18 +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:27 +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:30 +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:35 +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:46 +msgid "Metadata-Version" +msgstr "" + +#: ../source/specifications/core-metadata.rst:50 +msgid "" +"Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " +"\"2.1\", \"2.2\", \"2.3\", and \"2.4\"." +msgstr "" + +#: ../source/specifications/core-metadata.rst:53 +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:60 +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:64 +#: ../source/specifications/core-metadata.rst:82 +#: ../source/specifications/core-metadata.rst:99 +#: ../source/specifications/core-metadata.rst:164 +#: ../source/specifications/core-metadata.rst:179 +#: ../source/specifications/core-metadata.rst:217 +#: ../source/specifications/core-metadata.rst:289 +#: ../source/specifications/core-metadata.rst:293 +#: ../source/specifications/core-metadata.rst:297 +#: ../source/specifications/core-metadata.rst:301 +#: ../source/specifications/core-metadata.rst:333 +#: ../source/specifications/core-metadata.rst:355 +#: ../source/specifications/core-metadata.rst:373 +#: ../source/specifications/core-metadata.rst:398 +#: ../source/specifications/core-metadata.rst:420 +#: ../source/specifications/core-metadata.rst:640 +#: ../source/specifications/core-metadata.rst:675 +#: ../source/specifications/core-metadata.rst:685 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 +msgid "Example::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:72 +msgid "Name" +msgstr "" + +#: ../source/specifications/core-metadata.rst:75 +msgid "Added restrictions on format from the :ref:`name format `." +msgstr "" + +#: ../source/specifications/core-metadata.rst:78 +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:86 +msgid "" +"For comparison purposes, the names should be :ref:`normalized ` before comparing." +msgstr "" + +#: ../source/specifications/core-metadata.rst:91 +msgid "Version" +msgstr "" + +#: ../source/specifications/core-metadata.rst:95 +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:107 +msgid "Dynamic (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:111 +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:115 +msgid "" +"When found in the metadata of a source distribution, the following rules " +"apply:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:118 +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:122 +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:125 +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:129 +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:134 +msgid "" +"Full details of the semantics of ``Dynamic`` are described in :pep:`643`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:139 +msgid "Platform (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:143 +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:147 +#: ../source/specifications/core-metadata.rst:453 +#: ../source/specifications/core-metadata.rst:474 +#: ../source/specifications/core-metadata.rst:497 +#: ../source/specifications/core-metadata.rst:526 +#: ../source/specifications/core-metadata.rst:567 +#: ../source/specifications/core-metadata.rst:623 +#: ../source/specifications/core-metadata.rst:760 +#: ../source/specifications/core-metadata.rst:790 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 +msgid "Examples::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:155 +msgid "Supported-Platform (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:159 +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:173 +msgid "Summary" +msgstr "" + +#: ../source/specifications/core-metadata.rst:177 +msgid "A one-line summary of what the distribution does." +msgstr "" + +#: ../source/specifications/core-metadata.rst:197 +msgid "This field may be specified in the message body instead." +msgstr "" + +#: ../source/specifications/core-metadata.rst:200 +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:205 +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:211 +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:228 +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:232 +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:241 +msgid "Description-Content-Type" +msgstr "" + +#: ../source/specifications/core-metadata.rst:245 +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:248 +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:261 +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:267 +msgid "Format::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:271 +msgid "The ``type/subtype`` part has only a few legal values:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:273 +msgid "``text/plain``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:274 +msgid "``text/x-rst``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:275 +msgid "``text/markdown``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:277 +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:281 +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:286 +msgid "``GFM`` for :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" +msgstr "" + +#: ../source/specifications/core-metadata.rst:287 +msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" +msgstr "" + +#: ../source/specifications/core-metadata.rst:305 +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:309 +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:313 +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:317 +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:326 +msgid "Keywords" +msgstr "" + +#: ../source/specifications/core-metadata.rst:330 +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:339 +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:348 +msgid "Author" +msgstr "" + +#: ../source/specifications/core-metadata.rst:352 +msgid "" +"A string containing the author's name at a minimum; additional contact " +"information may be provided." +msgstr "" + +#: ../source/specifications/core-metadata.rst:365 +msgid "Author-email" +msgstr "" + +#: ../source/specifications/core-metadata.rst:369 +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:377 +#: ../source/specifications/core-metadata.rst:424 +msgid "" +"Per RFC-822, this field may contain multiple comma-separated e-mail " +"addresses::" +msgstr "" + +#: ../source/specifications/core-metadata.rst:387 +msgid "Maintainer" +msgstr "" + +#: ../source/specifications/core-metadata.rst:391 +msgid "" +"A string containing the maintainer's name at a minimum; additional contact " +"information may be provided." +msgstr "" + +#: ../source/specifications/core-metadata.rst:394 +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:408 +msgid "Maintainer-email" +msgstr "" + +#: ../source/specifications/core-metadata.rst:412 +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:416 +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:434 +msgid "License" +msgstr "" + +#: ../source/specifications/core-metadata.rst:437 +msgid "in favour of ``License-Expression``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:441 +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:446 +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:466 +msgid "License-Expression" +msgstr "" + +#: ../source/specifications/core-metadata.rst:470 +msgid "" +"Text string that is a valid SPDX `license expression `__ as `defined in PEP 639 `__." +msgstr "" + +#: ../source/specifications/core-metadata.rst:489 +msgid "License-File (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:493 +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:510 +msgid "Classifier (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:514 +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:520 +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:524 +#: ../source/specifications/core-metadata.rst:614 +#: ../source/specifications/core-metadata.rst:758 +#: ../source/specifications/core-metadata.rst:783 +msgid "This field may be followed by an environment marker after a semicolon." +msgstr "" + +#: ../source/specifications/core-metadata.rst:535 +msgid "Requires-Dist (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:538 +#: ../source/specifications/core-metadata.rst:601 +#: ../source/specifications/core-metadata.rst:730 +#: ../source/specifications/core-metadata.rst:772 +msgid "" +"The field format specification was relaxed to accept the syntax used by " +"popular publishing tools." +msgstr "" + +#: ../source/specifications/core-metadata.rst:542 +msgid "" +"Each entry contains a string naming some other distutils project required by " +"this distribution." +msgstr "" + +#: ../source/specifications/core-metadata.rst:545 +msgid "The format of a requirement string contains from one to four parts:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:547 +msgid "" +"A project name, in the same format as the ``Name:`` field. The only " +"mandatory part." +msgstr "" + +#: ../source/specifications/core-metadata.rst:549 +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:553 +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:556 +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:559 +msgid "See :pep:`508` for full details of the allowed format." +msgstr "" + +#: ../source/specifications/core-metadata.rst:561 +msgid "" +"The project names should correspond to names as found on the `Python Package " +"Index`_." +msgstr "" + +#: ../source/specifications/core-metadata.rst:564 +msgid "" +"Version specifiers must follow the rules described in :doc:`version-" +"specifiers`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:578 +msgid "Requires-Python" +msgstr "" + +#: ../source/specifications/core-metadata.rst:582 +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:586 +msgid "The value must be in the format specified in :doc:`version-specifiers`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:588 +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:593 +msgid "This field cannot be followed by an environment marker." +msgstr "" + +#: ../source/specifications/core-metadata.rst:598 +msgid "Requires-External (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:605 +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:610 +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:616 +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:621 +msgid "Notice that there is no particular rule on the strings to be used." +msgstr "" + +#: ../source/specifications/core-metadata.rst:633 +msgid "Project-URL (multiple-use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:637 +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:644 +msgid "The label is free text limited to 32 characters." +msgstr "" + +#: ../source/specifications/core-metadata.rst:646 +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:656 +msgid "Provides-Extra (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:659 +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:664 +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:672 +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:680 +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:690 +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:694 +msgid "" +"It is legal to specify ``Provides-Extra:`` without referencing it in any " +"``Requires-Dist:``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:697 +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:702 +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:710 +msgid "Rarely Used Fields" +msgstr "" + +#: ../source/specifications/core-metadata.rst:712 +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:717 +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:727 +msgid "Provides-Dist (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:734 +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:739 +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:746 +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:754 +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:769 +msgid "Obsoletes-Dist (multiple use)" +msgstr "" + +#: ../source/specifications/core-metadata.rst:776 +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:780 +msgid "" +"Version declarations can be supplied. Version numbers must be in the format " +"specified in :doc:`version-specifiers`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:785 +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:798 +msgid "Deprecated Fields" +msgstr "" + +#: ../source/specifications/core-metadata.rst:800 +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:809 +msgid "Home-page" +msgstr "" + +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 +msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." +msgstr "" + +#: ../source/specifications/core-metadata.rst:817 +msgid "A string containing the URL for the distribution's home page." +msgstr "" + +#: ../source/specifications/core-metadata.rst:826 +msgid "Download-URL" +msgstr "" + +#: ../source/specifications/core-metadata.rst:834 +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:840 +msgid "Requires" +msgstr "" + +#: ../source/specifications/core-metadata.rst:843 +msgid "in favour of ``Requires-Dist``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:846 +msgid "" +"Each entry contains a string describing some other module or package " +"required by this package." +msgstr "" + +#: ../source/specifications/core-metadata.rst:849 +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:853 +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:861 +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:864 +msgid "" +"All of the following are possible requirement strings: \"rfc822\", \"zlib " +"(>=1.1.4)\", \"zope\"." +msgstr "" + +#: ../source/specifications/core-metadata.rst:867 +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:880 +msgid "Provides" +msgstr "" + +#: ../source/specifications/core-metadata.rst:883 +msgid "in favour of ``Provides-Dist``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:886 +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:902 +msgid "Obsoletes" +msgstr "" + +#: ../source/specifications/core-metadata.rst:905 +msgid "in favour of ``Obsoletes-Dist``" +msgstr "" + +#: ../source/specifications/core-metadata.rst:908 +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:912 +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:924 +msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:925 +msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" +msgstr "" + +#: ../source/specifications/core-metadata.rst:926 +msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:927 +msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:929 +msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." +msgstr "" + +#: ../source/specifications/core-metadata.rst:930 +msgid "Added canonical method for transforming metadata to JSON." +msgstr "" + +#: ../source/specifications/core-metadata.rst:931 +msgid "Restricted the grammar of the ``Name`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:933 +msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:935 +msgid "Added the ``Dynamic`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:937 +msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:939 +msgid "Restricted extra names to be normalized." +msgstr "" + +#: ../source/specifications/core-metadata.rst:941 +msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." +msgstr "" + +#: ../source/specifications/core-metadata.rst:943 +msgid "Added the ``License-Expression`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:944 +msgid "Added the ``License-File`` field." +msgstr "" + +#: ../source/specifications/core-metadata.rst:948 +msgid "reStructuredText markup: https://docutils.sourceforge.io/" +msgstr "" + +#: ../source/specifications/core-metadata.rst:953 +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:20 +#: ../source/specifications/dependency-specifiers.rst:26 +#: ../source/specifications/direct-url-data-structure.rst:19 +#: ../source/specifications/direct-url.rst:15 +#: ../source/specifications/index-hosted-attestations.rst:17 +#: ../source/specifications/inline-script-metadata.rst:13 +msgid "Specification" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:25 +msgid "This is a simple table which shows a ``test`` group::" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:30 +msgid "and a similar table which defines ``test`` and ``coverage`` groups::" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:37 +msgid "The ``[dependency-groups]`` Table" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:39 +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:44 +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:49 +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:53 +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:59 +msgid "Dependency Group Include" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:61 +msgid "" +"A Dependency Group Include includes another Dependency Group in the current " +"group." +msgstr "" + +#: ../source/specifications/dependency-groups.rst:64 +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:67 +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:73 +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:90 +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:95 +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:100 +msgid "Package Building" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:102 +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:106 +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:112 +msgid "Installing Dependency Groups & Extras" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:114 +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:118 +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:126 +msgid "Validation and Compatibility" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:128 +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:133 +msgid "" +"Tools SHOULD error when evaluating or processing unrecognized data in " +"Dependency Groups." +msgstr "" + +#: ../source/specifications/dependency-groups.rst:136 +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:139 +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:150 +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:155 +#: ../source/specifications/inline-script-metadata.rst:123 +msgid "Reference Implementation" +msgstr "" + +#: ../source/specifications/dependency-groups.rst:157 +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:250 +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. 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::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:212 +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:219 +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:224 +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:227 +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:231 +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:241 +msgid "Marker" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:242 +msgid "Python equivalent" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:243 +msgid "Sample values" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:244 +msgid "``os_name``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:245 +msgid ":py:data:`os.name`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:246 +msgid "``posix``, ``java``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:247 +msgid "``sys_platform``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:248 +msgid ":py:data:`sys.platform`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:249 +msgid "" +"``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " +"from Python3 and \"linux2\" from Python2)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:251 +msgid "``platform_machine``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:252 +msgid ":py:func:`platform.machine()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 +msgid "``x86_64``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:254 +msgid "``platform_python_implementation``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:255 +msgid ":py:func:`platform.python_implementation()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:256 +msgid "``CPython``, ``Jython``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:257 +msgid "``platform_release``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:258 +msgid ":py:func:`platform.release()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:259 +msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:260 +msgid "``platform_system``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:261 +msgid ":py:func:`platform.system()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:262 +msgid "``Linux``, ``Windows``, ``Java``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:263 +msgid "``platform_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:264 +msgid ":py:func:`platform.version()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:265 +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:268 +msgid "``python_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:269 +msgid "``'.'.join(platform.python_version_tuple()[:2])``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:270 +msgid "``3.4``, ``2.7``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:271 +msgid "``python_full_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:272 +msgid ":py:func:`platform.python_version()`" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 +msgid "``3.4.0``, ``3.5.0b1``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:274 +msgid "``implementation_name``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:275 +msgid ":py:data:`sys.implementation.name `" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:276 +msgid "``cpython``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:277 +msgid "``implementation_version``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:278 +msgid "see definition below" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:280 +msgid "``extra``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:281 +msgid "" +"An error except when defined by the context interpreting the specification." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:283 +msgid "``test``" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:285 +msgid "" +"The ``implementation_version`` marker variable is derived from :py:data:`sys." +"implementation.version `:" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:302 +msgid "" +"This environment markers section, initially defined through :pep:`508`, " +"supersedes the environment markers section in :pep:`345`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:308 +msgid "Complete Grammar" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:310 +msgid "The complete parsley grammar::" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:417 +msgid "A test program - if the grammar is in a string ``grammar``:" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:489 +msgid "November 2015: This specification was approved through :pep:`508`." +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:490 +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:495 +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:503 +msgid "" +"pip, the recommended installer for Python packages (http://pip.readthedocs." +"org/en/stable/)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:506 +msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" +msgstr "" + +#: ../source/specifications/dependency-specifiers.rst:509 +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:221 +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:359 +msgid "Source archive:" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:372 +msgid "Git URL with tag and commit-hash:" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:385 +msgid "Local directory:" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:394 +msgid "Local directory in editable mode:" +msgstr "" + +#: ../source/specifications/direct-url-data-structure.rst:409 +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:411 +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/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:100 +msgid "Example" +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:935 +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/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, set 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/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:450 +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:142 +msgid "``maintainers``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:144 +msgid "``optional-dependencies``" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 +msgid "TOML_ type: string" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:156 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Name `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:159 +msgid "The name of the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:161 +msgid "" +"Tools SHOULD :ref:`normalize ` this name, as soon as it " +"is read for internal consistency." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:168 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Version " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:171 +msgid "" +"The version of the project, as defined in the :ref:`Version specifier " +"specification `." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:174 +msgid "Users SHOULD prefer to specify already-normalized versions." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:181 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Summary " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:184 +msgid "" +"The summary description of the project in one line. Tools MAY error if this " +"includes multiple lines." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:191 +msgid "TOML_ type: string or table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:192 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Description " +"` and :ref:`Description-Content-Type `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:196 +msgid "The full description of the project (i.e. the README)." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:198 +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:209 +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:216 +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:231 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Python `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:234 +msgid "The Python version requirements of the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:244 +msgid "" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 +msgid "TOML_ type: Array of inline tables with string keys and values" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:313 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" +"`Maintainer `, and :ref:`Maintainer-email `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:319 +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:324 +msgid "" +"The \"maintainers\" key is similar to \"authors\" in that its exact meaning " +"is open to interpretation." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:327 +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:334 +msgid "" +"Using the data to fill in :ref:`core metadata ` is as follows:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:337 +msgid "" +"If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:340 +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:344 +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:348 +msgid "Multiple values should be separated by commas." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:355 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Keywords " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:358 +msgid "The keywords for the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:365 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Classifier " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:368 +msgid "Trove classifiers which apply to the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:370 +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:380 +msgid "TOML_ type: table with keys and values of strings" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:381 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Project-URL " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:384 +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:390 +msgid "Entry points" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:392 +msgid "" +"TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " +"``[project.entry-points]``)" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:394 +msgid ":ref:`Entry points specification `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:396 +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:402 +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:406 +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:412 +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:422 +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:425 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Dist ` and :ref:`Provides-Extra `" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:429 +msgid "The (optional) dependencies of the project." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:431 +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:436 +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:452 +msgid "TOML_ type: array of string" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:453 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Dynamic " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:456 +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:462 +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:464 +msgid "" +"A build back-end MUST raise an error if the metadata specifies ``name`` in " +"``dynamic``." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:466 +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:471 +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:475 +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:477 +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:481 +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:491 +msgid "Arbitrary tool configuration: the ``[tool]`` table" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:493 +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:499 +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:510 +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:514 +msgid "" +"November 2020: The specification of the ``[project]`` table was approved " +"through :pep:`621`." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:517 +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/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 directory, " +"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:76 +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:81 +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:88 +msgid "The METADATA file" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:90 +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:93 +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:99 +msgid "The RECORD file" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:101 +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:104 +msgid "" +"The CSV dialect must be readable with the default ``reader`` of Python's " +"``csv`` module:" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:107 +msgid "field delimiter: ``,`` (comma)," +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:108 +msgid "quoting char: ``\"`` (straight double quote)," +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:109 +msgid "line terminator: either ``\\r\\n`` or ``\\n``." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:111 +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:114 +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:119 +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:124 +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:127 +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:133 +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:140 +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:145 +msgid "Here is an example snippet of a possible ``RECORD`` file::" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:164 +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:171 +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:180 +msgid "The INSTALLER file" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:182 +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:188 +msgid "The file can be terminated by zero or more ASCII whitespace characters." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:190 +msgid "Here are examples of two possible ``INSTALLER`` files::" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:198 +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:205 +msgid "The entry_points.txt file" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:207 +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:212 +msgid "Its detailed specification is at :ref:`entry-points`." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:216 +msgid "The direct_url.json file" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:218 +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:224 +msgid "Its detailed specification is at :ref:`direct-url`." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 +msgid "Intentionally preventing changes to installed packages" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:241 +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:247 +msgid "To achieve this, affected tools should take the following steps:" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:249 +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:253 +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:257 +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:262 +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:270 +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:273 +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:276 +msgid "" +"September 2020: Various amendments and clarifications were approved through :" +"pep:`627`." +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/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: HTML and JSON." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:20 +msgid "Base HTML API" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:22 +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:27 +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:32 +msgid "" +"Within a repository, the root URL (``/`` for this spec which represents the " +"base URL) **MUST** be a valid HTML5 page with a single anchor element per " +"project in the repository. The text of the anchor tag **MUST** be the name " +"of the project and the href attribute **MUST** link to the URL for that " +"particular project. As an example:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:48 +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, so a " +"project named \"HolyGrail\" would have a URL like ``/holygrail/``. This 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. The 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:60 +msgid "" +"In addition to the above, the following constraints are placed on the API:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:62 +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:66 +msgid "" +"URLs may be either absolute or relative as long as they point to the correct " +"location." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:69 +msgid "" +"There are no constraints on where the files must be hosted relative to the " +"repository." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:72 +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:75 +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:80 +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:85 +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:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 +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:115 +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:125 +msgid "" +"In the attribute value, < and > have to be HTML encoded as ``<`` and " +"``>``, respectively." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:128 +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:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 +msgid "" +"The format of the linked provenance is defined in :ref:`index-hosted-" +"attestations`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:142 +msgid "Normalized Names" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:144 +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:159 +msgid "Adding \"Yank\" Support to the Simple API" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:161 +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/simple-repository-api.rst:168 +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/simple-repository-api.rst:173 +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/simple-repository-api.rst:180 +msgid "Installers" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:182 +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/simple-repository-api.rst:189 +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/simple-repository-api.rst:196 +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/simple-repository-api.rst:200 +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/simple-repository-api.rst:207 +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/simple-repository-api.rst:213 +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/simple-repository-api.rst:221 +msgid "Mirrors" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:223 +msgid "Mirrors can generally treat yanked files one of two ways:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:225 +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/simple-repository-api.rst:228 +msgid "" +"They may choose to include yanked files, and additionally mirror the ``data-" +"yanked`` attribute as well." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:231 +msgid "" +"Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" +"yanked`` attribute for it." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:237 +msgid "Versioning PyPI's Simple API" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:239 +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:247 +msgid "This would end up looking like:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:253 +msgid "When interpreting the repository version:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:255 +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:258 +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:262 +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:268 +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:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 +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:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 +msgid "Clients" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:291 +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:295 +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:298 +msgid "" +"When encountering a minor version greater than expected, clients **SHOULD** " +"warn users with an appropriate message." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:301 +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:307 +msgid "Serve Distribution Metadata in the Simple Repository API" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:309 +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:315 +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:324 +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:332 +msgid "Backwards Compatibility" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:334 +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:338 +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:347 +msgid "JSON-based Simple API for Python Package Indexes" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:349 +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:354 +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:364 +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:371 +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:377 +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:381 +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:385 +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:389 +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:395 +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:403 +msgid "JSON Serialization" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:405 +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:409 +msgid "" +"The following constraints apply to all JSON serialized responses described " +"in this spec:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:412 +msgid "" +"All JSON responses will *always* be a JSON object rather than an array or " +"other type." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:415 +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:420 +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:423 +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:426 +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:432 +msgid "" +"All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 +msgid "Project List" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:441 +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:444 +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:445 +#: ../source/specifications/simple-repository-api.rst:494 +msgid "" +"``meta``: The general response metadata as `described earlier `__." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 +msgid "As an example:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:464 +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:474 +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:483 +msgid "Project Detail" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:485 +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:490 +msgid "" +"This URL must respond with a JSON encoded dictionary that has four keys:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:492 +msgid "``name``: The normalized name of the project." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:493 +msgid "" +"``files``: A list of dictionaries, each one representing an individual file." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:495 +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:502 +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:509 +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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 +msgid "Each individual file dictionary has the following keys:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:521 +msgid "``filename``: The filename that is being represented." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:522 +msgid "``url``: The URL that the file can be fetched from." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:523 +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:528 +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:532 +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:537 +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:543 +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:546 +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:554 +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:558 +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:562 +msgid "" +"It is recommended that servers make the hashes of the metadata file " +"available if possible." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 +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:581 +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\" as per :ref:`the API yank specification `." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 +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:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 +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:658 +msgid "Content-Types" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:660 +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:664 +msgid "The structure of this content type will be:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:670 +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:675 +msgid "Which means that for the existing 1.0 API, the content types would be:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:677 +msgid "**JSON:** ``application/vnd.pypi.simple.v1+json``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:678 +msgid "**HTML:** ``application/vnd.pypi.simple.v1+html``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:680 +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:685 +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:692 +msgid "Version + Format Selection" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:694 +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:699 +msgid "" +"To enable this, this spec standardizes on the use of HTTP's `Server-Driven " +"Content Negotiation `_." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:702 +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:705 +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:707 +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:710 +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:714 +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:716 +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:719 +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:721 +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:724 +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:729 +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:736 +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:743 +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:747 +msgid "``$type/$subtype``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:748 +msgid "``$type/*``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:749 +msgid "``*/*``" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:751 +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:755 +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:762 +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:768 +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:772 +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:779 +msgid "An example of how a client can operate would look like:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:830 +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:836 +msgid "Alternative Negotiation Mechanisms" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:838 +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:846 +msgid "URL Parameter" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:848 +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:851 +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:855 +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:860 +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:863 +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:872 +msgid "Endpoint Configuration" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:874 +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:878 +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:882 +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:889 +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:896 +msgid "TUF Support - PEP 458" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:898 +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:905 +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:910 +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:916 +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:920 +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:927 +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:931 +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:937 +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:941 +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:946 +msgid "It is recommended that servers:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:948 +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:952 +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:957 +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:960 +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:966 +msgid "It is recommended that clients:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:968 +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:971 +msgid "" +"When constructing an ``Accept`` header, include all of the content types " +"that you support." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:974 +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:980 +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:984 +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:987 +msgid "" +"Check the ``Content-Type`` of the response and ensure it matches something " +"that you were expecting." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:995 +msgid "September 2015: initial form of the HTML format, in :pep:`503`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:996 +msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:997 +msgid "May 2019: \"yank\" support, in :pep:`592`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:998 +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:1000 +msgid "" +"May 2021: providing package metadata independently from a package, in :pep:" +"`658`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:1002 +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:1004 +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:1006 +msgid "" +"June 2023: renaming the field which provides package metadata independently " +"from a package, in :pep:`714`" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:1008 +msgid "" +"November 2024: provenance metadata in the HTML and JSON formats, in :pep:" +"`740`" +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:6 +msgid "Source distribution format" +msgstr "" + +#: ../source/specifications/source-distribution-format.rst:8 +msgid "" +"The current standard format of 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 use 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:782 +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:348 +msgid "" +"While they may be useful for continuous integration purposes, publishing " +"developmental releases of pre-releases to general purpose public index " +"servers is strongly discouraged, as it makes the version identifier " +"difficult to parse for human readers. If such a release needs to be " +"published, it is substantially clearer to instead create a new pre-release " +"by incrementing the numeric component." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:355 +msgid "" +"Developmental releases of post-releases are also strongly discouraged, but " +"they may be appropriate for projects which use the post-release notation for " +"full maintenance releases which may include code changes." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:361 +msgid "Version epochs" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:363 +msgid "" +"If included in a version identifier, the epoch appears before all other " +"components, separated from the release segment by an exclamation mark::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:368 +msgid "If no explicit epoch is given, the implicit epoch is ``0``." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:370 +msgid "" +"Most version identifiers will not include an epoch, as an explicit epoch is " +"only needed if a project *changes* the way it handles version numbering in a " +"way that means the normal version ordering rules will give the wrong answer. " +"For example, if a project is using date based versions like ``2014.04`` and " +"would like to switch to semantic versions like ``1.0``, then the new " +"releases would be identified as *older* than the date based releases when " +"using the normal sorting scheme::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:384 +msgid "" +"However, by specifying an explicit epoch, the sort order can be changed " +"appropriately, as all versions from a later epoch are sorted after versions " +"from an earlier epoch::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:398 +msgid "Normalization" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:400 +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:407 +msgid "Case sensitivity" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:409 +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:415 +msgid "Integer Normalization" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:417 +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:425 +msgid "Pre-release separators" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:427 +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:436 +msgid "Pre-release spelling" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:438 +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:447 +msgid "Implicit pre-release number" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:449 +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:455 +msgid "Post release separators" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:457 +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:466 +msgid "Post release spelling" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:468 +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:475 +msgid "Implicit post release number" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:477 +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:483 +msgid "Implicit post releases" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:485 +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:494 +msgid "Development release separators" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:496 +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:503 +msgid "Implicit development release number" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:505 +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:512 +msgid "Local version segments" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:514 +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:521 +msgid "Preceding v character" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:523 +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:530 +msgid "Leading and Trailing Whitespace" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:532 +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:539 +msgid "Examples of compliant version schemes" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:541 +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:548 +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:553 +msgid "Simple \"major.minor\" versioning::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:562 +msgid "Simple \"major.minor.micro\" versioning::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:570 +msgid "" +"\"major.minor\" versioning with alpha, beta and candidate pre-releases::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:582 +msgid "" +"\"major.minor\" versioning with developmental releases, release candidates " +"and post-releases for minor corrections::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:597 +msgid "" +"Date based releases, using an incrementing serial within each year, skipping " +"zero::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:611 +msgid "Summary of permitted suffixes and relative ordering" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:615 +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:619 +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:623 +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:629 +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:632 +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:637 +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:642 +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:648 +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:653 +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:657 +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:660 +msgid "The following example covers many of the possible combinations::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:685 +msgid "Version ordering across different metadata versions" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:687 +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:691 +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:699 +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:705 +msgid "" +"Distribution users may wish to explicitly remove non-compliant versions from " +"any private package indexes they control." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:710 +msgid "Compatibility with other version schemes" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:712 +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:717 +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:725 +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:732 +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:737 +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:741 +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:745 +msgid "" +"Specific build information may also be included in local version labels." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:751 +msgid "DVCS based version labels" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:753 +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:758 +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:762 +msgid "" +"Identifying hash information may also be included in local version labels." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:766 +msgid "Olson database versioning" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:768 +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:772 +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:777 +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:784 +msgid "" +"A version specifier consists of a series of version clauses, separated by " +"commas. For example::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:789 +msgid "The comparison operator determines the kind of version clause:" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:791 +msgid "``~=``: `Compatible release`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:792 +msgid "``==``: `Version matching`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:793 +msgid "``!=``: `Version exclusion`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:794 +msgid "``<=``, ``>=``: `Inclusive ordered comparison`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:795 +msgid "``<``, ``>``: `Exclusive ordered comparison`_ clause" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:796 +msgid "``===``: `Arbitrary equality`_ clause." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:798 +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:802 +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:805 +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:811 +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:820 +msgid "Compatible release" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:822 +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:826 +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:830 +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:835 +msgid "" +"This operator MUST NOT be used with a single segment version number such as " +"``~=1``." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:838 +msgid "For example, the following groups of version clauses are equivalent::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:846 +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:856 +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:868 +msgid "Version matching" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:870 +msgid "" +"A version matching clause includes the version matching operator ``==`` and " +"a version identifier." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:873 +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:877 +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:883 +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:888 +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:895 +#: ../source/specifications/version-specifiers.rst:956 +msgid "" +"For example, given the version ``1.1.post1``, the following clauses would " +"match or not as shown::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:902 +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:910 +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:922 +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:928 +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:935 +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:939 +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:947 +msgid "Version exclusion" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:949 +msgid "" +"A version exclusion clause includes the version exclusion operator ``!=`` " +"and a version identifier." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:952 +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:965 +msgid "Inclusive ordered comparison" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:967 +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:973 +msgid "The inclusive ordered comparison operators are ``<=`` and ``>=``." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:975 +#: ../source/specifications/version-specifiers.rst:1005 +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:978 +#: ../source/specifications/version-specifiers.rst:1008 +msgid "Local version identifiers are NOT permitted in this version specifier." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:982 +msgid "Exclusive ordered comparison" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:984 +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:990 +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:997 +msgid "" +"The exclusive ordered comparison ``>V`` **MUST NOT** match a local version " +"of the specified version." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1000 +msgid "" +"The exclusive ordered comparison ``=`` entry as part " +"of the URL fragment." +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1129 +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:1135 +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:1142 +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:1150 +msgid "Remote URL examples::" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1158 +msgid "File URLs" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1160 +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:1165 +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:1170 +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:1181 +msgid "Summary of differences from pkg_resources.parse_version" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1183 +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:1187 +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:1191 +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:1195 +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:1204 +msgid "Appendix: Parsing version strings with regular expressions" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1206 +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:1212 +msgid "" +"To test whether a version identifier is in the canonical format, you can use " +"the following function:" +msgstr "" + +#: ../source/specifications/version-specifiers.rst:1221 +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:1268 +msgid "August 2014: This specification was approved through :pep:`440`." +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 " +"always installed into created virtual environments by default (regardless of " +"Python version)." +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:539 +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/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:172 +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." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:179 +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:182 +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:186 +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:196 +msgid "Configuring metadata" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:198 +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:250 +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:255 +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:257 +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:260 +msgid "``description`` is a short, one-sentence summary of the package." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:261 +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:266 +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:269 +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:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 +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:284 +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:291 +msgid "Creating README.md" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:293 +msgid "" +"Open :file:`README.md` and enter the following content. You can customize " +"this if you'd like." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:306 +msgid "Creating a LICENSE" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:308 +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:337 +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:345 +msgid "Including other files" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:347 +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:354 +msgid "Generating distribution archives" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:356 +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:360 +msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:374 +msgid "" +"If you have trouble installing these, see the :doc:`installing-packages` " +"tutorial." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:377 +msgid "" +"Now run this command from the same directory where :file:`pyproject.toml` is " +"located:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:391 +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:401 +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:410 +msgid "Uploading the distribution archives" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:412 +msgid "Finally, it's time to upload your package to the Python Package Index!" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:414 +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:422 +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:429 +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:444 +msgid "" +"Once installed, run Twine to upload all of the archives under :file:`dist`:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:458 +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:461 +msgid "After the command completes, you should see output similar to this:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:472 +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:477 +msgid "Installing your newly uploaded package" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:479 +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:495 +msgid "Make sure to specify your username in the package name!" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:497 +msgid "" +"pip should install the package from TestPyPI and the output should look " +"something like this:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:507 +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:514 +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:529 +msgid "and import the package:" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:541 +msgid "" +"**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " +"✨" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:544 +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:549 +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:553 +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:555 +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:558 +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:562 +msgid "" +"Install your package from the real PyPI using ``python3 -m pip install [your-" +"package]``." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:564 +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:567 +msgid "" +"Read about advanced configuration for your chosen build backend: `Hatchling " +"`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:571 +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:574 +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:582 +msgid "Notes" +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:584 +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/pl/LC_MESSAGES/messages.po b/locales/pl/LC_MESSAGES/messages.po index a84a5fe62..cb9676f19 100644 --- a/locales/pl/LC_MESSAGES/messages.po +++ b/locales/pl/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-01-07 04:23+0000\n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -479,6 +479,7 @@ 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 @@ -499,6 +500,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 @@ -583,6 +585,7 @@ msgid "" msgstr "" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -758,6 +761,701 @@ msgid "" "library/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 " @@ -1884,7 +2582,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2678,49 +3376,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2729,7 +3469,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2737,7 +3477,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2745,32 +3485,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2780,21 +3520,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2803,31 +3543,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2837,48 +3577,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2886,11 +3626,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2899,11 +3639,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2911,49 +3651,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2962,21 +3722,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2985,11 +3745,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -2997,15 +3757,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3013,21 +3773,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3179,7 +3939,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3536,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4224,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5904,6 +6664,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8556,13 +9641,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8570,11 +9656,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8584,29 +9670,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8614,37 +9700,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8653,98 +9739,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8752,93 +9838,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +9975,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8880,26 +10069,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8907,28 +10096,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8936,26 +10125,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11871,23 +13060,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11895,7 +13091,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11903,64 +13099,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11968,28 +13164,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -11998,22 +13194,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12021,29 +13217,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12053,7 +13262,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12061,7 +13270,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12069,17 +13278,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12087,39 +13296,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12129,11 +13338,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12142,38 +13351,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12181,7 +13390,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12189,18 +13398,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12209,7 +13418,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12220,7 +13429,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12238,7 +13447,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12247,37 +13456,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12285,11 +13494,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12399,8 +13621,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12507,8 +13729,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13128,24 +14350,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13153,28 +14384,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13185,33 +14416,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13220,89 +14451,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13647,11 +14878,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13663,11 +14894,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13675,7 +14906,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13683,17 +14914,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13704,11 +14934,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13717,13 +14947,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13732,7 +14962,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13745,7 +14975,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13755,7 +14985,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13763,20 +14993,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13786,194 +15016,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13981,24 +15212,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14025,7 +15256,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14178,17 +15409,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14197,7 +15428,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14205,7 +15436,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14213,34 +15444,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14249,13 +15480,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14263,7 +15494,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14271,24 +15502,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14296,22 +15527,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14322,65 +15553,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14388,106 +15619,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15709,7 +16940,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15774,7 +17005,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16062,12 +17293,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16121,90 +17352,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16212,7 +17644,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16223,14 +17655,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16239,69 +17671,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16312,11 +17744,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16326,7 +17758,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16334,11 +17766,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16346,13 +17778,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16363,23 +17795,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16387,11 +17819,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16401,33 +17833,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16435,13 +17867,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16450,34 +17882,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16718,7 +18158,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16730,81 +18170,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16818,7 +18259,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16827,7 +18268,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16839,41 +18280,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16881,20 +18426,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16903,92 +18448,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16996,14 +18544,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17011,7 +18559,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17019,24 +18567,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17044,7 +18592,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17055,17 +18603,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17073,19 +18621,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17094,20 +18642,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17115,18 +18663,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17134,7 +18682,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17142,19 +18690,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17252,7 +18806,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17260,7 +18824,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17268,58 +18832,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17327,7 +18891,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17336,13 +18900,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17351,7 +18915,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17360,18 +18924,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17379,7 +18943,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17389,11 +18953,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17401,15 +18965,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17417,11 +18981,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17429,29 +18993,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17460,11 +19038,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17472,14 +19050,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17488,28 +19066,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17537,15 +19115,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17553,23 +19139,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17585,44 +19171,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17630,7 +19216,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17639,7 +19225,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17647,22 +19267,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17671,17 +19291,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17691,11 +19315,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17705,7 +19329,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17713,7 +19337,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17721,11 +19345,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17735,7 +19359,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17745,14 +19369,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17762,7 +19386,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17770,7 +19394,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17779,71 +19403,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17852,7 +19476,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17862,48 +19486,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17912,7 +19559,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17924,7 +19571,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17934,18 +19581,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17953,11 +19600,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17965,7 +19612,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17975,7 +19622,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17985,7 +19632,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17993,28 +19640,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18023,37 +19670,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18061,19 +19708,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18126,7 +19779,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18183,14 +19865,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18200,7 +19882,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18208,44 +19890,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18254,7 +19954,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18265,7 +19965,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18273,7 +20003,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18336,11 +20070,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18349,65 +20083,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18415,7 +20149,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18426,7 +20160,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18435,33 +20169,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18471,7 +20205,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18481,7 +20215,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18489,7 +20223,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18500,22 +20234,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18524,25 +20258,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18550,13 +20284,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18566,18 +20300,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18585,7 +20319,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18595,7 +20329,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18603,11 +20337,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18618,7 +20352,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18626,7 +20360,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18635,7 +20369,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18643,7 +20377,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18653,20 +20387,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18674,7 +20408,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18683,18 +20417,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18702,13 +20436,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18717,23 +20451,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18742,216 +20476,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18984,11 +20570,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18998,11 +20584,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19011,20 +20597,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19032,29 +20618,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19062,21 +20657,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19084,7 +20679,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19094,11 +20689,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19106,113 +20701,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21860,7 +23461,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22117,7 +23718,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22126,24 +23727,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22152,31 +23753,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22184,21 +23797,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22207,57 +23820,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22355,23 +23971,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22379,28 +23995,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22408,44 +24024,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2021, 2022, 2023, 2024. +# Rafael Fontenelle , 2021, 2022, 2023, 2024, 2025. # meowmeowmeowcat , 2021. # miiguel , 2022. # Felipe Nogueira , 2023. # Kalingth , 2024. # Alefsander Ribeiro Nascimento , 2024. +# Beta 46 , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-07-30 13:48+0000\n" -"Last-Translator: Alefsander Ribeiro Nascimento \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-02-26 20:37+0000\n" +"Last-Translator: Beta 46 \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -21,11 +22,11 @@ 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.7-dev\n" +"X-Generator: Weblate 5.10.2-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" -msgstr "Contribuir para este guia" +msgstr "Contribua para este guia" #: ../source/contribute.rst:7 msgid "" @@ -606,6 +607,7 @@ msgid "Deploying Python applications" msgstr "Fazendo deploy de aplicações Python" #: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 #: ../source/discussions/single-source-version.rst:0 #: ../source/guides/distributing-packages-using-setuptools.rst:0 #: ../source/guides/index-mirrors-and-caches.rst:0 @@ -626,6 +628,7 @@ msgid "Incomplete" msgstr "Incompleta" #: ../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 @@ -733,6 +736,7 @@ msgstr "" "lançada sob a licença MIT e Mozilla Public License 2.0." #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "macOS" @@ -994,6 +998,747 @@ msgstr "" "identificador válido Python como seu nome, usando :doc:`importlib `, isso é extremamente raro e fortemente desencorajado." +#: ../source/discussions/downstream-packaging.rst:5 +#, fuzzy +#| msgid "Operating system packages" +msgid "Supporting downstream packaging" +msgstr "Pacotes de sistema operacional" + +#: ../source/discussions/downstream-packaging.rst:7 +msgid "Draft" +msgstr "Esboço" + +#: ../source/discussions/downstream-packaging.rst:8 +msgid "2025-?" +msgstr "2025-?" + +#: ../source/discussions/downstream-packaging.rst:10 +msgid "" +"While PyPI and the Python packaging tools such as :ref:`pip` are the primary " +"means of distributing Python packages, they are also often made available as " +"part of other packaging ecosystems. These repackaging efforts are " +"collectively called *downstream* packaging (your own efforts are called " +"*upstream* packaging), and include such projects as Linux distributions, " +"Conda, Homebrew and MacPorts. They generally aim to provide improved support " +"for use cases that cannot be handled via Python packaging tools alone, such " +"as native integration with a specific operating system, or assured " +"compatibility with specific versions of non-Python software." +msgstr "" + +#: ../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 +#, fuzzy +#| msgid "Python source distributions" +msgid "Provide complete source distributions" +msgstr "Forneça distribuição completa do código-fonte." + +#: ../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 "Por que?" + +#: ../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 "Sendo possível auditar o código fonte de todos os pacotes." + +#: ../source/discussions/downstream-packaging.rst:64 +#, fuzzy +msgid "Being able to run the test suite and build documentation." +msgstr "" +"Seendo capaz de executar o conjunto de validação e a documentação As Build." + +#: ../source/discussions/downstream-packaging.rst:66 +msgid "" +"Being able to easily apply patches, including backporting commits from the " +"project's repository and sending patches back to the project." +msgstr "" + +#: ../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 +#, fuzzy +msgid "Being able to build against specific versions of system libraries." +msgstr "" +"Sendo capaz de construir contra versões específicas de bibliotecas do sistema" + +#: ../source/discussions/downstream-packaging.rst:74 +msgid "Having a consistent build process across all Python packages." +msgstr "" +"Possuindo um processo de construção consistente em todos os pacotes Python." + +#: ../source/discussions/downstream-packaging.rst:76 +#, fuzzy +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 "" +"Enquanto é possível construir pacotes através do repositorio do git, há " +"razões importantes pelas quais é incentivado prover um arquivo estático em " +"vez disso." + +#: ../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 "Como?" + +#: ../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 "Não utilize a internet durante o processo de construção" + +#: ../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 "" +"Mesmo este não sendo o caso, e assumindo que você teve cuidado suficiente " +"para autenticar os downloads, usar a internet é desencorajado pelas " +"seguintes razões:" + +#: ../source/discussions/downstream-packaging.rst:160 +#, fuzzy +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 "" +"A conexão a internet pode ser instável (ex. má recepção) or apresentar " +"problemas temporários que podem causar a falha ou atraso no processo." + +#: ../source/discussions/downstream-packaging.rst:164 +#, fuzzy +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 "" +"Os recursos remotos podem ficar indisponíveis temporáriamente ou até " +"permanente, tornando a construção impossível. Isto é especialmente " +"problemático quando alguem precisa construir um pacote de versão antiga" + +#: ../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 +#, fuzzy +#| msgid "Declaring build system dependencies" +msgid "Support building against system dependencies" +msgstr "Declarando dependências do sistema de construção" + +#: ../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 "" +"Mesmo para um usuário experiente, instalar uma versão de dependência " +"compatível pode ser difícil. Por exemplo, a distribuição Linux utilizada " +"pode não prover a versão necessária, ou um pacote diferente pode exigir uma " +"versão incompatível." + +#: ../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 "" +"Por último, mas não menos importante, a ligação estática e o fornecimento " +"resulta em duplicação, e pode aumentar o uso de espaço e memória de disco." + +#: ../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 +#, fuzzy +msgid "Support downstream testing" +msgstr "Teste de suporte downstream" + +#: ../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 +#, fuzzy +msgid "" +"Testing on additional platforms that are not covered by upstream testing." +msgstr "" +"Testando em plataformas adicionais que não estão cobertas por testes " +"upstream." + +#: ../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 "" +"Encontrando bugs sutis que só podem ser reproduzidos com hardware " +"específico, certas versões de pacotes de sistemas, e assim por diante." + +#: ../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 +#, fuzzy +msgid "" +"Testing the released package against newer Python versions (including newer " +"point releases), or less tested Python implementations such as PyPy." +msgstr "" +"Testando o pacato lançado em novas versões do Python (incluindo os pontos " +"mais recentes), ou implementações menos testadas do Python, como PyPt" + +#: ../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 +#, fuzzy +msgid "Aim for stable releases" +msgstr "Publicando lançamentos" + +#: ../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 +#, fuzzy +msgid "adding patches to the version currently published," +msgstr "adicionando patches à versão atualmente publicada," + +#: ../source/discussions/downstream-packaging.rst:435 +msgid "or even downgrading the stable channel to an earlier release." +msgstr "ou até retornando o canal estável a uma versão anterior ao lançamento." + +#: ../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 "" +"Cada opção envolve certos riscos e certo trabalho, e os empacotadoes devem " +"ponderar suas opções para determinar seu curso de ação ." + +#: ../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 "" +"Considere fazer pré-lançamentos após grandes mudanças, provendo assim mais " +"oportunidade de teste para usuários e pessoas interessadas." + +#: ../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 " @@ -2171,34 +2916,29 @@ msgid "Where to read more about this?" msgstr "Onde posso ler mais sobre isso?" #: ../source/discussions/setup-py-deprecated.rst:213 -#, fuzzy -#| msgid "https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html" msgid "" "`Why you shouldn't invoke setup.py directly `__ by Paul Ganssle" -msgstr "https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html" +msgstr "" +"`Por que você não deveria invocar setup.py diretamemente `__ (inglês) por Paul " +"Ganssle" #: ../source/discussions/setup-py-deprecated.rst:215 msgid ":doc:`setuptools:deprecated/commands`" msgstr ":doc:`setuptools:deprecated/commands`" #: ../source/discussions/single-source-version.rst:5 -#, fuzzy -#| msgid "Single-sourcing the package version" msgid "Single-sourcing the Project Version" msgstr "Mantendo uma única fonte da versão do pacote" #: ../source/discussions/single-source-version.rst:7 -#, fuzzy -#| msgid "Incomplete" msgid "Complete" -msgstr "Incompleta" +msgstr "Completa" #: ../source/discussions/single-source-version.rst:8 -#, fuzzy -#| msgid "2021-8-24" msgid "2024-10-07" -msgstr "2021-8-24" +msgstr "2024-10-07" #: ../source/discussions/single-source-version.rst:10 msgid "" @@ -2208,6 +2948,12 @@ msgid "" "same version specifier as :func:`importlib.metadata.version` reports for the " "distribution package (as described in :ref:`runtime-version-access`)." msgstr "" +"Muitos :term:`pacotes de distribuição `Python publicam " +"um único :term:`pacote de importação ` Python onde é " +"desejado que o atributo de tempo de execução ``__version__`` no pacote de " +"importação relate o mesmo especificador de versão que :func:`importlib." +"metadata.version` relata para o pacote de distribuição (conforme descrito " +"em :ref:`runtime-version-access`)." #: ../source/discussions/single-source-version.rst:16 msgid "" @@ -2452,7 +3198,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "Versionamento" @@ -3531,10 +4277,56 @@ msgstr "" "distribuições individuais." #: ../source/glossary.rst:149 +#, fuzzy +#| msgid "classifiers" +msgid "License Classifier" +msgstr "classifiers" + +#: ../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 +msgid "License Expression" +msgstr "Expressão da licença" + +#: ../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 +#, fuzzy +#| msgid "Local version identifiers" +msgid "License Identifier" +msgstr "Identificadores de versão local" + +#: ../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 "Módulo" -#: ../source/glossary.rst:152 +#: ../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`." @@ -3542,11 +4334,11 @@ msgstr "" "A unidade básica de reutilização de código em Python, existindo em um dos " "dois tipos: :term:`Módulo Puro` ou :term:`Módulo de Extensão`." -#: ../source/glossary.rst:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "Índice de Pacotes" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." @@ -3554,11 +4346,11 @@ msgstr "" "Um repositório de distribuições com uma interface web para automatizar " "descoberta e consumo de :term:`pacotes `." -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Índice Por Projeto" -#: ../source/glossary.rst:164 +#: ../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 " @@ -3568,12 +4360,12 @@ msgstr "" "term:`Projeto` específico como o índice preferido ou necessário para " "resolver dependências desse projeto." -#: ../source/glossary.rst:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 #: ../source/guides/index-mirrors-and-caches.rst:52 msgid "Project" msgstr "Projeto" -#: ../source/glossary.rst:171 +#: ../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 " @@ -3583,7 +4375,7 @@ msgstr "" "outros recursos, ou alguma combinação dos mesmos que se destina a ser " "empacotado em uma :term:`Distribuição `." -#: ../source/glossary.rst:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -3597,7 +4389,7 @@ msgstr "" "que contém um arquivo :term:`pyproject.toml`, :term:`setup.py` ou :term:" "`setup.cfg` na raiz do diretório fonte do projeto." -#: ../source/glossary.rst:181 +#: ../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 :" @@ -3609,7 +4401,7 @@ msgstr "" "`Lançamentos `, e cada lançamento pode incluir uma ou mais :term:" "`distribuições `." -#: ../source/glossary.rst:186 +#: ../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 " @@ -3621,23 +4413,23 @@ msgstr "" "É possível instalar uma distribuição do projeto \"foo\" e fazer com que ele " "forneça um pacote importável apenas como \"bar\"." -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy msgid "Project Root Directory" msgstr "Projetos em subdiretórios" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 #, fuzzy msgid "Project Source Tree" msgstr "Resumos de projetos" -#: ../source/glossary.rst:201 +#: ../source/glossary.rst:235 #, fuzzy msgid "" "The on-disk format of a :term:`Project` used for development, containing its " @@ -3649,12 +4441,12 @@ msgstr "" "Distribution (or \"sdist\")>` ou :term:`Distribuição Construída `." -#: ../source/glossary.rst:207 +#: ../source/glossary.rst:241 #, fuzzy msgid "Project Source Metadata" msgstr "Resumos de projetos" -#: ../source/glossary.rst:210 +#: ../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 " @@ -3664,11 +4456,11 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Módulo Puro" -#: ../source/glossary.rst:223 +#: ../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)." @@ -3676,12 +4468,12 @@ msgstr "" "Um :term:`Módulo` escrito em Python e contido em um único arquivo ``.py`` (e " "possivelmente arquivos ``.pyc`` e/ou ``.pyo`` associados)." -#: ../source/glossary.rst:226 +#: ../source/glossary.rst:260 #, fuzzy msgid "Pyproject Metadata" msgstr "Nome do projeto" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -3690,32 +4482,32 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy msgid "Pyproject Metadata Key" msgstr "Declarando os metadados do projeto" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "Python Packaging Authority (PyPA)" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3731,11 +4523,11 @@ msgstr "" "sig `_ e " "`o fórum Discourse do Python `__." -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "Python Package Index (PyPI)" -#: ../source/glossary.rst:265 +#: ../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 " @@ -3745,11 +4537,11 @@ msgstr "" "comunidade Python. Está aberto a todos os desenvolvedores Python para " "consumir e distribuir suas distribuições." -#: ../source/glossary.rst:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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." @@ -3759,22 +4551,22 @@ msgstr "" "Index (PyPI)`. Ele substituiu o nome de domínio do índice legado, ``pypi." "python.org``, em 2017. Ele é tornado possível pelo :ref:`warehouse`." -#: ../source/glossary.rst:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" "O arquivo de especificação agnóstica de ferramenta para :term:`Projetos " "`. Definido na :pep:`518`." -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "Lançamento" -#: ../source/glossary.rst:283 +#: ../source/glossary.rst:317 msgid "" "A snapshot of a :term:`Project` at a particular point in time, denoted by a " "version identifier." @@ -3782,7 +4574,7 @@ msgstr "" "Um snapshot de um :term:`Projeto` em um determinado ponto no tempo, denotado " "por um identificador de versão." -#: ../source/glossary.rst:286 +#: ../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 " @@ -3794,11 +4586,11 @@ msgstr "" "projeto foi lançada, ele pode estar disponível em um formato de distribuição " "fonte e um formato de distribuição de instalador do Windows." -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "Requisito" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3812,11 +4604,11 @@ msgstr "" "podem ser consideradas um \"requisito\". Para obter mais informações, " "consulte a referência de :ref:`pip:pip install`." -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "Especificador de Requisitos" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3829,11 +4621,11 @@ msgstr "" "onde \"foo\" é o nome do projeto e a parte \">=1.3\" é o :term:" "`Especificador de Versão`" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "Arquivo de Requisitos" -#: ../source/glossary.rst:311 +#: ../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 " @@ -3843,17 +4635,40 @@ msgstr "" "ser instalados usando :ref:`pip`. Para mais informações, veja a " "documentação :ref:`pip` em :ref:`pip:Requirements Files`." -#: ../source/glossary.rst:315 +#: ../source/glossary.rst:349 +#, fuzzy +msgid "Root License Directory" +msgstr "Projetos em subdiretórios" + +#: ../source/glossary.rst:350 +#, fuzzy +#| msgid "Local directory:" +msgid "License Directory" +msgstr "Diretório local:" + +#: ../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 "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." @@ -3861,11 +4676,11 @@ msgstr "" "Os arquivos de especificação do projeto para :ref:`distutils` e :ref:" "`setuptools`. Veja também :term:`pyproject.toml`." -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "Arquivo Fonte" -#: ../source/glossary.rst:325 +#: ../source/glossary.rst:376 msgid "" "An archive containing the raw source code for a :term:`Release`, prior to " "creation of a :term:`Source Distribution ` ou :term:`Distribuição Construída `." -#: ../source/glossary.rst:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "Distribuição Fonte (ou \"sdist\")" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 #, fuzzy msgid "" "A :term:`distribution ` format (usually generated " @@ -3895,11 +4710,11 @@ msgstr "" "ou para gerar uma :term:`Distribuição Construída `. " "Veja :ref:`package-formats` para mais informações." -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "Pacote de Sistemas" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." @@ -3907,11 +4722,11 @@ msgstr "" "Um pacote fornecido em um formato nativo para o sistema operacional, por " "exemplo, um arquivo rpm ou dpkg." -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "Especificador de Versão" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3926,11 +4741,11 @@ msgstr "" "oferece suporte atualmente. O suporte para esta especificação foi " "implementado no :ref:`setuptools` v8.0 e no :ref:`pip` v6.0." -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "Ambiente Virtual" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3942,16 +4757,16 @@ msgstr "" "sistema. Para obter mais informações, consulte a seção sobre :ref:`Creating " "and using Virtual Environments`." -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 #, fuzzy msgid "Wheel Format" msgstr "Formato de arquivos" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "Wheel" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3959,22 +4774,22 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy msgid "Wheel Project" msgstr "Projeto" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "Conjunto de Trabalho" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -4172,7 +4987,7 @@ msgstr "Descrição" #: ../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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "Exemplos" @@ -4578,7 +5393,7 @@ msgstr "" "O projeto `pandas-gbq`_ permite acessar resultados de pesquisa com `Pandas`_." #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "Referências" @@ -5483,7 +6298,7 @@ msgstr "" "passar a opção ``--old-and-unmanageable``." #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 #, fuzzy msgid "``scripts``" msgstr "scripts" @@ -6407,7 +7222,7 @@ msgid "" msgstr "" "usando `mod_rewrite `_ e " "`mod_cache_disk `_, você pode armazenar em cache as solicitações para índices de " +"html>`_, você pode armazenar em cache as solicitações para índices de " "pacotes por meio de um servidor Apache" #: ../source/guides/hosting-your-own-index.rst:131 @@ -7733,6 +8548,340 @@ msgstr "" "Distribuição` que é diferente de um :term:`Pacote de Importação` que é usado " "para importar módulos em seu código-fonte do Python." +#: ../source/guides/licensing-examples-and-user-scenarios.rst:6 +msgid "Licensing examples and user scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:9 +msgid "" +":pep:`639` has specified the way to declare a 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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +#, fuzzy +#| msgid "Examples" +msgid "Licensing Examples" +msgstr "Exemplos" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +#, fuzzy +msgid "Basic example" +msgstr "Um exemplo completo" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +#, fuzzy +msgid "Advanced example" +msgstr "Um exemplo completo" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +#, fuzzy +#| msgid "The minimum required versions of the respective tools are:" +msgid "The license expressions for these projects are:" +msgstr "As versões mínimas exigidas das respectivas ferramentas são:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +#, fuzzy +msgid "Expression examples" +msgstr "Um exemplo completo" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +#, fuzzy +#| msgid "in favour of ``Requires-Dist``" +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "em favor de ``Requires-Dist``" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "Criando um README amigável para PyPI" @@ -10935,8 +12084,8 @@ msgstr "" "**Não** use ``easy_install`` (parte de :ref:`setuptools`), que foi " "descontinuado em favor do pip (veja :ref:`pip vs easy_install` para " "detalhes). Da mesma forma, **não** use ``python setup.py install`` ou " -"``python setup.py development``, que também foram descontinuados (veja :ref:" -"`setup-py-deprecated` para aprofundamento e :ref :`modernize-setup-py-" +"``python setup.py develop``, que também foram descontinuados (veja :ref:" +"`setup-py-deprecated` para aprofundamento e :ref:`modernize-setup-py-" "project` para aconselhamento sobre migração)." #: ../source/guides/tool-recommendations.rst:55 @@ -11370,16 +12519,17 @@ msgstr "" #| "backend that does not use the ``[project]`` table (it uses the ``[tool." #| "poetry]`` table instead)." msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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 "" "No momento em que este artigo foi escrito (novembro de 2023), Poetry_ era um " "backend de construção notável que não usava a tabela ``[project]`` (em vez " "disso, ele usava a tabela ``[tool.poetry]``)." -#: ../source/guides/writing-pyproject-toml.rst:37 +#: ../source/guides/writing-pyproject-toml.rst:38 #, fuzzy #| msgid "" #| "Also, the setuptools_ build backend supports both the ``[project]`` " @@ -11401,11 +12551,11 @@ msgstr "" "necessária (como construir extensões C), mas os formatos ``setup.cfg`` e " "``setup.py`` ainda são válidos. Veja :ref:`setup-py-deprecated`." -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "Declarando o backend de construção" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -11421,7 +12571,7 @@ msgstr "" "pode conter dependências adicionais. Você também pode restringir as versões, " "por exemplo, ``requires = [\"setuptools >= 61.0\"]``." -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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 " @@ -11432,15 +12582,15 @@ msgstr "" "build-backend>`). Aqui estão os valores para alguns backends de construção " "comuns:" -#: ../source/guides/writing-pyproject-toml.rst:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "Metadados estáticos vs dinâmicos" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "O resto deste guia é dedicado à tabela ``[project]``." -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 msgid "" "Most of the time, you will directly write the value of a ``[project]`` " "field. For example: ``requires-python = \">= 3.8\"``, or ``version = " @@ -11450,7 +12600,7 @@ msgstr "" "``[project]``. Por exemplo: ``requires-python = \">= 3.8\"``, ou ``version = " "\"1.0\"``." -#: ../source/guides/writing-pyproject-toml.rst:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -11463,7 +12613,7 @@ msgstr "" "ou similar. Nesses casos, você deve marcar o campo como dinâmico usando, por " "exemplo," -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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." @@ -11472,18 +12622,18 @@ msgstr "" "preenchê-lo. Consulte a documentação do seu backend de construção para saber " "como ele faz." -#: ../source/guides/writing-pyproject-toml.rst:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "Informações básicas" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "``name``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 msgid "" "Put the name of your project on PyPI. This field is required and is the only " "field that cannot be marked as dynamic." @@ -11491,7 +12641,7 @@ msgstr "" "Coloque o nome do seu projeto em PyPI. Este campo é necessário e é o único " "campo que não pode ser marcado como dinâmico." -#: ../source/guides/writing-pyproject-toml.rst:133 +#: ../source/guides/writing-pyproject-toml.rst:134 #, fuzzy #| msgid "" #| "The project name must consists of ASCII letters, digits, underscores " @@ -11506,7 +12656,7 @@ msgstr "" "\"``_``\", hífenes \"``-``\" e pontos \"``.``\". Não deve começar ou " "terminar com um sublinhado, hífen ou ponto." -#: ../source/guides/writing-pyproject-toml.rst:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -11521,18 +12671,18 @@ msgstr "" "usando qualquer uma das seguintes formas de escrever: ``Cool-Stuff``, ``cool." "stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "Coloque a versão do seu projeto." -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 msgid "" "Some more complicated version specifiers like ``2020.0.0a1`` (for an alpha " "release) are possible; see the :ref:`specification ` for " @@ -11542,13 +12692,13 @@ msgstr "" "uma versão alfa) são possíveis; veja a :ref:`especificação ` para detalhes completos." -#: ../source/guides/writing-pyproject-toml.rst:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" "Este campo é necessário, embora muitas vezes seja marcado como dinâmico " "usando" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 #, fuzzy #| msgid "" #| "This allows use cases such as filling the version from a ``__version__`` " @@ -11563,20 +12713,20 @@ msgstr "" "``__version__`` ou uma tag Git. Consulte :ref:`Single sourcing the version` " "para obter mais detalhes." -#: ../source/guides/writing-pyproject-toml.rst:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "Dependências e requisitos" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies``/``optional-dependencies``" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "Se o seu projeto tiver dependências, liste-as assim:" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." @@ -11584,7 +12734,7 @@ msgstr "" "Veja :ref:`Especificadores de dependências ` para a " "sintaxe completa que você pode usar para restringir versões." -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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 " @@ -11594,7 +12744,7 @@ msgstr "" "necessárias apenas para um recurso específico do seu pacote. Nesse caso, " "coloque-os em ``optional-dependencies``." -#: ../source/guides/writing-pyproject-toml.rst:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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 " @@ -11604,13 +12754,13 @@ msgstr "" "pode-se usar, por exemplo, ``pip install seu-projeto-de-nome[gui]`` para " "instalar seu projeto com suporte GUI, adicionando a dependência PyQt5." -#: ../source/guides/writing-pyproject-toml.rst:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "``requires-python``" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." @@ -11618,11 +12768,11 @@ msgstr "" "Isso permite que você declare a versão mínima de Python que você suporta " "[#requires-python-upper-bounds]_." -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "Criando scripts executáveis" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." @@ -11630,17 +12780,22 @@ msgstr "" "Para instalar um comando como parte do seu pacote, declare-o na tabela " "``[project.scripts]``." -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 +#, 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 ``from spam " -"import main_cli; main_cli()``." +"be available. Executing this command will do the equivalent of ``import sys; " +"from spam import main_cli; sys.exit(main_cli())``." msgstr "" "Neste exemplo, depois de instalar seu projeto, um comando ``spam-cli`` " "estará disponível. Executar este comando fará o equivalente a ``from spam " "import main_cli; main_cli()``." -#: ../source/guides/writing-pyproject-toml.rst:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -11652,7 +12807,7 @@ msgstr "" "up de terminal. Para evitar que isso aconteça, use o ``[project.gui-" "scripts]`` tabela em vez de ``[project.scripts]``." -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 msgid "" "In that case, launching your script from the command line will give back " "control immediately, leaving the script to run in the background." @@ -11661,7 +12816,7 @@ msgstr "" "devolve o controle imediatamente, deixando o script a ser executado em " "segundo plano." -#: ../source/guides/writing-pyproject-toml.rst:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." @@ -11669,16 +12824,16 @@ msgstr "" "A diferença entre ``[project.scripts]`` e ``[project.gui-scripts]`` é apenas " "relevante no Windows." -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "Sobre o seu projeto" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "``authors``/``maintainers``" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 msgid "" "Both of these fields contain lists of people identified by a name and/or an " "email address." @@ -11686,13 +12841,13 @@ msgstr "" "Ambos os campos contêm listas de pessoas identificadas por um nome e/ou um " "endereço de e-mail." -#: ../source/guides/writing-pyproject-toml.rst:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "``description``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 msgid "" "This should be a one-line description of your project, to show as the " "\"headline\" of your project page on PyPI (`example `_), and " @@ -11703,13 +12858,13 @@ msgstr "" "outros lugares como listas de resultados de pesquisa (`exemplo `_)." -#: ../source/guides/writing-pyproject-toml.rst:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "``readme``" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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." @@ -11719,42 +12874,94 @@ msgstr "" "projeto em PyPI. Tipicamente, seu projeto terá um arquivo ``README.md`` ou " "``README.rst`` e você acabou de colocar seu nome de arquivo aqui." -#: ../source/guides/writing-pyproject-toml.rst:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "O formato do README é detectado automaticamente a partir da extensão:" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "``README.md`` → `Markdown no estilo do GitHub `_," -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "``README.rst`` → reStructuredText `_ (sem extensões do Sphinx)." -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "Você também pode especificar o formato explicitamente assim:" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "``license``" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +#, fuzzy +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 "" +"O argumento ``license`` é mais comumente usado para indicar diferenças de " +"licenças conhecidas ou para incluir sua própria licença exclusiva. Como " +"regra geral, é uma boa ideia usar uma licença padrão bem conhecida, tanto " +"para evitar confusão quanto porque algumas organizações evitam software cuja " +"licença não é aprovada." + +#: ../source/guides/writing-pyproject-toml.rst:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +#, fuzzy +#| msgid "" +#| "This can take two forms. You can put your license in a file, typically " +#| "``LICENSE`` or ``LICENSE.txt``, and link that file here:" msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" "Isto pode tomar duas formas. Você pode colocar sua licença em um arquivo, " "tipicamente ``LICENSE`` ou ``LICENSE.txt``, e vincular esse arquivo aqui:" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "ou você pode escrever o nome da licença:" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 #, fuzzy msgid "" "If you are using a standard, well-known license, it is not necessary to use " @@ -11769,13 +12976,76 @@ msgstr "" "para evitar confusão quanto porque algumas organizações evitam software cuja " "licença não é aprovada." -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +#, fuzzy +#| msgid "``license``" +msgid "``license-files``" +msgstr "``license``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "``keywords``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 msgid "" "This will help PyPI's search box to suggest your project when people search " "for these keywords." @@ -11783,13 +13053,13 @@ msgstr "" "Isso ajudará a caixa de pesquisa do PyPI a sugerir o seu projeto quando as " "pessoas procuram essas palavras-chave." -#: ../source/guides/writing-pyproject-toml.rst:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "``classifiers``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." @@ -11797,7 +13067,7 @@ msgstr "" "Uma lista de classificadores do PyPI que se aplicam ao seu projeto. " "Verifique a `lista completa de possibilidades `_." -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 #, fuzzy msgid "" "Although the list of classifiers is often used to declare what Python " @@ -11812,7 +13082,7 @@ msgstr "" "projetos. Para realmente restringir em quais versões do Python um projeto " "pode ser instalado, use o argumento :ref:`python_requires`." -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 #, fuzzy msgid "" "To prevent a package from being uploaded to PyPI, use the special " @@ -11823,13 +13093,13 @@ msgstr "" "especial ``'Private :: Do Not Upload'``. PyPI sempre rejeitará pacotes com " "classificadores começando com ``\"Private ::'``." -#: ../source/guides/writing-pyproject-toml.rst:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "``urls``" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 msgid "" "A list of URLs associated with your project, displayed on the left sidebar " "of your PyPI project page." @@ -11837,7 +13107,7 @@ msgstr "" "Uma lista de URLs associadas ao seu projeto, exibida na barra lateral " "esquerda da página do projeto PyPI." -#: ../source/guides/writing-pyproject-toml.rst:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -11845,7 +13115,7 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 #, fuzzy #| msgid "" #| "Note that if the key contains spaces, it needs to be quoted, e.g., " @@ -11860,21 +13130,21 @@ msgstr "" "``Website = \"https://example.com\"``, mas ``\"Official Website\" = " "\"https://example.com\"``." -#: ../source/guides/writing-pyproject-toml.rst:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -11882,11 +13152,11 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "Plugins avançados" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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 " @@ -11896,15 +13166,15 @@ msgstr "" "Pytest_ e Pygments_. Para criar tal plugin, você precisa declará-lo em uma " "subtabela de ``[project.entry-points]`` assim:" -#: ../source/guides/writing-pyproject-toml.rst:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "Veja o :ref:`guia Plugin ` para mais informações." -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "Um exemplo completo" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -15754,16 +17024,23 @@ msgid "File contents" msgstr "Conteúdo dos arquivos" #: ../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 name " -"of the package, e.g. ``beaglevote`` and {version} is replaced with its " -"version, e.g. ``1.0.0``, consist of:" +"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 "" "O conteúdo de um arquivo wheel, onde {distribution} é substituído pelo nome " "do pacote, por exemplo, ``beaglevote`` e {version} é substituído por sua " "versão, p.ex., ``1.0.0``, consiste em:" -#: ../source/specifications/binary-distribution-format.rst:181 +#: ../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 " @@ -15773,11 +17050,18 @@ msgstr "" "``purelib`` ou ``platlib`` conforme especificado em ``WHEEL``. ``purelib`` e " "``platlib`` são normalmente ``site-packages``." -#: ../source/specifications/binary-distribution-format.rst:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "``{distribution}-{version}.dist-info/`` contém metadados." -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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/`` contém metadados." + +#: ../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 " @@ -15789,7 +17073,7 @@ msgstr "" "subdiretório é um índice em um dicionário de caminhos de instalação (p.ex., " "``data``, ``scripts``, ``headers``, ``purelib``, ``platlib``)." -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../source/specifications/binary-distribution-format.rst:193 #, fuzzy #| msgid "" #| "Python scripts must appear in ``scripts`` and begin with exactly ``b'#!" @@ -15806,7 +17090,7 @@ msgstr "" "python`` no momento da instalação. Eles podem ter qualquer ou nenhuma " "extensão." -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../source/specifications/binary-distribution-format.rst:197 msgid "" "``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " "greater format metadata." @@ -15814,7 +17098,7 @@ msgstr "" "``{distribution}-{version}.dist-info/METADATA`` é Metadata versão 1.1 ou " "metadados de formato superior." -#: ../source/specifications/binary-distribution-format.rst:195 +#: ../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::" @@ -15822,11 +17106,11 @@ msgstr "" "``{distribution}-{version}.dist-info/WHEEL`` são metadados sobre p arquivo " "em si no mesmo formato \"chave: valor\"::" -#: ../source/specifications/binary-distribution-format.rst:205 +#: ../source/specifications/binary-distribution-format.rst:209 msgid "``Wheel-Version`` is the version number of the Wheel specification." msgstr "``Wheel-Version`` é o número de versão da especificação Wheel." -#: ../source/specifications/binary-distribution-format.rst:206 +#: ../source/specifications/binary-distribution-format.rst:210 msgid "" "``Generator`` is the name and optionally the version of the software that " "produced the archive." @@ -15834,7 +17118,7 @@ msgstr "" "``Generator`` é o nome e, opcionalmente, a versão do software que produziu o " "arquivo." -#: ../source/specifications/binary-distribution-format.rst:208 +#: ../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 " @@ -15844,7 +17128,7 @@ msgstr "" "deve ser instalado em purelib; caso contrário, a raiz deve ser instalada no " "platlib." -#: ../source/specifications/binary-distribution-format.rst:211 +#: ../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``." @@ -15852,14 +17136,14 @@ msgstr "" "``Tag`` são as tags de compatibilidade expandida do wheel; no exemplo, o " "nome do arquivo conteria ``py2.py3-none-any``." -#: ../source/specifications/binary-distribution-format.rst:213 +#: ../source/specifications/binary-distribution-format.rst:217 msgid "" "``Build`` is the build number and is omitted if there is no build number." msgstr "" "``Build`` é o número da construção e é omitido se não houver número da " "construção." -#: ../source/specifications/binary-distribution-format.rst:214 +#: ../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 " @@ -15869,7 +17153,7 @@ msgstr "" "que ele suporta, e deve falhar se Wheel-Version tiver uma versão principal " "maior do que a versão que ele suporta." -#: ../source/specifications/binary-distribution-format.rst:217 +#: ../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." @@ -15877,11 +17161,11 @@ msgstr "" "O Wheel, sendo um formato de instalação destinado a funcionar em várias " "versões do Python, geralmente não inclui arquivos .pyc." -#: ../source/specifications/binary-distribution-format.rst:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "Wheel não contém setup.py ou setup.cfg." -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -15893,12 +17177,12 @@ msgstr "" "oferece um superconjunto da funcionalidade fornecida pelos formatos binários " "wininst e egg existentes." -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../source/specifications/binary-distribution-format.rst:232 #: ../source/specifications/recording-installed-packages.rst:23 msgid "The .dist-info directory" msgstr "O diretório .dist-info" -#: ../source/specifications/binary-distribution-format.rst:230 +#: ../source/specifications/binary-distribution-format.rst:234 msgid "" "Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " "RECORD." @@ -15906,7 +17190,7 @@ msgstr "" "Os diretórios .dist-info de wheels incluem no mínimo METADATA, WHEEL e " "RECORD." -#: ../source/specifications/binary-distribution-format.rst:232 +#: ../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." @@ -15914,12 +17198,12 @@ msgstr "" "METADATA são os metadados do pacote, o mesmo formato do PKG-INFO encontrado " "na raiz dos sdists." -#: ../source/specifications/binary-distribution-format.rst:234 +#: ../source/specifications/binary-distribution-format.rst:238 msgid "WHEEL is the wheel metadata specific to a build of the package." msgstr "" "WHEEL são os metadados de wheel específicos para uma construção do pacote." -#: ../source/specifications/binary-distribution-format.rst:235 +#: ../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 " @@ -15934,17 +17218,17 @@ msgstr "" "wheel assinados contam com hashes fortes em RECORD para validar a " "integridade do arquivo." -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../source/specifications/binary-distribution-format.rst:245 msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." msgstr "INSTALLER e REQUESTED da PEP 376 não são incluídos no arquivo." -#: ../source/specifications/binary-distribution-format.rst:242 +#: ../source/specifications/binary-distribution-format.rst:246 msgid "" "RECORD.jws is used for digital signatures. It is not mentioned in RECORD." msgstr "" "RECORD.jws é usado para assinaturas digitais. Não é mencionado no RECORD." -#: ../source/specifications/binary-distribution-format.rst:244 +#: ../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." @@ -15953,7 +17237,7 @@ msgstr "" "assinaturas S/MIME para proteger seus arquivos wheels. Não é mencionado no " "RECORD." -#: ../source/specifications/binary-distribution-format.rst:247 +#: ../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 " @@ -15965,11 +17249,26 @@ msgstr "" "a instalação falhará se qualquer arquivo no arquivo não for mencionado e com " "hash correto em RECORD." -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +#, fuzzy +#| msgid "The .dist-info directory" +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "O diretório .dist-info" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "O diretório .data" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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/ " @@ -15979,7 +17278,7 @@ msgstr "" "para o diretório .data, nomeado como o diretório .dist-info, mas com a " "extensão .data/::" -#: ../source/specifications/binary-distribution-format.rst:264 +#: ../source/specifications/binary-distribution-format.rst:278 msgid "" "The .data directory contains subdirectories with the scripts, headers, " "documentation and so forth from the distribution. During installation the " @@ -15989,11 +17288,11 @@ msgstr "" "documentação e assim por diante da distribuição. Durante a instalação, o " "conteúdo desses subdiretórios é movido para seus caminhos de destino." -#: ../source/specifications/binary-distribution-format.rst:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "Arquivos wheels assinados" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -16010,7 +17309,7 @@ msgstr "" "gerados, como arquivos .pyc, mas não RECORD, que não pode conter seu próprio " "hash. Por exemplo::" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -16022,7 +17321,7 @@ msgstr "" "outros arquivos no arquivo devem ter um hash correto em RECORD ou a " "instalação falhará." -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 #, fuzzy msgid "" "If JSON web signatures are used, one or more JSON Web Signature JSON " @@ -16035,11 +17334,11 @@ msgstr "" "jws adjacente a RECORD. JWS é usado para assinar RECORD incluindo o hash " "SHA-256 de RECORD como a carga JSON da assinatura::" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "(O valor hash é o mesmo formato usado em RECORD.)" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." @@ -16047,7 +17346,7 @@ msgstr "" "Se RECORD.p7s for usado, ele deve conter uma assinatura de formato S/MIME " "separada de RECORD." -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -16060,15 +17359,15 @@ msgstr "" "RECORD, um verificador de assinatura separado só precisa estabelecer se " "RECORD corresponde à assinatura." -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "Veja" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "https://datatracker.ietf.org/doc/html/rfc7515" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" @@ -16076,26 +17375,26 @@ msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "https://datatracker.ietf.org/doc/html/rfc7517" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "FAQ" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "Wheel define um diretório .data. Devo colocar todos os meus dados lá?" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -16111,11 +17410,11 @@ msgstr "" "resource)`` ainda que *esses* arquivos normalmente não sejam distribuídos no " "diretório ``.data`` do *wheel*." -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "Por que o wheel inclui assinaturas anexadas?" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -16129,11 +17428,11 @@ msgstr "" "os arquivos individuais podem ser verificados sem ter que baixar todo o " "arquivo." -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "Por que wheel permite assinaturas JWS?" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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 " @@ -16144,11 +17443,11 @@ msgstr "" "do projeto da roda. O JWS produz uma implementação puro Python concisa e " "útil." -#: ../source/specifications/binary-distribution-format.rst:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "Por que wheel também permite assinaturas S/MIME?" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 msgid "" "S/MIME signatures are allowed for users who need or want to use existing " "public key infrastructure with wheel." @@ -16156,7 +17455,7 @@ msgstr "" "Assinaturas S/MIME são permitidas para usuários que precisam ou querem usar " "uma infraestrutura de chaves públicas existente com o wheel." -#: ../source/specifications/binary-distribution-format.rst:354 +#: ../source/specifications/binary-distribution-format.rst:368 msgid "" "Signed packages are only a basic building block in a secure package update " "system. Wheel only provides the building block." @@ -16164,11 +17463,11 @@ msgstr "" "Pacotes assinados são apenas um bloco de construção básico em um sistema de " "atualização segura de pacotes. Wheel só fornece o bloco de construção." -#: ../source/specifications/binary-distribution-format.rst:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "Qual é a diferença entre \"purelib\" e \"platlib\"?" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -16180,7 +17479,7 @@ msgstr "" "puro Python em '/usr/lib/pythonX.Y/site-packages' e pacotes dependentes de " "plataforma em '/usr/lib64/pythonX.Y/site-packages'." -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -16192,7 +17491,7 @@ msgstr "" "Purelib: true\" com os mesmos arquivos na raiz, e é válido ter arquivos nas " "categorias \"purelib\" e \"platlib\"." -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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 " @@ -16202,11 +17501,11 @@ msgstr "" "dependendo se é puro Python ou não e esses arquivos devem estar na raiz com " "a configuração apropriada fornecida para \"Root-is-purelib\"." -#: ../source/specifications/binary-distribution-format.rst:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "É possível importar código Python diretamente de um arquivo wheel?" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -16220,7 +17519,7 @@ msgstr "" "``sys.path``. No entanto, embora esse comportamento seja uma consequência " "natural do design do formato, não é recomendável confiar nele." -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -16239,7 +17538,7 @@ msgstr "" "segurança, ou integração completa com o maquinário de construção padrão para " "extensões C, publicando arquivos de cabeçalho no local apropriado)." -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -16273,7 +17572,7 @@ msgstr "" "abstratos internamente, a interface com componentes externos ainda pode " "exigir a disponibilidade de um arquivo real no disco." -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -16287,31 +17586,31 @@ msgstr "" "esteja ciente de que muitos projetos exigirão que uma falha seja reproduzida " "com um pacote totalmente instalado antes de aceitá-lo como um bug genuíno." -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "Histórico" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 #, fuzzy msgid "" "February 2021: The rules on escaping in wheel filenames were revised, to " @@ -16321,7 +17620,7 @@ msgstr "" "para alinhá-las com o que as ferramentas populares realmente fazem " "(fevereiro de 2021)." -#: ../source/specifications/binary-distribution-format.rst:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -16329,11 +17628,30 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +#, fuzzy +#| msgid "" +#| "This document describes the dependency specifiers format as originally " +#| "specified in :pep:`508`." +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" +"Este documento descreve o formato dos especificadores de dependência " +"conforme originalmente especificado na :pep:`508`." + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "Apêndice" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "Exemplo de implementação de urlsafe-base64-nopad::" @@ -16482,8 +17800,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "Exemplo::" @@ -16620,8 +17938,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "Exemplos::" @@ -17449,24 +18767,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "Campos descontinuados" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "Uma string contendo a URL para a página da distribuição." -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 #, fuzzy #| msgid "" #| "A string containing the URL from which this version of the distribution " @@ -17483,15 +18810,15 @@ msgstr "" "ser baixada. (Isso significa que a URL não pode ser algo como \".../" "BeagleVote-latest.tgz\", mas deve ser \".../BeagleVote-0.45.tgz\".)" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "Requires" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "em favor de ``Requires-Dist``" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." @@ -17499,7 +18826,7 @@ msgstr "" "Cada entrada contém uma string descrevendo algum outro módulo ou pacote " "requerido por este pacote." -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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 " @@ -17509,7 +18836,7 @@ msgstr "" "pacote utilizável com a instrução ``import``, opcionalmente seguida por uma " "declaração de versão dentro de parênteses." -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -17527,7 +18854,7 @@ msgstr "" "release\" opcional no final que consiste na letra 'a' ou 'b' seguida de um " "número. Os números da versão do exemplo são \"1.0\", \"2.3a2\", \"1.3.99\"." -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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." @@ -17535,7 +18862,7 @@ msgstr "" "Qualquer número de operadores condicionais pode ser especificado, por " "exemplo, a string \">1.0, !=1.3.4, <2.0\" é uma declaração de versão válida." -#: ../source/specifications/core-metadata.rst:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." @@ -17543,7 +18870,7 @@ msgstr "" "Todos os seguintes são possíveis strings de requisito: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." @@ -17551,15 +18878,15 @@ msgstr "" "Não há nenhuma lista canônica de quais strings devem ser usadas; a " "comunidade Python é livre para escolher seus próprios padrões." -#: ../source/specifications/core-metadata.rst:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "Provides" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "em favor de ``Provides-Dist``" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -17573,15 +18900,15 @@ msgstr "" "pode ser fornecida (sem um operador de comparação); o número de versão do " "pacote será implícito se nenhum for especificado." -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "Obsoletes" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "em favor de ``Obsoletes-Dist``" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 msgid "" "Each entry contains a string describing a package or module that this " "package renders obsolete, meaning that the two packages should not be " @@ -17591,7 +18918,7 @@ msgstr "" "pacote torna obsoleta, o que significa que os dois projetos não devem ser " "instalados ao mesmo tempo. Declarações de versão pode ser fornecidas." -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:912 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 " @@ -17601,74 +18928,74 @@ msgstr "" "projeto, por exemplo, Gorgon 2.3 é incluído no Torqued Python 1.0. Quando " "você instala o Torqued Python, o pacote Gorgon deve ser removido." -#: ../source/specifications/core-metadata.rst:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 #, fuzzy msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" "Adicionada documentação para o campo ``Description-Content-Type``. (:pr:" "`258`)" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "Adicionado o campo ``Dinâmico``." -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 #, fuzzy #| msgid "Added the ``Dynamic`` field." msgid "Added the ``License-Expression`` field." msgstr "Adicionado o campo ``Dinâmico``." -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 #, fuzzy #| msgid "Added the ``Dynamic`` field." msgid "Added the ``License-File`` field." msgstr "Adicionado o campo ``Dinâmico``." -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "Marcação reStructuredText: https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" @@ -18070,11 +19397,11 @@ msgstr "" "significado semântico. A única exceção é detectar o fim de um requisito de " "URL." -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "Nomes" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -18095,11 +19422,11 @@ msgstr "" "redefinição completa do nome pode ocorrer em um futuro PEP de metadados. A " "regex (executada com re.IGNORECASE) é ::" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "Extras" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -18111,7 +19438,7 @@ msgstr "" "dependências adicionais da distribuição **quando** o extra é usado em uma " "especificação de dependência. Por exemplo ::" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -18123,17 +19450,16 @@ msgstr "" "de solicitações e nas próprias dependências das solicitações, além de " "quaisquer dependências listadas no extra de \"security\" das solicitações." -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "Se vários extras forem listados, todas as dependências serão unidas." -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "Versões" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -18152,11 +19478,11 @@ msgstr "" "uma versão estão presentes para compatibilidade com :pep:`345`, mas não " "devem ser gerados, apenas aceitos." -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "Marcadores de ambiente" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -18170,7 +19496,7 @@ msgstr "" "argparse está sempre presente. Em versões mais antigas Python, ele deve ser " "instalado como uma dependência. Isso pode ser expresso como ::" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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." @@ -18178,7 +19504,7 @@ msgstr "" "Uma expressão de marcador é avaliada como True ou False. Quando for avaliado " "como False, a especificação de dependência deve ser ignorada." -#: ../source/specifications/dependency-specifiers.rst:186 +#: ../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 " @@ -18192,7 +19518,7 @@ msgstr "" "padronizados pela primeira vez na :pep:`345`. Este documento corrige alguns " "problemas que foram observados no projeto descrito em :pep:`426`." -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -18214,7 +19540,7 @@ msgstr "" "comportamento do Python. Caso contrário, um erro deve ser levantado. Por " "exemplo, o seguinte resultará em erros ::" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -18231,7 +19557,7 @@ msgstr "" "a caracteres não-ASCII: espera-se que todas as variáveis de tempo de " "execução às quais nos referimos sejam somente ASCII." -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -18243,7 +19569,7 @@ msgstr "" "os valores são definidos em todas as versões Python hoje -- é um erro na " "implementação de marcadores se um valor não for definido." -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 msgid "" "Unknown variables must raise an error rather than resulting in a comparison " "that evaluates to True or False." @@ -18251,7 +19577,7 @@ msgstr "" "Variáveis desconhecidas devem gerar um erro em vez de resultar em uma " "comparação avaliada como True ou False." -#: ../source/specifications/dependency-specifiers.rst:219 +#: ../source/specifications/dependency-specifiers.rst:227 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 " @@ -18261,7 +19587,7 @@ msgstr "" "implementação do Python devem ser avaliadas como ``0`` para versões e uma " "string vazia para todas as outras variáveis." -#: ../source/specifications/dependency-specifiers.rst:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -18278,41 +19604,41 @@ msgstr "" "a variável \"extra\" deve resultar em um erro como todas as outras variáveis " "desconhecidas." -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "Marcador" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "Equivalente no Python" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "Valores de amostra" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "``os_name``" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 #, fuzzy msgid ":py:data:`os.name`" msgstr "``os.name``" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "``posix``, ``java``" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "``sys_platform``" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 #, fuzzy msgid ":py:data:`sys.platform`" msgstr "``sys.platform``" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" @@ -18320,68 +19646,69 @@ msgstr "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (observe que \"linux\" é " "do Python3 e \"linux2\" do Python2)" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "``platform_machine``" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 #, fuzzy msgid ":py:func:`platform.machine()`" msgstr "``platform.machine()``" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "``x86_64``" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "``platform_python_implementation``" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 #, fuzzy msgid ":py:func:`platform.python_implementation()`" msgstr "``platform.python_implementation()``" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "``CPython``, ``Jython``" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "``platform_release``" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 #, fuzzy msgid ":py:func:`platform.release()`" msgstr "``platform.release()``" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "``platform_system``" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 #, fuzzy msgid ":py:func:`platform.system()`" msgstr "``platform.system()``" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "``Linux``, ``Windows``, ``Java``" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "``platform_version``" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 #, fuzzy msgid ":py:func:`platform.version()`" msgstr "``platform.version()``" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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 " @@ -18391,68 +19718,68 @@ msgstr "" "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``" -#: ../source/specifications/dependency-specifiers.rst:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "``python_version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "``'.'.join(platform.python_version_tuple()[:2])``" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "``3.4``, ``2.7``" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "``python_full_version``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 #, fuzzy msgid ":py:func:`platform.python_version()`" msgstr "``platform.python_version()``" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "``3.4.0``, ``3.5.0b1``" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "``implementation_name``" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 #, fuzzy msgid ":py:data:`sys.implementation.name `" msgstr "``sys.implementation.name``" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "``cpython``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "``implementation_version``" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "veja a definição abaixo" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "``extra``" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" "Um erro, exceto quando definido pelo contexto que interpreta a especificação." -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "``test``" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 #, fuzzy msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." @@ -18461,7 +19788,7 @@ msgstr "" "A variável do marcador ``implementation_version`` é derivada de ``sys." "implementation.version``::" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." @@ -18469,25 +19796,25 @@ msgstr "" "Esta seção de marcadores de ambiente, inicialmente definida na :pep:`508`, " "substitui a seção de marcadores de ambiente na :pep:`345`." -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "Gramática completa" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "A gramática completa do persley ::" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 #, fuzzy msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" "Um programa de teste -- se a gramática estiver em uma string ``grammar``::" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 #, fuzzy msgid "" "July 2019: The definition of ``python_version`` was `changed =``." @@ -18878,7 +20205,7 @@ msgstr "" "fins de compatibilidade com versões anteriores, com valor ``=``." -#: ../source/specifications/direct-url-data-structure.rst:99 +#: ../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 " @@ -18890,7 +20217,7 @@ msgstr "" "a chave ``hash`` em contextos onde o faziam antes, de modo a manter a " "compatibilidade com versões anteriores para clientes existentes." -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -18902,11 +20229,11 @@ msgstr "" "que os consumidores possam considerar a chave ``hashes`` apenas se estiver " "presente, e voltar para ``hash`` caso contrário." -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "Diretórios locais" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:" @@ -18914,7 +20241,7 @@ msgstr "" "Quando ``url`` se refere a um diretório local, a chave ``dir_info`` DEVE " "estar presente como um dicionário com a seguinte chave:" -#: ../source/specifications/direct-url-data-structure.rst:113 +#: ../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 " @@ -18924,7 +20251,7 @@ msgstr "" "instalada em modo editável, ``false`` caso contrário. Se ausente, é usado o " "padrão ``false``." -#: ../source/specifications/direct-url-data-structure.rst:116 +#: ../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 " @@ -18936,11 +20263,11 @@ msgstr "" "caminho deve ser absoluto. Links simbólicos DEVERIAM ser preservados ao " "tornar os caminhos relativos absolutos." -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "Projetos em subdiretórios" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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 " @@ -18951,11 +20278,11 @@ msgstr "" "diretório local, para especificar onde ``pyproject.toml`` ou ``setup.py`` " "está localizado." -#: ../source/specifications/direct-url-data-structure.rst:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "VCS registrados" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -18974,48 +20301,48 @@ msgstr "" "adicionais que seriam necessários para oferecer suporte a esse VCS DEVERIAM " "ser prefixados com o nome do comando VCS." -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "Git" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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 "Site" -#: ../source/specifications/direct-url-data-structure.rst:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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 "Comando vcs" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" msgstr "git" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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 "Campo ``vcs``" -#: ../source/specifications/direct-url-data-structure.rst:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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 "Campo ``requested_revision``" -#: ../source/specifications/direct-url-data-structure.rst:153 +#: ../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." @@ -19023,18 +20350,18 @@ msgstr "" "Um nome de tag, nome de branch, ref Git, hash de commit, hash de commit " "encurtado ou outra coisa relacionada a commit." -#: ../source/specifications/direct-url-data-structure.rst:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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 "Campo ``commit_id``" -#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "Um hash de confirmação (40 caracteres hexadecimais sha1)." -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -19047,64 +20374,64 @@ msgstr "" "ref começando com ``refs/remotes/origin/`` após a clonagem corresponde a um " "branch." -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "Mercurial" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" msgstr "hg" -#: ../source/specifications/direct-url-data-structure.rst:180 +#: ../source/specifications/direct-url-data-structure.rst:190 msgid "A tag name, branch name, changeset ID, shortened changeset ID." msgstr "" "Um nome de tag, nome de branch, ID de changeset, ID de changeset abreviado." -#: ../source/specifications/direct-url-data-structure.rst:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "Um ID de changeset (40 caracteres hexadecimais)." -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "Bazaar" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 #, fuzzy msgid "https://www.breezy-vcs.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" msgstr "bzr" -#: ../source/specifications/direct-url-data-structure.rst:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "Um nome de tag, nome de branch, id de revisão." -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "Um id de revisão." -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" msgstr "svn" -#: ../source/specifications/direct-url-data-structure.rst:216 +#: ../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``." @@ -19112,7 +20439,7 @@ msgstr "" "``requested_revision`` deve ser compatível com a opção ``--revision`` do " "``svn checkout``. No Subversion, branch ou tag é parte de ``url``." -#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../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." @@ -19121,39 +20448,39 @@ msgstr "" "únicos, este campo é o número da revisão do Subversion no repositório " "correspondente." -#: ../source/specifications/direct-url-data-structure.rst:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "Arquivo fonte:" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "URL Git com tag e hash de commit:" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "Diretório local:" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "Diretório local em modo editável:" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 #, fuzzy msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `." msgstr "" @@ -20594,7 +21921,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 #, fuzzy msgid "Recommendations" msgstr "Recomendações de ferramentas" @@ -20948,12 +22275,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -21084,8 +22411,8 @@ msgstr "``manylinux``" 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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 @@ -21095,19 +22422,234 @@ msgid "" "output:" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:188 +#: ../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 +#, fuzzy +#| msgid "``x86_64``" +msgid "``arm64``, ``x86_64``" +msgstr "``x86_64``" + +#: ../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 +#, fuzzy +#| msgid "``install``" +msgid "``intel``" +msgstr "``install``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +#, fuzzy +#| msgid "``x86_64``" +msgid "``i386``, ``x86_64``" +msgstr "``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``fat``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +#, fuzzy +#| msgid "``3.4``, ``2.7``" +msgid "``i386``, ``ppc``" +msgstr "``3.4``, ``2.7``" + +#: ../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 +#, fuzzy +#| msgid "``x86_64``" +msgid "``fat64``" +msgstr "``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +#, fuzzy +#| msgid "``x86_64``" +msgid "``ppc64``, ``x86_64``" +msgstr "``x86_64``" + +#: ../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 +#, fuzzy +#| msgid "``x86_64``" +msgid "``x86``" +msgstr "``x86_64``" + +#: ../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 "" -"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." +"``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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "Uso" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -21115,7 +22657,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -21126,14 +22668,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -21142,69 +22684,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "cp33-cp33m-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "cp33-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "cp3-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "cp33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "cp3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "py33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "py3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "cp33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "cp3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "py33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "py3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "py32-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "py31-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "py30-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -21215,11 +22757,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "Conjuntos de Etiquetas Comprimidos" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -21229,7 +22771,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -21237,11 +22779,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "Quais etiquetas são utilizadas por padrão?" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -21249,13 +22791,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -21266,23 +22808,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -21290,11 +22832,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -21304,33 +22846,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -21338,13 +22880,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -21353,34 +22895,54 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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 +#, fuzzy +#| msgid "" +#| "This document describes the dependency specifiers format as originally " +#| "specified in :pep:`508`." +msgid "December 2023: The tags for iOS were approved through :pep:`730`." +msgstr "" +"Este documento descreve o formato dos especificadores de dependência " +"conforme originalmente especificado na :pep:`508`." + +#: ../source/specifications/platform-compatibility-tags.rst:445 +#, fuzzy +#| msgid "" +#| "This document describes the dependency specifiers format as originally " +#| "specified in :pep:`508`." +msgid "March 2024: The tags for Android were approved through :pep:`738`." +msgstr "" +"Este documento descreve o formato dos especificadores de dependência " +"conforme originalmente especificado na :pep:`508`." + #: ../source/specifications/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "O arquivo :file:`.pypirc`" @@ -21674,7 +23236,7 @@ msgid "``dependencies``" msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "``dynamic``" @@ -21686,22 +23248,23 @@ msgstr "``entry-points``" msgid "``gui-scripts``" msgstr "``gui-scripts``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "``maintainers``" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "``optional-dependencies``" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "Tipo TOML_: string" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" @@ -21709,11 +23272,11 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Name `" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "O nome do projeto." -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." @@ -21722,7 +23285,7 @@ msgstr "" "conforme especificado por :pep:`503`, assim que for lido para consistência " "interna." -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" @@ -21730,7 +23293,7 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Version `" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." @@ -21738,11 +23301,11 @@ msgstr "" "A versão do projeto, conforme definido na :ref:`especificação de " "especificadores de versão `." -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "Os usuários DEVEM preferir especificar versões já normalizadas." -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" @@ -21750,17 +23313,17 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Summary `" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "Tipo TOML_: string ou tabela" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type ` e :ref:`Description-Content-Type " "`" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "A descrição completa do projeto (isto é, o README)." -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -21799,7 +23362,7 @@ msgstr "" "``dynamic``. Para todos os sufixos não reconhecidos quando um tipo de " "conteúdo não é fornecido, as ferramentas DEVEM levantar um erro." -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -21814,7 +23377,7 @@ msgstr "" "portanto, as ferramentas DEVEM levantar um erro se os metadados " "especificarem ambas as chaves." -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -21836,7 +23399,7 @@ msgstr "" "`. Caso contrário, as ferramentas DEVEM levantar um erro para " "tipos de conteúdo não suportados." -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" @@ -21844,44 +23407,151 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Requires-Python `" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "Os requisitos de versão do Python do projeto." -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" -msgstr "Tipo TOML_: tabela" - -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:241 +#, fuzzy +#| msgid "" +#| "Corresponding :ref:`core metadata ` field: :ref:`License " +#| "`" msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`License `" -#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." msgstr "" -"A tabela pode ter uma de duas chaves. A chave ``file`` tem um valor de " -"string que é um caminho de arquivo relativo a ``pyproject.toml`` para o " -"arquivo que contém a licença do projeto. As ferramentas DEVEM presumir que a " -"codificação do arquivo é UTF-8. A chave ``text`` tem um valor de string que " -"é a licença do projeto. Essas chaves são mutuamente exclusivas, portanto, " -"uma ferramenta DEVE levantar um erro se os metadados especificarem ambas as " -"chaves." + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" +msgstr "Tipo TOML_: vetor de strings" #: ../source/specifications/pyproject-toml.rst:254 +#, fuzzy +#| msgid "" +#| "Corresponding :ref:`core metadata ` field: :ref:`License " +#| "`" +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" +"Campo correspondente dos :ref:`metadados principais `: :ref:" +"`License `" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "Tipo TOML_: Vetor de tabelas em linha com strings de chaves e valores" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -21893,7 +23563,7 @@ msgstr "" "email>`, :ref:`Maintainer ` e :ref:`Maintainer-" "email `" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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 " @@ -21903,7 +23573,7 @@ msgstr "" "significado exato está aberto à interpretação -- pode listar os autores " "originais ou primários, mantenedores atuais ou proprietários do pacote." -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." @@ -21911,7 +23581,7 @@ msgstr "" "A chave \"maintainers\" é semelhante a \"authors\" no sentido de que seu " "significado exato está aberto à interpretação." -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -21926,14 +23596,14 @@ msgstr "" "ser um endereço de email válido. Ambas as chaves são opcionais, mas ao menos " "uma das chaves deve ser especificada na tabela." -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" "O uso dos dados para preencher :ref:`metadados principais ` " "deve ser feito da seguinte forma:" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." @@ -21942,7 +23612,7 @@ msgstr "" "metadata-author>` ou :ref:`Maintainer ` conforme " "apropriado." -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` ou :ref:`Maintainer-email ` conforme apropriado." -#: ../source/specifications/pyproject-toml.rst:286 +#: ../source/specifications/pyproject-toml.rst:344 msgid "" "If both ``email`` and ``name`` are provided, the value goes in :ref:`Author-" "email ` or :ref:`Maintainer-email ` ou :ref:`Maintainer-email ` conforme apropriado, com o formado ``{name} <{email}>``." -#: ../source/specifications/pyproject-toml.rst:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "Vários valores devem ser separados por vírgulas." -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "Tipo TOML_: vetor de strings" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" @@ -21979,11 +23644,11 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Keywords `" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "As palavras-chave do projeto." -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" @@ -21991,15 +23656,23 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Classifier `" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "Classificadores Trove que se aplicam ao projeto." -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "Tipo TOML_: tabela com chaves e valores de strings" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" @@ -22007,18 +23680,18 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Project-URL `" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "Pontos de entrada" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" @@ -22026,11 +23699,11 @@ msgstr "" "Tipo TOML_: tabela (``[project.scripts]``, ``[project.gui-scripts]`` e " "``[project.entry-points]``)" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr ":ref:`Especificação de pontos de entrada `" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -22042,7 +23715,7 @@ msgstr "" "de pontos de entrada `. A chave da tabela é o nome do ponto de " "entrada e o valor é a referência do objeto." -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 msgid "" "The ``[project.gui-scripts]`` table corresponds to the ``gui_scripts`` group " "in the :ref:`entry points specification `. Its format is the " @@ -22052,7 +23725,7 @@ msgstr "" "ref:`especificação de pontos de entrada `. Seu formato é o " "mesmo que ``[project.scripts]``." -#: ../source/specifications/pyproject-toml.rst:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -22065,7 +23738,7 @@ msgstr "" "aninhadas, mas sim manter os grupos de pontos de entrada em apenas um nível " "de profundidade." -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -22077,7 +23750,7 @@ msgstr "" "gui_scripts]``, pois elas seriam ambíguas perante ``[project.scripts]`` e " "``[project.gui-scripts]``, respectivamente." -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" @@ -22085,7 +23758,7 @@ msgstr "" "Tipo TOML_: Vetor de strings da :pep:`508` (``dependencies``) e uma tabela " "com valores de vetores de strings da :pep:`508` (``optional-dependencies``)" -#: ../source/specifications/pyproject-toml.rst:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra ` e :ref:`Provides-Extra `" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "As dependências (opcionais) do projeto." -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -22111,7 +23784,7 @@ msgstr "" "string válida :pep:`508`. Cada string mapeia diretamente para um :ref:" "`Requires-Dist `." -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -22129,11 +23802,11 @@ msgstr "" "requires-dist>` para os metadados correspondentes de :ref:`Provides-Extra " "`." -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "Tipo TOML_: vetor de string" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" @@ -22141,7 +23814,7 @@ msgstr "" "Campo correspondente dos :ref:`metadados principais `: :ref:" "`Dynamic `" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -22154,7 +23827,7 @@ msgstr "" "não especificados e espera-se que permaneçam não especificados em comparação " "a serem fornecidos por meio de ferramentas posteriormente." -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." @@ -22163,7 +23836,7 @@ msgstr "" "estaticamente (o que significa que os metadados não listam a chave em " "``dynamic``)." -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." @@ -22171,7 +23844,7 @@ msgstr "" "Um backend de construção DEVE gerar um erro se os metadados especificarem " "``name`` em ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -22185,7 +23858,7 @@ msgstr "" "um erro, caso contrário , ou seja, não deve ser possível que uma chave " "obrigatória não seja listada de alguma forma na tabela ``[project]``)." -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Optional\", the metadata MAY list it in ``dynamic`` if the expectation is " @@ -22196,7 +23869,7 @@ msgstr "" "expectativa for um backend de construção fornecerá os dados para a chave " "mais tarde." -#: ../source/specifications/pyproject-toml.rst:411 +#: ../source/specifications/pyproject-toml.rst:475 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." @@ -22204,7 +23877,7 @@ msgstr "" "Os backends de construção DEVEM levantar um erro se os metadados " "especificarem uma chave estaticamente, além de serem listados em ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -22216,7 +23889,7 @@ msgstr "" "(ou seja, ``dynamic`` é a única maneira de permitir que uma ferramenta " "preencha metadados e o usuário deve optar pelo preenchimento)." -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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 " @@ -22227,11 +23900,11 @@ msgstr "" "capaz de determinar os dados para ele (omitir os dados, se determinado como " "o valor exato, é aceitável) ." -#: ../source/specifications/pyproject-toml.rst:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -22239,7 +23912,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -22247,19 +23920,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "Gravando projetos instalados" @@ -22405,7 +24084,20 @@ msgstr "" "omitidos a critério da ferramenta de instalação. Arquivos adicionais " "específicos do instalador podem estar presentes." -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +#, fuzzy +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"described in detail below:" +msgstr "" +"Este diretório ``.dist-info`` pode conter esses arquivos, descritos em " +"detalhes abaixo:" + +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -22417,7 +24109,7 @@ msgstr "" "`Wheel`. Esses arquivos podem ser copiados para o diretório ``.dist-info`` " "de um projeto instalado." -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -22430,11 +24122,11 @@ msgstr "" "`_ para seu significado " "original." -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "O arquivo METADATA" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 msgid "" "The ``METADATA`` file contains metadata as described in the :ref:`core-" "metadata` specification, version 1.1 or greater." @@ -22442,7 +24134,7 @@ msgstr "" "O arquivo ``METADATA`` contém metadados conforme descrito na especificação :" "ref:`core-metadata`, versão 1.1 ou superior." -#: ../source/specifications/recording-installed-packages.rst:88 +#: ../source/specifications/recording-installed-packages.rst:93 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 " @@ -22452,11 +24144,11 @@ msgstr "" "metadados principais necessários não estiverem disponíveis, os instaladores " "devem relatar um erro e falhar ao instalar o projeto." -#: ../source/specifications/recording-installed-packages.rst:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "O arquivo RECORD" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 msgid "" "The ``RECORD`` file holds the list of installed files. It is a CSV file " "containing one record (line) per installed file." @@ -22464,7 +24156,7 @@ msgstr "" "O arquivo ``RECORD`` contém a lista de arquivos instalados. É um arquivo CSV " "contendo um registro (linha) por arquivo instalado." -#: ../source/specifications/recording-installed-packages.rst:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" @@ -22472,19 +24164,19 @@ msgstr "" "O dialeto CSV deve ser legível com o ``reader`` padrão do módulo ``csv`` do " "Python:" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "delimitador de campo: ``,`` (vírgula)," -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "caractere de aspas: ``\"`` (aspas duplas)," -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "terminador de linha: ``\\r\\n`` ou ``\\n``." -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 msgid "" "Each record is composed of three elements: the file's **path**, the **hash** " "of the contents, and its **size**." @@ -22492,7 +24184,7 @@ msgstr "" "Cada registro é composto de três elementos: o **caminho** do arquivo, o " "**hash** do conteúdo e seu **tamanho**." -#: ../source/specifications/recording-installed-packages.rst:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -22504,7 +24196,7 @@ msgstr "" "Windows, os diretórios podem ser separados por barras ou barras invertidas " "(``/`` ou ``\\``)." -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 #, fuzzy msgid "" "The *hash* is either an empty string or the name of a hash algorithm from :" @@ -22518,7 +24210,7 @@ msgstr "" "conteúdo do arquivo, codificado com a codificação urlsafe-base64-nopad " "(``base64.urlsafe_b64encode(digest)`` com ``=`` ao final removido)." -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 msgid "" "The *size* is either the empty string, or file's size in bytes, as a base 10 " "integer." @@ -22526,7 +24218,7 @@ msgstr "" "O *tamanho* é a string vazia ou o tamanho do arquivo em bytes, como um " "inteiro de base 10." -#: ../source/specifications/recording-installed-packages.rst:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -22540,7 +24232,7 @@ msgstr "" "não é recomendável deixar as informações de fora, pois impede a verificação " "da integridade do projeto instalado." -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -22554,7 +24246,7 @@ msgstr "" "conteúdo do diretório ``.dist-info`` (incluindo o próprio arquivo " "``RECORD``) deve ser listado. Os diretórios não devem ser listados." -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 msgid "" "To completely uninstall a package, a tool needs to remove all files listed " "in ``RECORD``, all ``.pyc`` files (of all optimization levels) corresponding " @@ -22565,11 +24257,11 @@ msgstr "" "todos os níveis de otimização) correspondentes aos arquivos ``.py`` " "removidos e quaisquer diretórios esvaziados pela desinstalação." -#: ../source/specifications/recording-installed-packages.rst:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "Aqui está um trecho de exemplo de um possível arquivo ``RECORD``::" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 #, fuzzy msgid "" "If the ``RECORD`` file is missing, tools that rely on ``.dist-info`` must " @@ -22582,7 +24274,7 @@ msgstr "" "aplica a ferramentas que dependem de outras fontes de informação, como " "gerenciadores de pacotes do sistema em distros Linux.)" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -22592,11 +24284,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "O arquivo INSTALLER" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -22608,17 +24300,17 @@ msgstr "" "partir da linha de comando, ``INSTALLER`` deve conter o nome do comando. " "Caso contrário, deve conter uma string ASCII imprimível." -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" "O arquivo pode ser encerrado com zero ou mais caracteres de espaço em branco " "ASCII." -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "Aqui estão exemplos de dois possíveis arquivos ``INSTALLER``::" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -22630,11 +24322,11 @@ msgstr "" "``RECORD``, pode sugerir que a ferramenta nomeada em ``INSTALLER`` pode ser " "capaz de fazer a desinstalação." -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "O arquivo entry_points.txt" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -22642,16 +24334,16 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 #, fuzzy msgid "Its detailed specification is at :ref:`entry-points`." msgstr "Sua especificação detalhada está em :ref:`direct-url`." -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "O arquivo direct_url.json" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 msgid "" "This file MUST be created by installers when installing a distribution from " "a requirement specifying a direct URL reference (including a VCS URL)." @@ -22660,15 +24352,29 @@ msgstr "" "partir de um requisito que especifica uma referência de URL direta " "(incluindo uma URL de VCS)." -#: ../source/specifications/recording-installed-packages.rst:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "Sua especificação detalhada está em :ref:`direct-url`." -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "Prevenindo intencionalmente modificações nos pacotes instalados" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -22677,11 +24383,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -22689,14 +24395,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -22705,28 +24411,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -22755,15 +24461,23 @@ msgstr "API de repositório simples" #: ../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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -22771,23 +24485,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -22803,44 +24517,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -22848,7 +24562,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -22857,7 +24571,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -22865,22 +24613,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -22889,18 +24637,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "Nomes não normalizados válidos" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -22910,11 +24662,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -22924,7 +24676,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -22932,7 +24684,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -22940,12 +24692,12 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy msgid "Installers" msgstr "Instalador" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -22955,7 +24707,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -22965,14 +24717,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -22982,7 +24734,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -22990,7 +24742,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -22999,71 +24751,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -23072,7 +24824,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -23082,49 +24834,72 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 #, fuzzy msgid "Clients" msgstr "Conteúdo" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -23133,7 +24908,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -23145,7 +24920,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -23155,19 +24930,19 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 #, fuzzy msgid "Backwards Compatibility" msgstr "Compatibilidade da ABI" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -23175,11 +24950,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -23187,7 +24962,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -23197,7 +24972,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -23207,7 +24982,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -23215,28 +24990,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -23245,38 +25020,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "Normalização" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -23284,19 +25059,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy msgid "Project List" msgstr "Projeto" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 #, fuzzy msgid "As an example:" msgstr "Um exemplo completo" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -23351,7 +25132,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 #, fuzzy msgid "" "``hashes``: A dictionary mapping a hash name to a hex encoded digest of the " @@ -23413,14 +25223,14 @@ msgstr "" "Vários hashes podem ser incluídos e cabe ao consumidor decidir o que fazer " "com vários hashes (pode validar todos eles ou um subconjunto deles, ou nada)." -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 #, fuzzy msgid "" "By default, any hash algorithm available via :py:mod:`hashlib` (specifically " @@ -23437,7 +25247,7 @@ msgstr "" "DEVE sempre ser incluído. No momento da escrita, ``sha256`` especificamente " "é recomendado." -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -23445,44 +25255,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -23491,7 +25319,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -23502,7 +25330,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -23510,7 +25368,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -23574,12 +25436,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "Versão" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -23588,65 +25450,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -23654,7 +25516,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -23665,7 +25527,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -23674,33 +25536,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -23710,7 +25572,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -23720,7 +25582,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -23728,7 +25590,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -23739,22 +25601,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -23763,25 +25625,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -23789,13 +25651,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -23805,19 +25667,19 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 #, fuzzy msgid "Endpoint Configuration" msgstr "Configurações comuns" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -23825,7 +25687,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -23835,7 +25697,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -23843,11 +25705,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -23858,7 +25720,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -23866,7 +25728,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -23875,7 +25737,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -23883,7 +25745,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -23893,20 +25755,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -23914,7 +25776,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -23923,18 +25785,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -23942,13 +25804,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -23957,23 +25819,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -23982,217 +25844,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -#, fuzzy -msgid "Additional file information" -msgstr "Notas adicionais" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -24236,11 +25949,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "Distribuições fonte também são conhecidas pela abreviação *sdists*." -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "Árvores fonte" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -24256,11 +25969,11 @@ msgstr "" "especificam o que é necessário para atender à definição do que :file:" "`pyproject.toml` deve conter para que algo seja considerado uma árvore fonte." -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "Nome de arquivo da distribuição fonte" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -24274,7 +25987,7 @@ msgstr "" "ref:`binary-distribution-format`) e ``{version}`` é a forma canonizada da " "versão do projeto (veja :ref:`version-specifiers`)." -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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." @@ -24282,7 +25995,7 @@ msgstr "" "O nome e os componentes da versão do nome do arquivo DEVEM corresponder aos " "valores armazenados nos metadados contidos no arquivo." -#: ../source/specifications/source-distribution-format.rst:45 +#: ../source/specifications/source-distribution-format.rst:49 #, fuzzy msgid "" "Code that produces a source distribution file MUST give the file a name that " @@ -24293,7 +26006,7 @@ msgstr "" "um nome que corresponda a essa especificação. Isso inclui o gancho " "``build_sdist`` de um backend de construção." -#: ../source/specifications/source-distribution-format.rst:49 +#: ../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 " @@ -24305,19 +26018,19 @@ msgstr "" "*um* hífen no nome do arquivo. O código que faz isso pode usar o nome e " "versão da distribuição a partir do nome do arquivo sem verificação adicional." -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "Formato de arquivo de distribuição fonte" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../source/specifications/source-distribution-format.rst:61 #, fuzzy 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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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 "" @@ -24330,7 +26043,16 @@ msgstr "" "descrito na especificação :ref:`core-metadata`. Os metadados DEVEM estar em " "conformidade com pelo menos a versão 2.2 da especificação de metadados." -#: ../source/specifications/source-distribution-format.rst:65 +#: ../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." @@ -24339,7 +26061,7 @@ msgstr "" "construção podem armazenar qualquer informação necessária no sdist para " "construir o projeto." -#: ../source/specifications/source-distribution-format.rst:68 +#: ../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 " @@ -24351,22 +26073,22 @@ msgstr "" "distribuição fonte devem ser legíveis usando o módulo tarfile de biblioteca " "padrão com o sinalizador aberto 'r:gz'." -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 #, fuzzy msgid "Source distribution archive features" msgstr "Formato de arquivo de distribuição fonte" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "Desempacotando com o filtro de dados" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -24374,7 +26096,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -24384,11 +26106,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "Desempacotando sem o filtro de dados" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -24396,114 +26118,126 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "Arquivos de dispositivo (incluindo pipes)." -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 #, fuzzy msgid "When extracting *sdist* archives:" msgstr "Gerando arquivos de distribuição" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "Dicas adicionais" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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 +#, fuzzy +#| msgid "" +#| "This document describes the dependency specifiers format as originally " +#| "specified in :pep:`508`." +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" +"Este documento descreve o formato dos especificadores de dependência " +"conforme originalmente especificado na :pep:`508`." + #: ../source/specifications/version-specifiers.rst:7 #: ../source/specifications/version-specifiers.rst:782 msgid "Version specifiers" @@ -27471,7 +29205,7 @@ msgstr "" "os comandos tenham acesso aos seus pacotes instalados com ``pipenv shell``." #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "Próximos passos" @@ -27824,7 +29558,7 @@ msgstr "" "pacote exclusivo que não entre em conflito com os pacotes carregados por " "outras pessoas que seguem este tutorial." -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -27838,7 +29572,7 @@ msgstr "" "usuário** para este tutorial, pois isso garante que você não tentará enviar " "um pacote com o mesmo nome de um que já existe." -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 #, fuzzy msgid "" "``version`` is the package version. (Some build backends allow it to be " @@ -27849,7 +29583,7 @@ msgstr "" "versões. Alguns backends de construção permitem que ela seja especificada de " "outra maneira, como a partir de um arquivo ou de uma tag git." -#: ../source/tutorials/packaging-projects.rst:231 +#: ../source/tutorials/packaging-projects.rst:257 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 " @@ -27859,11 +29593,11 @@ msgstr "" "nome e um e-mail para cada autor. Você também pode listar ``maintainers`` no " "mesmo formato." -#: ../source/tutorials/packaging-projects.rst:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "``description`` é um resumo curto do pacote contendo apenas uma frase." -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 #, fuzzy msgid "" "``readme`` is a path to a file containing a detailed description of the " @@ -27878,7 +29612,7 @@ msgstr "" "também um formulário de tabela mais avançado descrito na :ref:`especificação " "de metadados do projeto `." -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 #, fuzzy msgid "" "``requires-python`` gives the versions of Python supported by your project. " @@ -27889,15 +29623,23 @@ msgstr "" "projeto. Instaladores como :ref:`pip` olharão para as versões anteriores dos " "pacotes até encontrar um que tenha uma versão correspondente do Python." -#: ../source/tutorials/packaging-projects.rst:243 +#: ../source/tutorials/packaging-projects.rst:269 +#, fuzzy +#| 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, is licensed under the MIT license, and is OS-independent. You " +#| "should always include at least which version(s) of Python your package " +#| "works on, which license your package is available under, and which " +#| "operating systems your package will work on. For a complete list of " +#| "classifiers, see https://pypi.org/classifiers/." 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"3 and is OS-independent. You should always include at least which version(s) " +"of Python your package works on and which operating systems your package " +"will work on. For a complete list of classifiers, see https://pypi.org/" +"classifiers/." msgstr "" "``classifiers`` fornece o índice e :ref:`pip` alguns metadados adicionais " "sobre seu pacote. Nesse caso, o pacote é compatível apenas com Python 3, " @@ -27907,7 +29649,26 @@ msgstr "" "sistemas operacionais seu pacote funcionará. Para obter uma lista completa " "de classificadores, consulte https://pypi.org/classifiers/." -#: ../source/tutorials/packaging-projects.rst:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +#, fuzzy +#| msgid "" +#| "Now run this command from the same directory where :file:`pyproject.toml` " +#| "is located:" +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" +"Agora, execute este comando a partir do mesmo diretório no qual :file:" +"`pyproject.toml` está localizado:" + +#: ../source/tutorials/packaging-projects.rst:281 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." @@ -27916,7 +29677,7 @@ msgstr "" "PyPI. Geralmente, isso pode ser para o código-fonte, a documentação, os " "rastreadores de problemas, etc." -#: ../source/tutorials/packaging-projects.rst:253 +#: ../source/tutorials/packaging-projects.rst:284 #, fuzzy msgid "" "See the :ref:`pyproject.toml guide ` for details on " @@ -27930,11 +29691,11 @@ msgstr "" "a descoberta e as ``dependencies`` que são necessárias para instalar seu " "pacote." -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "Criando README.md" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." @@ -27942,11 +29703,11 @@ msgstr "" "Abra :file:`README.md` e insira o seguinte conteúdo. Você pode personalizar " "isso se desejar." -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "Criando um LICENSE" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -27961,20 +29722,20 @@ msgstr "" "licença, abra :file:`LICENSE` e digite o texto da licença. Por exemplo, se " "você escolheu a licença MIT:" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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 "" -"A maioria dos backends de construção inclui automaticamente arquivos de " -"licença em pacotes. Consulte a documentação do seu backend para obter mais " -"detalhes." -#: ../source/tutorials/packaging-projects.rst:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "Incluindo outros arquivos" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 msgid "" "The files listed above will be included automatically in your :term:`source " "distribution `. If you want to include " @@ -27985,11 +29746,11 @@ msgstr "" "incluir arquivos adicionais, veja a documentação para seu backend de " "construção." -#: ../source/tutorials/packaging-projects.rst:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "Gerando arquivos de distribuição" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 msgid "" "The next step is to generate :term:`distribution packages ` for the package. These are archives that are uploaded to the " @@ -27999,13 +29760,13 @@ msgstr "" "Distribuição>` para o pacote. Estes são arquivos que são enviados para o " "Índice de Pacotes do Python e podem ser instalados pelo :ref:`pip`." -#: ../source/tutorials/packaging-projects.rst:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" "Certifique-se de que você tenha a versão mais recente da :ref:`construção " "` do PyPA instalada:" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." @@ -28013,7 +29774,7 @@ msgstr "" "Se você tiver problemas ao instalá-los, veja o tutorial :doc:`installing-" "packages`." -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" @@ -28021,7 +29782,7 @@ msgstr "" "Agora, execute este comando a partir do mesmo diretório no qual :file:" "`pyproject.toml` está localizado:" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 msgid "" "This command should output a lot of text and once completed should generate " "two files in the :file:`dist` directory:" @@ -28029,7 +29790,7 @@ msgstr "" "Este comando deve produzir muito texto e, uma vez concluído, deve gerar dois " "arquivos no diretório :file:`dist`:" -#: ../source/tutorials/packaging-projects.rst:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` e instale seu pacote a partir do Test PyPI:" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "Certifique-se de especificar seu nome de usuário no nome do pacote!" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" "pip deve instalar o pacote de Test PyPI e a saída deve ser semelhante a esta:" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -28166,7 +29927,7 @@ msgstr "" "pacote de exemplo não tenha nenhuma dependência, é uma boa prática evitar " "instalar dependências ao usar o Test PyPI." -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:" @@ -28174,17 +29935,17 @@ msgstr "" "Você pode testar se ele foi instalado corretamente importando o pacote. " "Certifique-se de que ainda está em seu ambiente virtual e execute o Python:" -#: ../source/tutorials/packaging-projects.rst:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "e importe o pacote:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "**Parabéns, você empacotou e distribuiu um projeto Python!** ✨ 🍰 ✨" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -28196,7 +29957,7 @@ msgstr "" "ocasionalmente exclui pacotes e contas. É melhor usar Test PyPI para testes " "e experimentos como este tutorial." -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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 " @@ -28206,7 +29967,7 @@ msgstr "" "do Python, você pode fazer quase o mesmo que fez neste tutorial, mas com " "estas diferenças importantes:" -#: ../source/tutorials/packaging-projects.rst:519 +#: ../source/tutorials/packaging-projects.rst:553 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 " @@ -28216,7 +29977,7 @@ msgstr "" "acrescentar seu nome de usuário como fez no tutorial, mas você não pode usar " "um nome existente." -#: ../source/tutorials/packaging-projects.rst:521 +#: ../source/tutorials/packaging-projects.rst:555 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 " @@ -28226,7 +29987,7 @@ msgstr "" "servidores separados e os detalhes de login do servidor de teste não são " "compartilhados com o servidor principal." -#: ../source/tutorials/packaging-projects.rst:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -28238,7 +29999,7 @@ msgstr "" "pacote em produção, você não precisa especificar ``--repository``; o pacote " "será enviado para https://pypi.org/ por padrão." -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." @@ -28246,7 +30007,7 @@ msgstr "" "Instale seu pacote a partir do PyPI real usando ``python3 -m pip install " "[seu-pacote]``." -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 msgid "" "At this point if you want to read more on packaging Python libraries here " "are some things you can do:" @@ -28254,21 +30015,21 @@ msgstr "" "Neste ponto, se você quiser ler mais sobre o empacotamento de bibliotecas " "Python, aqui estão algumas coisas que você pode fazer:" -#: ../source/tutorials/packaging-projects.rst:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 msgid "" "Consider packaging tools that provide a single command-line interface for " "project management and packaging, such as :ref:`hatch`, :ref:`flit`, :ref:" @@ -28278,11 +30039,11 @@ msgstr "" "de linha de comando para gerenciamento e empacotamento de projetos, como :" "ref:`hatch`, :ref:`flit`, :ref:`pdm` e :ref:`poetry`." -#: ../source/tutorials/packaging-projects.rst:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "Notas" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages `__ Python installations. Anaconda Python is a distribution " @@ -28496,9 +30288,6 @@ msgstr "" #~ "(Git, Mercurial, etc), em vez de no código, e extraia-o automaticamente " #~ "de lá usando `setuptools_scm `_." -#~ msgid "``install``" -#~ msgstr "``install``" - #~ msgid "" #~ "There is a significant difference between the ``[build-system]`` and " #~ "``[project]`` tables. The former should always be present, regardless of " @@ -29801,9 +31590,6 @@ msgstr "" #~ "usuários possam encontrar melhor os projetos que correspondem às suas " #~ "necessidades no PyPI." -#~ msgid "Declaring build system dependencies" -#~ msgstr "Declarando dependências do sistema de construção" - #, fuzzy #~ msgid "" #~ "The ``pyproject.toml`` file is written in `TOML `_. " @@ -31277,9 +33063,6 @@ msgstr "" #~ msgid "license" #~ msgstr "license" -#~ msgid "classifiers" -#~ msgstr "classifiers" - #~ msgid "keywords" #~ msgstr "keywords" diff --git a/locales/ro/LC_MESSAGES/messages.po b/locales/ro/LC_MESSAGES/messages.po index 01a7881d7..417236735 100644 --- a/locales/ro/LC_MESSAGES/messages.po +++ b/locales/ro/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-01-07 04:23+0000\n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" "PO-Revision-Date: 2021-08-20 01:32+0000\n" "Last-Translator: GUILHERME FERNANDES NETO \n" "Language-Team: Romanian `, 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 " @@ -1888,7 +2586,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2682,49 +3380,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Pe Indexul Proiectului" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2733,7 +3473,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2741,7 +3481,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2749,32 +3489,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2784,21 +3524,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Modul Pur" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2807,31 +3547,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2841,48 +3581,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2890,11 +3630,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2903,11 +3643,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "Specificator Cerință" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2915,49 +3655,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2966,21 +3726,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2989,11 +3749,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3001,15 +3761,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3017,23 +3777,23 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy #| msgid "Per Project Index" msgid "Wheel Project" msgstr "Pe Indexul Proiectului" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3185,7 +3945,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3542,7 +4302,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4230,7 +4990,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5912,6 +6672,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8564,13 +9649,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8578,11 +9664,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8592,29 +9678,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8622,37 +9708,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8661,98 +9747,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8760,93 +9846,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8855,31 +9983,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8888,26 +10077,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8915,28 +10104,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8944,26 +10133,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11879,23 +13068,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11903,7 +13099,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11911,64 +13107,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11976,28 +13172,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12006,22 +13202,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12029,29 +13225,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12061,7 +13270,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12069,7 +13278,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12077,17 +13286,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12095,39 +13304,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12137,11 +13346,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12150,38 +13359,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12189,7 +13398,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12197,18 +13406,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12217,7 +13426,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12228,7 +13437,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12246,7 +13455,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12255,37 +13464,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12293,11 +13502,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12407,8 +13629,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12515,8 +13737,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13136,24 +14358,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13161,28 +14392,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13193,33 +14424,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13228,89 +14459,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13655,11 +14886,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13671,11 +14902,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13683,7 +14914,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13691,17 +14922,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13712,11 +14942,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13725,13 +14955,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13740,7 +14970,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13753,7 +14983,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13763,7 +14993,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13771,20 +15001,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13794,194 +15024,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13989,24 +15220,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14033,7 +15264,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14186,17 +15417,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14205,7 +15436,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14213,7 +15444,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14221,34 +15452,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14257,13 +15488,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14271,7 +15502,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14279,24 +15510,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14304,22 +15535,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14330,65 +15561,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14396,106 +15627,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15717,7 +16948,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15782,7 +17013,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16070,12 +17301,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16129,90 +17360,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16220,7 +17652,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16231,14 +17663,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16247,69 +17679,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16320,11 +17752,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16334,7 +17766,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16342,11 +17774,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16354,13 +17786,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16371,23 +17803,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16395,11 +17827,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16409,33 +17841,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16443,13 +17875,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16458,34 +17890,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16726,7 +18166,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16738,81 +18178,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16826,7 +18267,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16835,7 +18276,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16847,41 +18288,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16889,20 +18434,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16911,92 +18456,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17004,14 +18552,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17019,7 +18567,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17027,24 +18575,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17052,7 +18600,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17063,17 +18611,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17081,19 +18629,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17102,20 +18650,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17123,18 +18671,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17142,7 +18690,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17150,19 +18698,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17260,7 +18814,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17268,7 +18832,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17276,58 +18840,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17335,7 +18899,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17344,13 +18908,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17359,7 +18923,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17368,18 +18932,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17387,7 +18951,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17397,11 +18961,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17409,15 +18973,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17425,11 +18989,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17437,29 +19001,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17468,11 +19046,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17480,14 +19058,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17496,28 +19074,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17545,15 +19123,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17561,23 +19147,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17593,44 +19179,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17638,7 +19224,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17647,7 +19233,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17655,22 +19275,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17679,17 +19299,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17699,11 +19323,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17713,7 +19337,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17721,7 +19345,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17729,11 +19353,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17743,7 +19367,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17753,14 +19377,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17770,7 +19394,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17778,7 +19402,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17787,71 +19411,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17860,7 +19484,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17870,48 +19494,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17920,7 +19567,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17932,7 +19579,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17942,18 +19589,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17961,11 +19608,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17973,7 +19620,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17983,7 +19630,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17993,7 +19640,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18001,28 +19648,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18031,37 +19678,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18069,19 +19716,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18134,7 +19787,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18191,14 +19873,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18208,7 +19890,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18216,44 +19898,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18262,7 +19962,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18273,7 +19973,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18281,7 +20011,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18344,11 +20078,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18357,65 +20091,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18423,7 +20157,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18434,7 +20168,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18443,33 +20177,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18479,7 +20213,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18489,7 +20223,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18497,7 +20231,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18508,22 +20242,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18532,25 +20266,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18558,13 +20292,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18574,18 +20308,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18593,7 +20327,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18603,7 +20337,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18611,11 +20345,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18626,7 +20360,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18634,7 +20368,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18643,7 +20377,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18651,7 +20385,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18661,20 +20395,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18682,7 +20416,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18691,18 +20425,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18710,13 +20444,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18725,23 +20459,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18750,216 +20484,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18992,11 +20578,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19006,11 +20592,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19019,20 +20605,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19040,29 +20626,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19070,21 +20665,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19092,7 +20687,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19102,11 +20697,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19114,113 +20709,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21868,7 +23469,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22125,7 +23726,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22134,24 +23735,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22160,31 +23761,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22192,21 +23805,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22215,57 +23828,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22363,23 +23979,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22387,28 +24003,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22416,44 +24032,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2022. # Vik , 2022. # Alex , 2023. -# gfbdrgng , 2023, 2024. +# gfbdrgng , 2023, 2024, 2025. # Andrey Rybakov , 2023. # Nikita , 2024. +# gfbdrgn , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-07-15 14:09+0000\n" -"Last-Translator: gfbdrgng \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-02-26 06:29+0000\n" +"Last-Translator: gfbdrgn \n" "Language-Team: Russian \n" "Language: ru\n" @@ -24,7 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.10.2-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -613,6 +614,7 @@ msgid "Deploying Python applications" msgstr "Развёртывание приложений на Python'е" #: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 #: ../source/discussions/single-source-version.rst:0 #: ../source/guides/distributing-packages-using-setuptools.rst:0 #: ../source/guides/index-mirrors-and-caches.rst:0 @@ -633,6 +635,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 @@ -740,6 +743,7 @@ msgstr "" "публичной лицензией Mozilla 2.0." #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -994,6 +998,709 @@ msgstr "" "`, это происходит крайне редко и настоятельно не " "рекомендуется." +#: ../source/discussions/downstream-packaging.rst:5 +#, fuzzy +#| msgid "Operating system packages" +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 +#, fuzzy +#| msgid "Python source distributions" +msgid "Provide complete source distributions" +msgstr "Дистрибутивы с исходным кодом Python" + +#: ../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 +#, fuzzy +#| msgid "Declaring build system dependencies" +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 +#, fuzzy +#| msgid "Final releases" +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 " @@ -2162,34 +2869,28 @@ msgid "Where to read more about this?" msgstr "Где почитать об этом?" #: ../source/discussions/setup-py-deprecated.rst:213 -#, fuzzy -#| msgid "https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html" msgid "" "`Why you shouldn't invoke setup.py directly `__ by Paul Ganssle" -msgstr "https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html" +msgstr "" +"`Почему не следует вызывать setup.py напрямую `__ by Paul Ganssle" #: ../source/discussions/setup-py-deprecated.rst:215 msgid ":doc:`setuptools:deprecated/commands`" msgstr ":doc:`setuptools:deprecated/commands`" #: ../source/discussions/single-source-version.rst:5 -#, fuzzy -#| msgid "Single-sourcing the package version" msgid "Single-sourcing the Project Version" -msgstr "Однопользовательская версия пакета" +msgstr "Единая версия проекта" #: ../source/discussions/single-source-version.rst:7 -#, fuzzy -#| msgid "Incomplete" msgid "Complete" -msgstr "Незавершено" +msgstr "Выполнено" #: ../source/discussions/single-source-version.rst:8 -#, fuzzy -#| msgid "2021-8-24" msgid "2024-10-07" -msgstr "2021-8-24" +msgstr "2024-10-07" #: ../source/discussions/single-source-version.rst:10 msgid "" @@ -2199,6 +2900,11 @@ msgid "" "same version specifier as :func:`importlib.metadata.version` reports for the " "distribution package (as described in :ref:`runtime-version-access`)." msgstr "" +"Многие Python :term:`distribution packages ` публикуют " +"один Python :term:`import package `, где желательно, чтобы " +"атрибут runtime ``__version__`` на импортном пакете сообщал тот же " +"спецификатор версии, что и :func:`importlib.metadata.version` сообщает для " +"дистрибутивного пакета (как описано в :ref:`runtime-version-access`)." #: ../source/discussions/single-source-version.rst:16 msgid "" @@ -2206,40 +2912,46 @@ msgid "" "a version control system *tag* (such as ``v1.2.3``) rather than being " "manually updated in the source code." msgstr "" +"Также часто бывает желательно, чтобы эта информация о версии была получена " +"из *метки* системы контроля версий (например, ``v1.2.3``), а не обновлялась " +"вручную в исходном коде." #: ../source/discussions/single-source-version.rst:20 msgid "" "Some projects may choose to simply live with the data entry duplication, and " "rely on automated testing to ensure the different values do not diverge." msgstr "" +"Некоторые проекты могут просто смириться с дублированием ввода данных и " +"полагаться на автоматизированное тестирование, чтобы убедиться, что " +"различные значения не расходятся." #: ../source/discussions/single-source-version.rst:23 -#, fuzzy -#| msgid "" -#| "There are many techniques to maintain a single source of truth for the " -#| "version number of your project:" 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 "" +msgstr "В общем, возможны следующие варианты:" #: ../source/discussions/single-source-version.rst:28 msgid "" "If the code is in a version control system (VCS), such as Git, then the " "version can be extracted from the VCS." msgstr "" +"Если код находится в системе контроля версий (VCS), например Git, то версию " +"можно извлечь из VCS." #: ../source/discussions/single-source-version.rst:30 msgid "" "The version can be hard-coded into the :file:`pyproject.toml` file -- and " "the build system can copy it into other locations it may be required." msgstr "" +"Версия может быть жестко задана в файле :file:`pyproject.toml`, а система " +"сборки может скопировать ее в другие места, которые могут потребоваться." #: ../source/discussions/single-source-version.rst:33 msgid "" @@ -2249,10 +2961,17 @@ msgid "" "attribute in a particular module, such as :file:`__init__.py`. The build " "system can then extract it from the runtime location at build time." msgstr "" +"Строка версии может быть жестко закодирована в исходном коде - либо в " +"специальном файле, таком как :file:`_version.txt` (который затем должен " +"поставляться как часть пакета распространения исходного кода проекта), либо " +"как атрибут в определенном модуле, таком как :file:`__init__.py`. Тогда " +"система сборки может извлечь его из места выполнения во время сборки." #: ../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 "" @@ -2262,44 +2981,50 @@ msgid "" "``importlib.metadata.version(\"dist-name\")`` report the same value (note: " "for many projects, ``import_name`` and ``dist-name`` will be the same name)." msgstr "" +"Если предполагается, что дистрибутив и связанный с ним пакет импорта имеют " +"одну и ту же версию, рекомендуется включить в проект автоматизированный " +"тестовый пример, который гарантирует, что ``import_name.__version__`` и " +"``importlib.metadata.version(\"dist-name\")`` сообщают одно и то же значение " +"(примечание: для многих проектов ``import_name`` и ``dist-name`` будут иметь " +"одно и то же имя)." #: ../source/discussions/single-source-version.rst:50 msgid "Build System Version Handling" -msgstr "" +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 -#, fuzzy -#| msgid "`Flatpak `_" msgid "`Flit `_" -msgstr "`Flatpak `_" +msgstr "`Flit `_" #: ../source/discussions/single-source-version.rst:56 -#, fuzzy -#| msgid "`Apache `_" msgid "`Hatchling `_" -msgstr "`Apache `_" +msgstr "`Hatchling `_" #: ../source/discussions/single-source-version.rst:58 msgid "" "`PDM `_" msgstr "" +"`PDM `_" #: ../source/discussions/single-source-version.rst:60 msgid "" "`Setuptools `_" msgstr "" +"`Setuptools `_" #: ../source/discussions/single-source-version.rst:62 -#, fuzzy msgid "`setuptools_scm `_" -msgstr "`Flexx `_" +msgstr "`setuptools_scm `_" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 msgid "src layout vs flat layout" @@ -2427,6 +3152,7 @@ msgstr "" #: ../source/discussions/src-layout-vs-flat-layout.rst:86 msgid "Running a command-line interface from source with src-layout" msgstr "" +"Запуск интерфейса командной строки из исходного текста с помощью src-layout" #: ../source/discussions/src-layout-vs-flat-layout.rst:88 msgid "" @@ -2438,9 +3164,16 @@ msgid "" "the package folder to Python's :py:data:`sys.path` when called via its :" "file:`__main__.py` file:" msgstr "" +"В связи с первой из упомянутых особенностей компоновки src, интерфейс " +"командной строки не может быть запущен непосредственно из :term:`source tree " +"`, а требует установки пакета в :doc:`Development Mode " +"` для целей тестирования. Поскольку " +"это может быть непрактично в некоторых ситуациях, обходным решением может " +"быть добавление папки пакета к :py:data:`sys.path` при вызове через файл :" +"file:`__main__.py`:" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "Версионирование" @@ -2834,7 +3567,7 @@ msgstr "" #: ../source/discussions/versioning.rst:177 msgid "Accessing version information at runtime" -msgstr "" +msgstr "Доступ к информации о версии во время выполнения" #: ../source/discussions/versioning.rst:179 msgid "" @@ -2843,12 +3576,19 @@ msgid "" "obtained at runtime using the standard library's :func:`importlib.metadata." "version` function::" msgstr "" +"Информация о версии всех :term:`distribution packages `, локально доступных в текущем окружении, может быть получена во " +"время выполнения с помощью функции :func:`importlib.metadata.version` " +"стандартной библиотеки::" #: ../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 "" +"Многие проекты также выбирают версионирование своего верхнего уровня :term:" +"`import packages `, предоставляя атрибут ``__version__`` на " +"уровне пакета::" #: ../source/discussions/versioning.rst:194 msgid "" @@ -2856,6 +3596,9 @@ msgid "" "to ensure that version query invocations (such as ``pip -V``) run as quickly " "as possible." msgstr "" +"Эта техника может быть особенно ценной для приложений CLI, которые хотят " +"обеспечить максимально быстрое выполнение запросов версий (например, ``pip -" +"V``)." #: ../source/discussions/versioning.rst:198 msgid "" @@ -2863,6 +3606,9 @@ msgid "" "import package versions are consistent with each other can review the :ref:" "`single-source-version` discussion for potential approaches to doing so." msgstr "" +"Издатели пакетов, желающие обеспечить соответствие версий дистрибутивного и " +"импортного пакетов, могут ознакомиться с обсуждением :ref:`single-source-" +"version` для потенциальных подходов к решению этой задачи." #: ../source/discussions/versioning.rst:202 msgid "" @@ -2874,6 +3620,13 @@ msgid "" "querying code should be designed to handle the case where the attribute is " "missing [#fallback-to-dist-version]_." msgstr "" +"Поскольку импортные пакеты и модули не *обязаны* публиковать информацию о " +"версии во время выполнения таким образом (см. отозванное предложение в :pep:" +"`PEP 396 <396>`), атрибут ``__version__`` должен запрашиваться только в " +"интерфейсах, которые, как известно, его предоставляют (например, проект " +"запрашивает свою собственную версию или версию одной из своих прямых " +"зависимостей), или же код запроса должен быть разработан для обработки " +"случая, когда атрибут отсутствует [#fallback-to-dist-version]_." #: ../source/discussions/versioning.rst:210 msgid "" @@ -2883,6 +3636,12 @@ msgid "" "For example, the standard library's :mod:`ssl` module offers multiple ways " "to access the underlying OpenSSL library version::" msgstr "" +"Некоторым проектам может потребоваться опубликовать информацию о версии " +"внешних API, которая не является версией самого модуля. Такие проекты должны " +"определить свои собственные, специфичные для проекта способы получения " +"соответствующей информации во время выполнения. Например, модуль :mod:`ssl` " +"стандартной библиотеки предлагает несколько способов доступа к версии " +"библиотеки OpenSSL::" #: ../source/discussions/versioning.rst:225 msgid "" @@ -2916,6 +3675,15 @@ msgid "" "and modules added via means other than Python package installation would " "fail to have version information reported in that case." msgstr "" +"Полный список, отображающий имена верхнего уровня, доступные для импорта, на " +"дистрибутивы, которые предоставляют эти импортируемые пакеты и модули, можно " +"получить с помощью функции стандартной библиотеки :func:`importlib.metadata." +"packages_distributions`. Это означает, что даже код, пытающийся определить " +"версию для сообщения для всех импортируемых имен верхнего уровня, имеет " +"возможность вернуться к сообщению информации о версии дистрибутива, если " +"атрибут ``__version__`` не определен. Только стандартные библиотечные модули " +"и модули, добавленные другими способами, кроме установки пакета Python, в " +"этом случае не будут сообщать информацию о версии." #: ../source/flow.rst:3 msgid "The Packaging Flow" @@ -3518,10 +4286,63 @@ 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 "" +"Классификатор PyPI Trove (как :ref:`described ` в " +"спецификации :term:`Core Metadata`), который начинается с ``Лицензии ::``." + +#: ../source/glossary.rst:157 +msgid "License Expression" +msgstr "Лицензионная экспрессия" + +#: ../source/glossary.rst:158 +msgid "SPDX Expression" +msgstr "SPDX Экспрессия" + +#: ../source/glossary.rst:161 +msgid "" +"A string with valid SPDX license expression syntax, including one or more " +"SPDX :term:`License Identifier`\\(s), which describes a :term:`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 "" +"Строка с допустимым синтаксисом выражения лицензий SPDX, включающая один или " +"несколько идентификаторов SPDX :term:`License Identifier`\\(s), которые " +"описывают лицензии :term:`Project` и их взаимосвязь. Примеры: ``GPL-3.0-or-" +"later``, ``MIT AND (Apache-2.0 OR BSD-2-Clause)``" + +#: ../source/glossary.rst:169 +msgid "License Identifier" +msgstr "Лицензионный идентификатор" + +#: ../source/glossary.rst:170 +msgid "SPDX Identifier" +msgstr "Идентификатор SPDX" + +#: ../source/glossary.rst:173 +msgid "" +"A valid SPDX short-form license identifier, originally specified in :pep:" +"`639`. This includes all valid SPDX identifiers and the custom ``LicenseRef-" +"[idstring]`` strings conforming to the SPDX specification. Examples: " +"``MIT``, ``GPL-3.0-only``, ``LicenseRef-My-Custom-License``" +msgstr "" +"Действительный идентификатор короткой формы лицензии SPDX, первоначально " +"указанный в :pep:`639`. Сюда входят все действительные идентификаторы SPDX и " +"пользовательские строки ``LicenseRef-[idstring]``, соответствующие " +"спецификации SPDX. Примеры: ``MIT``, ``GPL-3.0-only``, ``LicenseRef-My-" +"Custom-License``" + +#: ../source/glossary.rst:183 msgid "Module" msgstr "Модуль" -#: ../source/glossary.rst:152 +#: ../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`." @@ -3530,11 +4351,11 @@ msgstr "" "одном из двух типов: :термин: «чистый модуль» или :термин: «модуль " "расширения»." -#: ../source/glossary.rst:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "Индекс пакета" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." @@ -3542,11 +4363,11 @@ msgstr "" "Репозиторий дистрибутивов с веб-интерфейсом для автоматизации :term:`package " "` обнаружения и потребления." -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Индекс на проект" -#: ../source/glossary.rst:164 +#: ../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 " @@ -3556,12 +4377,12 @@ msgstr "" "конкретным:термин: «проект» как индекс, предпочтительный или необходимый для " "решения зависимостей этого проекта." -#: ../source/glossary.rst:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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 " @@ -3571,7 +4392,7 @@ msgstr "" "других ресурсов, или определенная их комбинация, которая должна быть " "упакована в :term:`Distribution `." -#: ../source/glossary.rst:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -3585,7 +4406,7 @@ msgstr "" "время является то, что содержит :term:`pyproject.toml`, :term:`setup.py` " "или :term:`setup.cfg` файл в корне исходного каталога проекта." -#: ../source/glossary.rst:181 +#: ../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 :" @@ -3597,7 +4418,7 @@ msgstr "" "несколько :term:`Releases `, а каждый релиз может состоять из " "одного или нескольких :term:`distributions `." -#: ../source/glossary.rst:186 +#: ../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 " @@ -3609,11 +4430,11 @@ msgstr "" "обязательно так. Можно установить дистрибутив из проекта 'foo' и получить от " "него пакет, импортируемый только как 'bar'." -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "Корневой каталог проекта" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." @@ -3621,11 +4442,11 @@ msgstr "" "Каталог файловой системы, в котором находится : термин:`Проект` :термин:" "`дерево источников <Дерево источников проекта>`." -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "Дерево источников проекта" -#: ../source/glossary.rst:201 +#: ../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 " @@ -3635,11 +4456,11 @@ msgstr "" "его исходный код перед упаковкой в :термин:`Источник дистрибутива <Источник " "дистрибутива (или \"sdist\")>` или :термин:`Созданный дистрибутив`." -#: ../source/glossary.rst:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "Исходные метаданные проекта" -#: ../source/glossary.rst:210 +#: ../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 " @@ -3656,11 +4477,11 @@ msgstr "" "инструмента формате (в таблице ``[ Инструмент]`` в ``pyproject.toml``, или в " "собственном конфигурационном файле инструмента)." -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Чистый модуль" -#: ../source/glossary.rst:223 +#: ../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)." @@ -3668,11 +4489,11 @@ msgstr "" "Модуль, написанный на языке Python и содержащийся в одном файле ``.py`` (и, " "возможно, связанных с ним файлах ``.pyc`` и/или ``.pyo``)." -#: ../source/glossary.rst:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "Метаданные Pyproject" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -3687,11 +4508,11 @@ msgstr "" "специфический для инструмента формат метаданных источника в таблице " "``[ инструмент]`` в файле ``pyproject.toml``." -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "Ключ метаданных Pyproject" -#: ../source/glossary.rst:240 +#: ../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 " @@ -3701,22 +4522,22 @@ msgstr "" "toml``; часть : термин:``Метаданные пайпроекта``. Отличается от : термин:" "`Поле основных метаданных`." -#: ../source/glossary.rst:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "Подключите метаданные Pyproject" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" "Ключ TOML второго уровня под табличным значением : термин:`Пайпроект Ключ " "Метаданных`." -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "Python Управление по упаковке (PyPA)" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3733,11 +4554,11 @@ msgstr "" "distutils-sig.python.org/>`_ и на форуме Python Discourse `__." -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "Индекс пакетов Python (PyPI)" -#: ../source/glossary.rst:265 +#: ../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 " @@ -3747,11 +4568,11 @@ msgstr "" "сообщества Python. Он открыт для всех разработчиков Python для потребления и " "распространения их дистрибутивов." -#: ../source/glossary.rst:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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." @@ -3761,22 +4582,22 @@ msgstr "" "Index (PyPI)`. Он заменил устаревшее доменное имя индекса, ``pypi.python." "org``, в 2017 году. Он работает на базе :ref:`warehouse`." -#: ../source/glossary.rst:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" "Инструмент-агностик:термин: файл спецификации \"Проект\". Определен в :pep:" "`518'." -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "Выпуск" -#: ../source/glossary.rst:283 +#: ../source/glossary.rst:317 msgid "" "A snapshot of a :term:`Project` at a particular point in time, denoted by a " "version identifier." @@ -3784,7 +4605,7 @@ msgstr "" "Снимок :term:`Project` в определенный момент времени, обозначаемый " "идентификатором версии." -#: ../source/glossary.rst:286 +#: ../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 " @@ -3796,11 +4617,11 @@ msgstr "" "была выпущена, она может быть доступна как в формате распределения " "источника, так и в формате Windows." -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "Требование" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3814,11 +4635,11 @@ msgstr "" "считаться \"требованием\". Для получения дополнительной информации смотрите " "ссылку :ref:`pip:pip install`." -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "Спецификатор требований" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3830,11 +4651,11 @@ msgstr "" "specifiers`. Например, \"foo>=1.3\" - это спецификатор требований, где " "\"foo\" - это имя проекта, а часть \">=1.3\" - это :term:`Version Specifier`" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "Требования к файлам" -#: ../source/glossary.rst:311 +#: ../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 " @@ -3844,17 +4665,44 @@ msgstr "" "быть установлен с помощью :ref:`pip'. Дополнительные сведения см. в :ref:" "`pip'''' docs on :ref:`pip:Requirements Files`." -#: ../source/glossary.rst:315 +#: ../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 "" +"Каталог, в котором хранятся файлы лицензий в :term:`Project Source Tree`, :" +"term:`Distribution Archive` или :term:`Installed Project`. Для :term:" +"`Project Source Tree` или :term:`Source Distribution (or \"sdist\")` это :" +"term:`Project Root Directory`. Для :term:`Built Distribution` или :term:" +"`Installed Project` - это :file:`.dist-info/licenses/` каталог архива колеса " +"или папки проекта соответственно. Также это корневая директория, к которой " +"относятся пути, записанные в ``License-File`` :term:`Core Metadata Field``." + +#: ../source/glossary.rst:366 #: ../source/guides/distributing-packages-using-setuptools.rst:59 msgid "setup.py" msgstr "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." @@ -3862,11 +4710,11 @@ msgstr "" "Файлы спецификаций проекта для:ref:`distutils' и :ref:`setuptools'. См. " "также :term:`pyproject.toml'." -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "Источник Архив" -#: ../source/glossary.rst:325 +#: ../source/glossary.rst:376 msgid "" "An archive containing the raw source code for a :term:`Release`, prior to " "creation of a :term:`Source Distribution ` или :term:`Built " "Distribution`." -#: ../source/glossary.rst:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "Распространение исходных текстов (или \"sdist\")" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3895,11 +4743,11 @@ msgstr "" "дистрибутива``. Дополнительную информацию смотрите в : ссылка:`Форматы " "пакетов`." -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "Системный пакет" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." @@ -3907,11 +4755,11 @@ msgstr "" "Пакет, предоставляемый в формате, имеющем отношение к операционной системе, " "например, файл rpm или dpkg." -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "Спецификатор версии" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3925,11 +4773,11 @@ msgstr "" "настоящее время поддерживаются. Поддержка этой спецификации была реализована " "в :ref:`setuptools` v8.0 и :ref:`pip` v6.0." -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "Виртуальная среда" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3941,15 +4789,15 @@ msgstr "" "системы. Для получения дополнительной информации см. раздел :ref:`Создание и " "использование виртуальных сред`." -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "Формат колеса" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "Колесо" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3961,11 +4809,11 @@ msgstr "" "distribution-format`. Дополнительную информацию см. в : ссылка:`пакетные " "форматы`. Не путать с его эталонной реализацией, : термин:``Колесо проекта``." -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "Проект Колесо" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." @@ -3973,11 +4821,11 @@ msgstr "" "Эталонная реализация PyPA формата : термин:`Формат колеса`; см. : ссылка:" "`колесо`." -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "Рабочая группа" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -4172,7 +5020,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "Примеры" @@ -4579,7 +5427,7 @@ msgstr "" "`Pandas`_." #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "Ссылка" @@ -4820,10 +5668,8 @@ msgstr "" "кроме setuptools, обеспечивают поддержку определения точек входа." #: ../source/guides/creating-command-line-tools.rst:5 -#, fuzzy -#| msgid "Installing stand alone command line tools" msgid "Creating and packaging command-line tools" -msgstr "Установка отдельных инструментов командной строки" +msgstr "Создание и упаковка инструментов командной строки" #: ../source/guides/creating-command-line-tools.rst:7 msgid "" @@ -4833,12 +5679,15 @@ msgid "" "exposing the executable scripts of packages (and available manual pages) for " "use on the command-line." msgstr "" +"Это руководство поможет вам создать и упаковать автономное приложение " +"командной строки, которое можно установить с помощью :ref:`pipx`, " +"инструмента для создания и управления :term:`Python Virtual Environments " +"` и предоставления исполняемых скриптов пакетов (и " +"доступных страниц руководства) для использования в командной строке." #: ../source/guides/creating-command-line-tools.rst:12 -#, fuzzy -#| msgid "Creating the package files" msgid "Creating the package" -msgstr "Создание файлов пакета" +msgstr "Создание пакета" #: ../source/guides/creating-command-line-tools.rst:14 msgid "" @@ -4846,6 +5695,10 @@ msgid "" "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 "" +"Прежде всего, создайте дерево исходных текстов для :term:`project " +"`. Для примера мы создадим простой инструмент, выводящий " +"приветствие (строку) для человека на основе аргументов, заданных в командной " +"строке." #: ../source/guides/creating-command-line-tools.rst:17 #: ../source/guides/tool-recommendations.rst:45 @@ -4857,6 +5710,8 @@ msgid "" "Advise on the optimal structure of a Python package in another guide or " "discussion and link to it here." msgstr "" +"Посоветуйте оптимальную структуру пакета Python в другом руководстве или " +"обсуждении и дайте на него ссылку здесь." #: ../source/guides/creating-command-line-tools.rst:19 msgid "" @@ -4864,12 +5719,17 @@ msgid "" "and in the end be alike this file tree, with the top-level folder and " "package name ``greetings``:" msgstr "" +"Этот проект будет придерживаться :ref:`src-layout ` и в итоге будет похож на это дерево файлов, с папкой верхнего " +"уровня и именем пакета ``greetings``:" #: ../source/guides/creating-command-line-tools.rst:33 msgid "" "The actual code responsible for the tool's functionality will be stored in " "the file :file:`greet.py`, named after the main module:" msgstr "" +"Собственно код, отвечающий за функциональность инструмента, будет храниться " +"в файле :file:`greet.py`, названном в честь основного модуля:" #: ../source/guides/creating-command-line-tools.rst:73 msgid "" @@ -4877,6 +5737,10 @@ msgid "" "greeting to output is constructed. Now, construct the command-line interface " "to provision it with the same, which is done in :file:`cli.py`:" msgstr "" +"Приведенная выше функция получает несколько аргументов-ключей, которые " +"определяют, как будет построено приветствие для вывода. Теперь " +"сконструируйте интерфейс командной строки, чтобы обеспечить его тем же " +"самым, что делается в :file:`cli.py`:" #: ../source/guides/creating-command-line-tools.rst:91 msgid "" @@ -4889,12 +5753,24 @@ msgid "" "possible to create CLI interfaces based solely on docstrings; advanced users " "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" +"Интерфейс командной строки построен с помощью typer_, простого в " +"использовании парсера CLI, основанного на подсказках типов Python. Он " +"обеспечивает автозавершение и красиво оформленную справку по командной " +"строке из коробки. Другим вариантом может быть :py:mod:`argparse`, парсер " +"командной строки, включенный в стандартную библиотеку Python. Он достаточен " +"для большинства потребностей, но требует много кода, обычно в ``cli.py``, " +"для правильной работы. В качестве альтернативы, docopt_ позволяет создавать " +"интерфейсы CLI, основанные исключительно на строках документов; продвинутым " +"пользователям рекомендуется использовать click_ (на котором основан " +"``typer``)." #: ../source/guides/creating-command-line-tools.rst:97 msgid "" "Now, add an empty :file:`__init__.py` file, to define the project as a " "regular :term:`import package `." msgstr "" +"Теперь добавьте пустой файл :file:`__init__.py`, чтобы определить проект как " +"обычный :term:`import package `." #: ../source/guides/creating-command-line-tools.rst:99 msgid "" @@ -4903,6 +5779,10 @@ msgid "" "immediately with flat layout, but requires installation of the package with " "src layout), so initizalize the command-line interface here:" msgstr "" +"Файл :file:`__main__.py` обозначает основную точку входа в приложение при " +"его запуске через :mod:`runpy` (т.е. ``python -m greetings``, что сразу " +"работает при плоской раскладке, но требует установки пакета при src-" +"раскладке), поэтому инициализируйте здесь интерфейс командной строки:" #: ../source/guides/creating-command-line-tools.rst:111 msgid "" @@ -4911,12 +5791,14 @@ msgid "" "a certain hack could be placed in this file; read more at :ref:`running-cli-" "from-source-src-layout`." msgstr "" +"Для того чтобы можно было вызывать интерфейс командной строки " +"непосредственно из :term:`source tree `, т.е. как " +"``python src/greetings``, в этот файл можно поместить определенный хак; " +"подробнее читайте в :ref:`running-cli-from-source-src-layout``." #: ../source/guides/creating-command-line-tools.rst:117 -#, fuzzy -#| msgid "pyproject.toml" msgid "``pyproject.toml``" -msgstr "pyproject.toml" +msgstr "``pyproject.toml``" #: ../source/guides/creating-command-line-tools.rst:119 msgid "" @@ -4926,6 +5808,11 @@ msgid "" "`writing-pyproject-toml`, adding a dependency on ``typer`` (this tutorial " "uses version *0.12.3*)." msgstr "" +"Метаданные проекта :term:`metadata ` размещаются в :term:" +"`pyproject.toml`. Ключи метаданных :term:`pyproject ` и таблица ``[build-system]`` могут быть заполнены, как описано в :ref:" +"`writing-pyproject-toml`, добавив зависимость от ``typer`` (в этом " +"руководстве используется версия *0.12.3*)." #: ../source/guides/creating-command-line-tools.rst:122 msgid "" @@ -4934,30 +5821,39 @@ msgid "" "`console_scripts`) needs to be added as a :term:`subkey `:" msgstr "" +"Чтобы проект распознавался как инструмент командной строки, дополнительно " +"необходимо добавить ``console_scripts`` :ref:`entry point ` " +"(см. :ref:`console_scripts`) в качестве :term:`subkey `:" #: ../source/guides/creating-command-line-tools.rst:129 msgid "" "Now, the project's source tree is ready to be transformed into a :term:" "`distribution package `, which makes it installable." msgstr "" +"Теперь дерево исходных текстов проекта готово к преобразованию в :term:" +"`distribution package `, что делает его пригодным для " +"установки." #: ../source/guides/creating-command-line-tools.rst:134 -#, fuzzy -#| msgid "Install packages using pip" msgid "Installing the package with ``pipx``" -msgstr "Установка пакетов с помощью pip" +msgstr "Установка пакета с помощью ``pipx``" #: ../source/guides/creating-command-line-tools.rst:136 msgid "" "After installing ``pipx`` as described in :ref:`installing-stand-alone-" "command-line-tools`, install your project:" msgstr "" +"После установки ``pipx``, как описано в :ref:`installing-stand-alone-command-" +"line-tools`, установите ваш проект:" #: ../source/guides/creating-command-line-tools.rst:143 msgid "" "This will expose the executable script we defined as an entry point and make " "the command ``greet`` available. Let's test it:" msgstr "" +"Это откроет исполняемый скрипт, который мы определили как точку входа, и " +"сделает доступной команду ``greet``. Давайте проверим это:" #: ../source/guides/creating-command-line-tools.rst:155 msgid "" @@ -4965,12 +5861,19 @@ msgid "" "program's usage by calling it with the ``--help`` option, or configure " "completions via the ``--install-completion`` option." msgstr "" +"Поскольку в этом примере используется ``typer``, теперь вы также можете " +"получить обзор использования программы, вызвав ее с помощью опции ``--" +"help``, или настроить завершение работы с помощью опции ``--install-" +"completion``." #: ../source/guides/creating-command-line-tools.rst:158 msgid "" "To just run the program without installing it permanently, use ``pipx run``, " "which will create a temporary (but cached) virtual environment for it:" msgstr "" +"Чтобы просто запустить программу без ее постоянной установки, используйте " +"``pipx run``, который создаст для нее временное (но кэшированное) " +"виртуальное окружение:" #: ../source/guides/creating-command-line-tools.rst:165 msgid "" @@ -4978,6 +5881,10 @@ msgid "" "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 msgid "" @@ -4985,6 +5892,9 @@ msgid "" "an entry point specific to ``pipx run``. The same can be defined as follows " "in :file:`pyproject.toml`:" msgstr "" +"Однако существует более практичное решение этой проблемы в виде точки входа, " +"специфичной для ``pipx run``. Ее можно определить следующим образом в :file:" +"`pyproject.toml`:" #: ../source/guides/creating-command-line-tools.rst:177 msgid "" @@ -4992,12 +5902,13 @@ msgid "" "will pick up the executable script as the default one and run it, which " "makes this command possible:" msgstr "" +"Благодаря этой точке входа (которая *должна* соответствовать имени пакета), " +"``pipx`` подберет исполняемый скрипт по умолчанию и запустит его, что делает " +"эту команду возможной:" #: ../source/guides/creating-command-line-tools.rst:185 -#, fuzzy -#| msgid "Version exclusion" msgid "Conclusion" -msgstr "Исключение версии" +msgstr "Заключение" #: ../source/guides/creating-command-line-tools.rst:187 msgid "" @@ -5009,6 +5920,13 @@ msgid "" "some research ` on how your package is " "received!" msgstr "" +"Вы уже знаете, как упаковать приложение командной строки, написанное на " +"Python. Следующим шагом может быть распространение вашего пакета, то есть " +"загрузка его в :term:`package index `, чаще всего :term:`PyPI " +"`. Чтобы сделать это, следуйте инструкциям в :" +"ref:`Packaging your project`. И как только вы закончите, не забудьте :ref:" +"`do some research ` на предмет того, как " +"был принят ваш пакет!" #: ../source/guides/distributing-packages-using-setuptools.rst:5 msgid "Packaging and distributing projects" @@ -5483,7 +6401,7 @@ msgstr "" "unmanageable``." #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 #, fuzzy msgid "``scripts``" msgstr "scripts" @@ -5977,81 +6895,54 @@ msgid "Dropping support for older Python versions" msgstr "Удаление поддержки старых версий Python'а" #: ../source/guides/dropping-older-python-versions.rst:7 -#, fuzzy -#| msgid "" -#| "Dropping support for older Python versions is supported by the standard :" -#| "ref:`core-metadata` 1.2 specification via a \"Requires-Python\" attribute." msgid "" "The ability to drop support for older Python versions is enabled by the " "standard :ref:`core-metadata` 1.2 specification via the :ref:`\"Requires-" "Python\" ` attribute." msgstr "" -"Отказ от поддержки старых версий Python поддерживается стандартной " -"спецификацией :ref:`core-metadata` 1.2 с помощью атрибута \"Requires-" -"Python\"." +"Возможность отказаться от поддержки старых версий Python предусмотрена " +"стандартной спецификацией :ref:`core-metadata` 1.2 с помощью атрибута :ref:" +"`\"Requires-Python\" `." #: ../source/guides/dropping-older-python-versions.rst:9 -#, fuzzy -#| msgid "" -#| "Metadata 1.2+ clients, such as Pip 9.0+, 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." 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 "" -"Клиенты с метаданными 1.2+, такие как Pip 9.0+, будут придерживаться этой " +"Установщики с метаданными 1.2+, такие как Pip, будут придерживаться этой " "спецификации, определяя текущую среду выполнения Python и сравнивая ее с " "требуемой версией в метаданных пакета. Если они не совпадают, то будет " "предпринята попытка установить последний дистрибутив пакета, который " -"поддерживал данную среду выполнения Python." +"поддерживал эту среду выполнения Python." #: ../source/guides/dropping-older-python-versions.rst:12 -#, fuzzy -#| msgid "" -#| "This mechanism can be used to drop support for older Python versions, by " -#| "amending the \"Requires-Python\" attribute in the package metadata." msgid "" "This mechanism can be used to drop support for older Python versions, by " "amending the ``Requires-Python`` attribute in the package metadata." msgstr "" "Этот механизм можно использовать для отказа от поддержки старых версий " -"Python, изменив атрибут \"Requires-Python\" в метаданных пакета." +"Python, изменив атрибут ``Requires-Python`` в метаданных пакета." #: ../source/guides/dropping-older-python-versions.rst:15 msgid "Requirements" msgstr "Требования" #: ../source/guides/dropping-older-python-versions.rst:17 -#, fuzzy -#| msgid "" -#| "The user installing the package has at least Pip 9.0, or a client that " -#| "supports the Metadata 1.2 specification." msgid "" "This workflow requires that the user installing the package uses Pip [#]_, " "or another installer that supports the Metadata 1.2 specification." msgstr "" -"У пользователя, устанавливающего пакет, был установлен хотя бы Pip 9.0 или " -"клиент, поддерживающий спецификацию Metadata 1.2." +"Этот рабочий процесс требует, чтобы пользователь, устанавливающий пакет, " +"использовал Pip [#]_ или другую программу установки, поддерживающую " +"спецификацию Metadata 1.2." #: ../source/guides/dropping-older-python-versions.rst:20 msgid "Dealing with the universal wheels" msgstr "Работа с универсальными колесами" #: ../source/guides/dropping-older-python-versions.rst:22 -#, fuzzy -#| msgid "" -#| "Traditionally, 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`` if they use " -#| "setuptools." msgid "" "Traditionally, :ref:`setuptools` projects providing Python code that is " "semantically compatible with both Python 2 and Python 3, produce :term:" @@ -6060,12 +6951,12 @@ msgid "" "just ``py3``. It is often configured within :file:`setup.cfg` under the " "``[bdist_wheel]`` section by setting ``universal = 1``." msgstr "" -"Традиционно проекты, предоставляющие Python код, который семантически " -"совместим как с Python 2, так и Python 3, производят :термин: \" колеса " -"`, которые имеют тег ``py2.py3`` в своих именах. При отказе от " -"поддержки Python 2 важно не забывать об изменении этого тега только на " -"``py3``. Он часто настраивается в :file:`setup.cfg` под ``[bdist_wheel]`` " -"раздел путем установки ``universal = 1``, если они используют setuptools." +"Традиционно проекты :ref:`setuptools`, предоставляющие код на Python, " +"семантически совместимый как с Python 2, так и с Python 3, создают :term:" +"`wheels `, в именах которых присутствует тег ``py2.py3``. При отказе " +"от поддержки Python 2 важно не забыть изменить этот тег на просто ``py3``. " +"Часто его настраивают в :file:`setup.cfg` в разделе ``[bdist_wheel]``, " +"установив ``universal = 1``." #: ../source/guides/dropping-older-python-versions.rst:29 msgid "" @@ -6081,20 +6972,21 @@ msgid "" "invocations, passing the ``--universal`` flag on the command line could " "override this setting." msgstr "" +"Что касается :ref:`deprecated ` прямых вызовов ``setup." +"py``, передача флага ``--universal`` в командной строке может отменить эту " +"настройку." #: ../source/guides/dropping-older-python-versions.rst:45 msgid "Defining the Python version required" msgstr "Определение требуемой версии Python'а" #: ../source/guides/dropping-older-python-versions.rst:48 -#, fuzzy -#| msgid "Installation" msgid "1. Install twine" -msgstr "Установка" +msgstr "1. Установить шпагат" #: ../source/guides/dropping-older-python-versions.rst:50 msgid "Ensure that you have twine available at its latest version. Steps:" -msgstr "" +msgstr "Убедитесь, что у вас есть шпагат последней версии. Шаги:" #: ../source/guides/dropping-older-python-versions.rst:66 msgid "2. Specify the version ranges for supported Python distributions" @@ -6107,25 +6999,29 @@ msgid "" "configuration field corresponds to the :ref:`Requires-Python ` core metadata field:" msgstr "" +"Устанавливает диапазоны версий, объявляющие, какие дистрибутивы Python " +"поддерживаются в :file:`pyproject.toml` вашего проекта. Поле конфигурации :" +"ref:`requires-python` соответствует полю метаданных ядра :ref:`Requires-" +"Python `:" #: ../source/guides/dropping-older-python-versions.rst:80 -#, fuzzy -#| msgid "" -#| "You can specify version ranges and exclusion rules, such as at least " -#| "Python 3. Or, Python 2.7, 3.4 and beyond." 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 "" -"Можно указать диапазоны версий и правила исключения, например, не менее " -"Python 3. Или Python 2.7, 3.4 и далее." +"Вы можете указать диапазон версий и правила исключения (в соответствии со " +"спецификацией :ref:`version-specifiers`), например, не ниже Python 3.9. Или, " +"по крайней мере, Python 3.7 и далее, пропуская точечные выпуски 3.7.0 и " +"3.7.1:" #: ../source/guides/dropping-older-python-versions.rst:89 msgid "" "If using the :ref:`setuptools` build backend, consult the `dependency-" "management`_ documentation for more options." msgstr "" +"Если вы используете бэкенд сборки :ref:`setuptools`, обратитесь к " +"документации `dependency-management`_ за дополнительными опциями." #: ../source/guides/dropping-older-python-versions.rst:92 msgid "" @@ -6133,6 +7029,9 @@ msgid "" "3.10\"``. Doing so can cause different errors and version conflicts. See the " "`discourse-discussion`_ for more information." msgstr "" +"Избегайте добавления верхних границ к диапазонам версий, например, ``\">= " +"3.8, < 3.10\"``. Это может привести к различным ошибкам и конфликтам версий. " +"Дополнительную информацию см. в `discourse-discussion`_." #: ../source/guides/dropping-older-python-versions.rst:96 msgid "3. Validating the Metadata before publishing" @@ -6147,19 +7046,14 @@ msgstr "" "скачиваете) находится текстовый файл PKG-INFO." #: ../source/guides/dropping-older-python-versions.rst:100 -#, fuzzy -#| msgid "" -#| "This file is generated by :ref:`distutils` or :ref:`setuptools` 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." 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 "" -"Этот файл генерируется :ref:`distutils` или :ref:`setuptools` при создании " +"Этот файл генерируется :term:`build backend ` при создании " "исходного пакета. Файл содержит набор ключей и значений, список ключей " -"является частью стандартного формата метаданных PyPa." +"является частью стандартного формата метаданных PyPA." #: ../source/guides/dropping-older-python-versions.rst:103 msgid "You can see the contents of the generated file like this:" @@ -6171,46 +7065,32 @@ msgstr "" "Перед публикацией пакета убедитесь, что все перечисленное ниже на месте:" #: ../source/guides/dropping-older-python-versions.rst:111 -#, fuzzy -#| msgid "" -#| "If you have upgraded correctly, the Metadata-Version value should be 1.2 " -#| "or higher." msgid "" "If you have upgraded correctly, the ``Metadata-Version`` value should be 1.2 " "or higher." msgstr "" -"Если вы выполнили обновление правильно, значение Метаданные-версия должно " +"Если вы выполнили обновление правильно, значение ``Metadata-Version`` должно " "быть 1.2 или выше." #: ../source/guides/dropping-older-python-versions.rst:112 -#, fuzzy -#| msgid "" -#| "The Requires-Python field is set and matches your specification in setup." -#| "py." msgid "" "The ``Requires-Python`` field is set and matches your specification in the " "configuration file." msgstr "" -"Поле Requires-Python установлено и соответствует вашей спецификации в файле " -"setup.py." +"Поле ``Requires-Python`` установлено и соответствует вашей спецификации в " +"файле конфигурации." #: ../source/guides/dropping-older-python-versions.rst:115 -#, fuzzy -#| msgid "Publishing releases" msgid "4. Publishing the package" -msgstr "Публикация выпусков" +msgstr "4. Публикация пакета" #: ../source/guides/dropping-older-python-versions.rst:117 -#, fuzzy -#| msgid "Uploading your Project to PyPI" msgid "Proceed as suggested in :ref:`Uploading your Project to PyPI`." -msgstr "Загрузка вашего проекта на PyPI" +msgstr "Действуйте, как указано в :ref:`Uploading your Project to PyPI`." #: ../source/guides/dropping-older-python-versions.rst:120 -#, fuzzy -#| msgid "Dropping a Python release" msgid "Dropping a Python version" -msgstr "Удаление выпуска Python'а" +msgstr "Отказ от версии Python" #: ../source/guides/dropping-older-python-versions.rst:122 msgid "" @@ -6222,10 +7102,18 @@ msgid "" "depends on whether the project needs to be stable and well-covered for a " "wider range of users." msgstr "" +"В принципе, по крайней мере, поддержка версий Python в метаданных должна " +"сохраняться как можно дольше, потому что после отказа от неё люди, всё ещё " +"зависящие от версии, будут вынуждены перейти на новую версию. Если же " +"поддержка конкретной версии становится препятствием для новых возможностей " +"или возникают другие проблемы, метаданные ``Requires-Python`` должны быть " +"изменены. Конечно, это также зависит от того, должен ли проект быть " +"стабильным и хорошо покрытым для более широкого круга пользователей." #: ../source/guides/dropping-older-python-versions.rst:128 msgid "Each version compatibility change should have its own release." msgstr "" +"Каждое изменение совместимости версий должно иметь свой собственный релиз." #: ../source/guides/dropping-older-python-versions.rst:132 msgid "" @@ -6234,10 +7122,15 @@ msgid "" "visible places (like the testing environment). Tools like pyupgrade_ or " "`ruff `_ can automate some of this work." msgstr "" +"При отказе от версии Python может быть полезно обновить синтаксис кода " +"проекта в целом, помимо обновления версий, используемых в видимых местах " +"(например, в тестовой среде). Такие инструменты, как pyupgrade_ или `ruff " +"`_, могут автоматизировать часть этой " +"работы." #: ../source/guides/dropping-older-python-versions.rst:138 msgid "Support for the Metadata 1.2 specification has been added in Pip 9.0." -msgstr "" +msgstr "В Pip 9.0 добавлена поддержка спецификации Metadata 1.2." #: ../source/guides/hosting-your-own-index.rst:5 msgid "Hosting your own simple repository" @@ -6631,13 +7524,6 @@ msgstr "" "взаимодействовать с различными частями внешнего программного обеспечения." #: ../source/guides/installing-scientific-packages.rst:13 -#, fuzzy -#| 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 " -#| "vectorised instructions available in modern CPUs." msgid "" "In particular, `NumPy `__, which provides the basis for " "most of the software in the `scientific Python stack `__ BLAS/LAPACK library, restricted " -#| "to SSE2 instructions, so they may not provide optimal linear algebra " -#| "performance." 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 " @@ -6673,7 +7550,7 @@ msgstr "" "предварительно собранные 32- и 64-битные двоичные файлы в формате ``колеса'' " "для всех основных операционных систем (Windows, macOS и Linux). Обратите " "внимание, однако, что в Windows двоичные файлы NumPy скомпонованы с " -"библиотекой BLAS/LAPACK `ATLAS `__, " +"библиотекой BLAS/LAPACK `ATLAS `__, " "ограниченной инструкциями SSE2, поэтому они могут не обеспечивать " "оптимальную производительность линейной алгебры." @@ -6812,19 +7689,14 @@ msgid "SciPy distributions" msgstr "Дистрибутивы SciPy" #: ../source/guides/installing-scientific-packages.rst:91 -#, fuzzy -#| msgid "" -#| "The SciPy site lists `several distributions `_ that provide the full SciPy stack to end users in an " -#| "easy to use and update format." msgid "" "The SciPy site lists `several distributions `_ " "that provide the full SciPy stack to end users in an easy to use and update " "format." msgstr "" "На сайте SciPy перечислены `несколько дистрибутивов `_, которые предоставляют полный стек SciPy конечным " -"пользователям в удобном для использования и обновления формате." +"install/>`_, которые предоставляют полный стек SciPy конечным пользователям " +"в удобном для использования и обновления формате." #: ../source/guides/installing-scientific-packages.rst:96 msgid "" @@ -6882,21 +7754,6 @@ msgid "The conda cross-platform package manager" msgstr "Кроссплатформенный менеджер пакетов conda" #: ../source/guides/installing-scientific-packages.rst:121 -#, fuzzy -#| msgid "" -#| "``conda`` is an open source (BSD licensed) package management system and " -#| "environment management system included in Anaconda 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. Conda is available in Anaconda and " -#| "Miniconda (an easy-to-install download with just Python and conda)." msgid "" "``conda`` is an open source (BSD licensed) package management system and " "environment management system that allows users to install multiple versions " @@ -6911,41 +7768,30 @@ msgid "" "pip, which only manages Python packages." msgstr "" "``conda`` - это система управления пакетами с открытым исходным кодом " -"(лицензия BSD) и система управления окружением, входящая в состав Anaconda, " -"которая позволяет пользователям устанавливать несколько версий бинарных " -"программных пакетов и их зависимостей, а также легко переключаться между " -"ними. Это кроссплатформенный инструмент, работающий в Windows, macOS и " -"Linux. Conda можно использовать для упаковки и распространения всех видов " -"пакетов, она не ограничивается только пакетами Python. Она имеет полную " -"поддержку собственных виртуальных сред. Conda делает окружения " -"первоклассными гражданами, позволяя легко создавать независимые окружения " -"даже для библиотек на Си. Она написана на Python, но является Python-" -"агностичной. Conda управляет самим Python как пакетом, поэтому возможна " -"команда :`conda update python`, в отличие от pip, который управляет только " -"пакетами Python. Conda доступна в версиях Anaconda и Miniconda (простая в " -"установке загрузка, содержащая только Python и conda)." +"(лицензия BSD) и система управления окружением, которая позволяет " +"пользователям устанавливать несколько версий бинарных программных пакетов и " +"их зависимостей, а также легко переключаться между ними. Это " +"кроссплатформенный инструмент, работающий под Windows, MacOS и Linux. Conda " +"может использоваться для упаковки и распространения всех видов пакетов, она " +"не ограничивается только пакетами Python. Она имеет полную поддержку " +"собственных виртуальных сред. Conda делает окружения гражданами первого " +"класса, позволяя легко создавать независимые окружения даже для библиотек на " +"Си. Она написана на Python, но является Python-агностичной. Conda управляет " +"самим Python как пакетом, поэтому возможна команда :`conda update python`, в " +"отличие от pip, который управляет только пакетами Python." #: ../source/guides/installing-scientific-packages.rst:133 -#, fuzzy -#| msgid "" -#| "`Anaconda `_ is a Python " -#| "distribution published by Anaconda, Inc. It is a stable collection of " -#| "Open Source packages for big data and scientific use. As of the 5.0 " -#| "release of Anaconda, about 200 packages are installed by default, and a " -#| "total of 400-500 can be installed and updated from the Anaconda " -#| "repository." msgid "" "Anaconda `Anaconda `_ is a Python " "distribution published by Anaconda, Inc. It is a stable collection of Open " "Source packages for big data and scientific use, and a collection of " "Graphical Interface utilities for managing conda environments." msgstr "" -"Anaconda `_ - дистрибутив " -"Python, опубликованный компанией Anaconda, Inc. Он представляет собой " -"стабильную коллекцию пакетов с открытым исходным кодом для работы с большими " -"данными и научного использования. В релизе 5.0 Anaconda по умолчанию " -"установлено около 200 пакетов, а всего из репозитория Anaconda можно " -"установить и обновить 400-500 пакетов." +"Anaconda `Anaconda `_ - дистрибутив " +"Python, опубликованный компанией Anaconda, Inc. Это стабильная коллекция " +"пакетов с открытым исходным кодом для работы с большими данными и научными " +"исследованиями, а также набор утилит с графическим интерфейсом для " +"управления средами conda." #: ../source/guides/installing-scientific-packages.rst:135 msgid "" @@ -6954,6 +7800,10 @@ msgid "" "miniconda/>`_, `miniforge `_, and " "`pixi `_." msgstr "" +"В дополнение к полному дистрибутиву, предоставляемому Anaconda, сам менеджер " +"пакетов conda доступен в `miniconda `_, `miniforge `_ и `pixi " +"`_." #: ../source/guides/installing-scientific-packages.rst:138 msgid "" @@ -6962,6 +7812,11 @@ msgid "" "conda-forge channel, which provides a wide variety of pre-built packages, " "and some domain-specific package collections." msgstr "" +"Пакеты Conda доступны по нескольким каналам на Anaconda.org, включая канал " +"по умолчанию, поддерживаемый Anaconda, Inc, канал conda-forge, " +"поддерживаемый сообществом, который предоставляет широкий спектр " +"предварительно созданных пакетов, а также некоторые коллекции пакетов, " +"специфичные для конкретного домена." #: ../source/guides/installing-stand-alone-command-line-tools.rst:4 msgid "Installing stand alone command line tools" @@ -7154,21 +8009,14 @@ msgid "To install pip and wheel for the system Python, there are two options:" msgstr "Чтобы установить pip и wheel для системы Python, есть два варианта:" #: ../source/guides/installing-using-linux-tools.rst:52 -#, fuzzy -#| msgid "" -#| "Enable the `EPEL repository `_ using " -#| "`these instructions `__. On EPEL 7, you can install pip " -#| "and wheel like so:" msgid "" "Enable the `EPEL repository `_ using " "`these instructions `__. On EPEL 7, you can install pip and wheel like so:" msgstr "" -"Включите репозиторий EPEL `_, используя " -"эти инструкции `__. На EPEL 7 вы можете установить pip " -"и wheel следующим образом:" +"Включите `репозиторий EPEL `_, " +"используя `эти инструкции `__. На EPEL 7 вы можете установить pip и wheel следующим образом:" #: ../source/guides/installing-using-linux-tools.rst:61 msgid "" @@ -7761,23 +8609,500 @@ 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." +"This \"how to\" guide on installing packages and using :ref:`virtualenv` is " +"under development. Please refer to the :ref:`virtualenv` documentation for " +"details on installation and usage." +msgstr "" +"Это руководство по установке пакетов и использованию :ref:`virtualenv` " +"находится в стадии разработки. Пожалуйста, обратитесь к документации по :ref:" +"`virtualenv` для получения подробной информации об установке и использовании." + +#: ../source/guides/installing-using-virtualenv.rst:13 +msgid "" +"This doc uses the term **package** to refer to a :term:`Distribution " +"Package` which is different from an :term:`Import Package` that which is " +"used to import modules in your Python source code." +msgstr "" +"В этом документе термин **пакет** используется для обозначения :term:" +"`Distribution Package`, который отличается от :term:`Import Package`, " +"который используется для импорта модулей в исходный код Python." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:6 +msgid "Licensing examples and user scenarios" +msgstr "Примеры лицензирования и пользовательские сценарии" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:9 +msgid "" +":pep:`639` has specified the way to declare a 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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" +"В :pep:`639` указан способ объявления лицензии проекта, пути к файлам " +"лицензии и другая юридически необходимая информация. Этот документ призван " +"дать четкое руководство по переходу от устаревшего к стандартизированному " +"способу объявления лицензий. Убедитесь, что ваш бэкенд сборки поддерживает :" +"pep:`639`, прежде чем пытаться применить новые рекомендации. По состоянию на " +"февраль 2025 года, :doc:`setuptools ` " +"и :ref:`flit ` пока не поддерживают :pep:`639`." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "Примеры лицензирования" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "Базовый пример" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +msgid "" +"The Setuptools project itself, as of `version 75.6.0 `__, " +"does not use the ``License`` field in its own project source metadata. " +"Further, it no longer explicitly specifies ``license_file``/" +"``license_files`` as it did previously, since Setuptools relies on its own " +"automatic inclusion of license-related files matching common patterns, such " +"as the :file:`LICENSE` file it uses." +msgstr "" +"Сам проект Setuptools, начиная с `версии 75.6.0 `__, не " +"использует поле ``Лицензия`` в собственных метаданных источника проекта. " +"Кроме того, он больше не указывает явно ``license_file``/ ``license_files``, " +"как это было раньше, поскольку Setuptools полагается на собственное " +"автоматическое включение файлов, связанных с лицензией, соответствующих " +"общим шаблонам, таким как файл :file:`LICENSE``, который он использует." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" +"Он включает следующие связанные с лицензией метаданные в свой :file:" +"`pyproject.toml`:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" +"Самый простой переход на PEP 639 будет заключаться в использовании этого " +"варианта:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" +"Или, если проект использовал :file:`setup.cfg`, в его таблице ``[metadata]``:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" +"Выходные метаданные Core Metadata для дистрибутивных пакетов будут такими:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +msgid "" +"The :file:`LICENSE` file would be stored at :file:`/setuptools-{VERSION}/" +"LICENSE` in the sdist and :file:`/setuptools-{VERSION}.dist-info/licenses/" +"LICENSE` in the wheel, and unpacked from there into the site directory (e." +"g. :file:`site-packages/`) on installation; :file:`/` is the root of the " +"respective archive and ``{VERSION}`` the version of the Setuptools release " +"in the Core Metadata." +msgstr "" +"Файл :file:`LICENSE` будет храниться по адресу :file:`/setuptools-{VERSION}/" +"LICENSE` в sdist и :file:`/setuptools-{VERSION}.dist-info/licenses/LICENSE` " +"в wheel, и распаковываться оттуда в каталог сайта (например, :file:`site-" +"packages/`) при установке; :file:/` - корень соответствующего архива, а " +"``{VERSION}`` - версия выпуска Setuptools. например, :file:`site-packages/`) " +"при установке; :file:`/` - корень соответствующего архива, а ``{VERSION}`` - " +"версия релиза Setuptools в метаданных ядра." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:75 +msgid "Advanced example" +msgstr "Расширенный пример" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +msgid "" +"Suppose Setuptools were to include the licenses of the third-party projects " +"that are vendored in the :file:`setuptools/_vendor/` and :file:" +"`pkg_resources/_vendor/` directories; specifically:" +msgstr "" +"Предположим, что Setuptools должна включить лицензии сторонних проектов, " +"которые хранятся в каталогах :file:`setuptools/_vendor/` и :file:" +"`pkg_resources/_vendor/`; а именно:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:88 +msgid "The license expressions for these projects are:" +msgstr "Лицензионные выражения для этих проектов следующие:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +msgid "" +"A comprehensive license expression covering both Setuptools proper and its " +"vendored dependencies would contain these metadata, combining all the " +"license expressions into one. Such an expression might be:" +msgstr "" +"Всеобъемлющее выражение лицензии, охватывающее как собственно Setuptools, " +"так и его вендовые зависимости, будет содержать эти метаданные, объединяя " +"все выражения лицензии в одно. Такое выражение может быть следующим:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:105 +msgid "" +"In addition, per the requirements of the licenses, the relevant license " +"files must be included in the package. Suppose the :file:`LICENSE` file " +"contains the text of the MIT license and the copyrights used by Setuptools, " +"``pyparsing``, ``more_itertools`` and ``ordered-set``; and the :file:" +"`LICENSE*` files in the :file:`setuptools/_vendor/packaging/` directory " +"contain the Apache 2.0 and 2-clause BSD license text, and the Packaging " +"copyright statement and `license choice notice `__." +msgstr "" +"Кроме того, согласно требованиям лицензий, в пакет должны быть включены " +"соответствующие файлы лицензий. Допустим, файл :file:`LICENSE` содержит " +"текст лицензии MIT и авторские права, используемые Setuptools, " +"``pyparsing``, ``more_itertools`` и ``ordered-set``; а файлы :file:" +"`LICENSE*` в каталоге :file:`setuptools/_vendor/packaging/` содержат текст " +"лицензии Apache 2.0 и 2 пункта лицензии BSD, а также заявление об авторских " +"правах Packaging и уведомление о выборе лицензии `__." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:113 +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 "" +"В частности, мы предполагаем, что файлы лицензий расположены по следующим " +"путям в дереве исходных текстов проекта (относительно корня проекта и :file:" +"`pyproject.toml`):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" +"Если собрать все это вместе, то наш :file:`pyproject.toml` будет иметь вид:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +msgid "" +"Or alternatively, the license files can be specified explicitly (paths will " +"be interpreted as glob patterns):" +msgstr "" +"Или же файлы лицензии можно указать явно (пути будут интерпретированы как " +"glob-шаблоны):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" +"Если бы наш проект использовал :file:`setup.cfg`, мы могли бы определить это " +"в :" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" +"При любом из этих подходов выходные метаданные Core Metadata в дистрибутиве " +"будут такими:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +msgid "" +"In the resulting sdist, with :file:`/` as the root of the archive and " +"``{VERSION}`` the version of the Setuptools release specified in the Core " +"Metadata, the license files would be located at the paths:" +msgstr "" +"В полученном sdist, с :file:`/` в качестве корня архива и ``{VERSION}`` " +"версией выпуска Setuptools, указанной в Core Metadata, файлы лицензий будут " +"расположены по путям:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:183 +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 "" +"В собранном колесе, где :file:`/` является корнем архива, а ``{VERSION}`` - " +"предыдущей, файлы лицензии будут храниться по адресу:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:193 +msgid "" +"Finally, in the installed project, with :file:`site-packages/` being the " +"site dir and ``{VERSION}`` as the previous, the license files would be " +"installed to:" +msgstr "" +"Наконец, в установленном проекте, где :file:`site-packages/` является диром " +"сайта, а ``{VERSION}`` - предыдущей версией, файлы лицензии будут " +"установлены в:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:205 +msgid "Expression examples" +msgstr "Примеры выражений" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" +"Некоторые дополнительные примеры допустимых значений ``License-Expression``:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "Пользовательские сценарии" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "У меня есть частный пакет, который не будет распространяться" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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 "" -"Это руководство по установке пакетов и использованию :ref:`virtualenv` " -"находится в стадии разработки. Пожалуйста, обратитесь к документации по :ref:" -"`virtualenv` для получения подробной информации об установке и использовании." +"Если ваш пакет не будет распространяться публично, то есть за пределами " +"вашей компании, организации или домохозяйства, то *обычно* нет необходимости " +"включать официальную лицензию, так что вам не придется делать здесь ничего " +"лишнего." -#: ../source/guides/installing-using-virtualenv.rst:13 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:238 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." +"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 "" -"В этом документе термин **пакет** используется для обозначения :term:" -"`Distribution Package`, который отличается от :term:`Import Package`, " -"который используется для импорта модулей в исходный код Python." +"Тем не менее, не лишним будет включить ``LicenseRef-Proprietary`` в качестве " +"выражения лицензии в конфигурацию пакета, и/или заявление об авторских " +"правах и любые юридические уведомления в файл :file:`LICENSE.txt` в корне " +"каталога вашего проекта, который будет автоматически включен средствами " +"упаковки." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "Я просто хочу поделиться своими работами без юридических ограничений" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +msgid "" +"To apply it, just paste `the text `__ into a file named :" +"file:`LICENSE.txt` at the root of your repo, and add the year and your name " +"to the copyright line. Then, just add ``license = \"MIT\"`` under " +"``[project]`` in your :file:`pyproject.toml` if your packaging tool supports " +"it, or in its config file/section. You're done!" +msgstr "" +"Чтобы применить его, просто вставьте ``текст ``__ в файл " +"с именем :file:`LICENSE.txt`` в корне вашего репо, и добавьте год и ваше имя " +"в строку копирайта. Затем просто добавьте ``license = \"MIT\"`` под " +"``[project]`` в ваш :file:`pyproject.toml`, если ваш инструмент упаковки " +"поддерживает это, или в его конфигурационный файл/раздел. Все готово!" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:263 +msgid "I want to distribute my project under a specific license" +msgstr "Я хочу распространять свой проект под определенной лицензией" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +msgid "" +"To use a particular license, simply paste its text into a :file:`LICENSE." +"txt` file at the root of your repo, if you don't have it in a file starting " +"with :file:`LICENSE` or :file:`COPYING` already, and add ``license = " +"\"LICENSE-ID\"`` under ``[project]`` in your :file:`pyproject.toml` if your " +"packaging tool supports it, or else in its config file. You can find the " +"``LICENSE-ID`` and copyable license text on sites like `ChooseALicense " +"`__ or `SPDX `__." +msgstr "" +"Чтобы использовать определенную лицензию, просто вставьте ее текст в файл :" +"file:`LICENSE.txt` в корне вашего репозитория, если он еще не находится в " +"файле, начинающемся с :file:`LICENSE` или :file:`COPYING`, и добавьте " +"``license = \"LICENSE-ID\"`` под ``[project]`` в вашем :file:`pyproject." +"toml`, если ваш инструмент упаковки поддерживает это, или в другом случае в " +"его конфигурационном файле. Вы можете найти ``LICENSE-ID`` и копируемый " +"текст лицензии на сайтах вроде `ChooseALicense `__ или " +"`SPDX `__." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "Я поддерживаю существующий пакет, который уже лицензирован" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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 "" +"В конфигурационном файле проекта введите выражение лицензии в ``license`` " +"(таблица ``[project]`` в :file:`pyproject.toml`) или эквивалентное выражение " +"для вашего инструмента упаковки, и убедитесь, что удалили все устаревшие " +"подключи таблицы ``license`` или классификаторы ``License ::``. Возможно, " +"существующее значение ``лицензии`` уже является действительным (например, " +"``MIT``, ``Apache-2.0 OR BSD-2-Clause`` и т. д.); в противном случае " +"проверьте список лицензий `__ для идентификатора, который " +"соответствует лицензии, используемой в вашем проекте." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:294 +msgid "" +"Make sure to list your license files under ``license-files`` under " +"``[project]`` in :file:`pyproject.toml` or else in your tool's configuration " +"file." +msgstr "" +"Убедитесь, что вы перечислили файлы лицензий в разделе ``license-files`` под " +"``[project]`` в :file:`pyproject.toml` или в другом файле конфигурации " +"вашего инструмента." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:298 +msgid "" +"See the :ref:`licensing-example-basic` for a simple but complete real-world " +"demo of how this works in practice. See also the best-effort guidance on how " +"to translate license classifiers into license expression provided by the :" +"pep:`639` authors: `Mapping License Classifiers to SPDX Identifiers " +"`__. Packaging tools may support automatically " +"converting legacy licensing metadata; check your tool's documentation for " +"more information." +msgstr "" +"Смотрите :ref:`licensing-example-basic` для простой, но полной демонстрации " +"того, как это работает на практике. См. также руководство по переводу " +"классификаторов лицензий в выражения лицензий, предоставленное авторами :pep:" +"`639`: `Mapping License Classifiers to SPDX Identifiers " +"`__. Средства упаковки могут поддерживать " +"автоматическое преобразование устаревших лицензионных метаданных; для " +"получения дополнительной информации обратитесь к документации вашего " +"средства." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:308 +msgid "My package includes other code under different licenses" +msgstr "Мой пакет включает в себя другой код под разными лицензиями" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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 "" +"Вкратце, ``Лицензия-1 И Лицензия-2`` означает, что *обе* лицензии применимы " +"к вашему проекту или его части (например, вы включили файл под другой " +"лицензией), а ``Лицензия-1 ИЛИ Лицензия-2`` означает, что *любая* из " +"лицензий может быть использована по выбору пользователя (например, вы хотите " +"предоставить пользователям возможность выбора из нескольких лицензий). Вы " +"можете использовать круглые скобки (``()``) для группировки, чтобы " +"сформировать выражения, которые охватывают даже самые сложные ситуации." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:324 +msgid "" +"In your project config file, enter your license expression under ``license`` " +"(``[project]`` table of :file:`pyproject.toml`), or the equivalent for your " +"packaging tool, and make sure to remove any legacy ``license`` table subkeys " +"or ``License ::`` classifiers." +msgstr "" +"В файле конфигурации проекта введите выражение лицензии в ``license`` " +"(таблица ``[project]`` в :file:`pyproject.toml`), или эквивалентное " +"выражение для вашего инструмента упаковки, и убедитесь, что вы удалили все " +"устаревшие подключи таблицы ``license`` или классификаторы ``License ::``." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:330 +msgid "" +"Also, make sure you add the full license text of all the licenses as files " +"somewhere in your project repository. List the relative path or glob " +"patterns to each of them under ``license-files`` under ``[project]`` in :" +"file:`pyproject.toml` (if your tool supports it), or else in your tool's " +"configuration file." +msgstr "" +"Также убедитесь, что вы добавили полный текст всех лицензий в виде файлов " +"куда-то в репозиторий вашего проекта. Укажите относительный путь или glob-" +"шаблоны к каждому из них в ``license-files`` в ``[project]`` в :file:" +"`pyproject.toml` (если ваш инструмент поддерживает это), или в другом " +"конфигурационном файле вашего инструмента." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:336 +msgid "" +"As an example, if your project was licensed MIT but incorporated a vendored " +"dependency (say, ``packaging``) that was licensed under either Apache 2.0 or " +"the 2-clause BSD, your license expression would be ``MIT AND (Apache-2.0 OR " +"BSD-2-Clause)``. You might have a :file:`LICENSE.txt` in your repo root, and " +"a :file:`LICENSE-APACHE.txt` and :file:`LICENSE-BSD.txt` in the :file:" +"`_vendor/` subdirectory, so to include all of them, you'd specify " +"``[\"LICENSE.txt\", \"_vendor/packaging/LICENSE*\"]`` as glob patterns, or " +"``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-BSD." +"txt\"]`` as literal file paths." +msgstr "" +"Например, если ваш проект имеет лицензию MIT, но включает зависимость от " +"поставщика (скажем, ``упаковку''), которая лицензируется либо под Apache " +"2.0, либо под BSD с двумя оговорками, ваше выражение лицензии будет ``MIT " +"AND (Apache-2.0 OR BSD-2-Clause)``. У вас может быть :file:`LICENSE.txt` в " +"корне репо, а также :file:`LICENSE-APACHE.txt` и :file:`LICENSE-BSD.txt` в " +"подкаталоге :file:`_vendor/`, поэтому, чтобы включить их все, вы укажете " +"``[\"LICENSE. txt\", \"_vendor/packaging/LICENSE*\"]`` как glob-шаблоны, или " +"``[\"LICENSE.txt\", \"_vendor/LICENSE-APACHE.txt\", \"_vendor/LICENSE-BSD." +"txt\"]`` как буквальные пути к файлам." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:347 +msgid "" +"See a fully worked out :ref:`licensing-example-advanced` for an end-to-end " +"application of this to a real-world complex project, with many technical " +"details, and consult a `tutorial `__ for more help and " +"examples using SPDX identifiers and expressions." +msgstr "" +"Смотрите полностью проработанный пример :ref:`licensing-example-advanced` " +"для комплексного применения этого метода в реальном сложном проекте, с " +"множеством технических деталей, а также обратитесь к `учебнику " +"`__ для получения дополнительной помощи и примеров " +"использования идентификаторов и выражений SPDX." #: ../source/guides/making-a-pypi-friendly-readme.rst:2 msgid "Making a PyPI-friendly README" @@ -9369,7 +10694,7 @@ msgstr "" #: ../source/guides/packaging-binary-extensions.rst:408 msgid "Additional considerations for binary wheels" -msgstr "" +msgstr "Дополнительные соображения для бинарных колес" #: ../source/guides/packaging-binary-extensions.rst:410 msgid "" @@ -9378,6 +10703,10 @@ 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 "" @@ -9385,6 +10714,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" @@ -10125,18 +11457,19 @@ 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 "Однопользовательская версия пакета" +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" @@ -11189,44 +12522,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, рекомендуется использовать : ссылка:" -"`доверенная публикация <доверенная публикация>`, которая позволяет безопасно " -"загрузить пакет в PyPI из задания GitHub Actions. (Это пока не " -"поддерживается на других форумах, кроме GitHub)" +"Для проектов, размещенных на поддерживаемых CI/CD платформах или " +"опубликованных с их помощью, рекомендуется использовать :ref:`Trusted " +"Publishing `, который позволяет безопасно загрузить " +"пакет в PyPI из CI/CD рабочего процесса без ручной настройки API-токена." #: ../source/guides/tool-recommendations.rst:147 msgid "" "As of November 2024, PyPI supports the following platforms as Trusted " "Publishing providers:" msgstr "" +"По состоянию на ноябрь 2024 года PyPI поддерживает следующие платформы в " +"качестве доверенных поставщиков публикаций:" #: ../source/guides/tool-recommendations.rst:150 msgid "GitHub Actions (on ``https://github.com``)" -msgstr "" +msgstr "Действия на GitHub (на ``https://github.com``)" #: ../source/guides/tool-recommendations.rst:151 msgid "GitLab CI/CD (on ``https://gitlab.com``)" -msgstr "" +msgstr "GitLab CI/CD (на ``https://gitlab.com``)" #: ../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 "" @@ -11453,56 +12782,49 @@ 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 -#, fuzzy -#| msgid "" -#| "At the time of writing this (November 2023), Poetry_ is a notable build " -#| "backend that does not use the ``[project]`` table (it uses the ``[tool." -#| "poetry]`` table instead)." msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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 "" -"На момент написания этой статьи (ноябрь 2023 года), Poetry_ является " -"заметным бэкендом сборки, который не использует таблицу ``[project]`` " -"(вместо нее используется таблица ``[tool.poetry]``)." +"Заметным исключением является Poetry_, который до версии 2.0 (выпущенной 5 " +"января 2025 года) не использовал таблицу ``[project]``, а использовал " +"таблицу ``[tool.poetry]``. В версии 2.0 она поддерживает обе таблицы. Кроме " +"того, бэкенд сборки setuptools_ поддерживает как таблицу ``[project]``, так " +"и более старый формат в ``setup.cfg`` или ``setup.py``." -#: ../source/guides/writing-pyproject-toml.rst:37 -#, 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`." +#: ../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 "" -"Кроме того, бэкенд сборки setuptools_ поддерживает как таблицу " -"``[project]``, так и более старый формат в ``setup.cfg`` или ``setup.py``. " -"Для новых проектов рекомендуется использовать таблицу ``[project]`` и " -"сохранять ``setup.py`` только в случае необходимости программной настройки " -"(например, для сборки расширений на C), но форматы ``setup.cfg`` и ``setup." -"py`` по-прежнему актуальны. См. :ref:`setup-py-deprecated`." +"Для новых проектов используйте таблицу ``[project]``, а ``setup.py`` " +"сохраняйте только в том случае, если требуется некоторая программная " +"настройка (например, сборка расширений на C), но форматы ``setup.cfg`` и " +"``setup.py`` по-прежнему актуальны. См. :ref:`setup-py-deprecated`." -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "Объявление бэкенда сборки" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -11518,7 +12840,7 @@ msgstr "" "дополнительные зависимости. Вы также можете ограничить версии, например, " "``requires = [\"setuptools >= 61.0\"]``." -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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 " @@ -11528,15 +12850,15 @@ msgstr "" "сборки (после :ref:`выбора бэкенда сборки `). Вот " "значения для некоторых распространенных бэкендов сборки:" -#: ../source/guides/writing-pyproject-toml.rst:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "Статические и динамические метаданные" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "Остальная часть этого руководства посвящена таблице ``[проекта]``." -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 msgid "" "Most of the time, you will directly write the value of a ``[project]`` " "field. For example: ``requires-python = \">= 3.8\"``, or ``version = " @@ -11545,7 +12867,7 @@ msgstr "" "Чаще всего вы будете напрямую записывать значение поля ``[проект]``. " "Например: ``requires-python = \">= 3.8\"``, или ``version = \"1.0\"``." -#: ../source/guides/writing-pyproject-toml.rst:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -11558,7 +12880,7 @@ msgstr "" "таких случаях вам следует пометить поле как динамическое, например, с " "помощью," -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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." @@ -11567,18 +12889,18 @@ msgstr "" "Обратитесь к документации вашего бэкенда сборки, чтобы узнать, как он это " "делает." -#: ../source/guides/writing-pyproject-toml.rst:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "Базовая информация" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "``name``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 msgid "" "Put the name of your project on PyPI. This field is required and is the only " "field that cannot be marked as dynamic." @@ -11587,12 +12909,7 @@ msgstr "" "и является единственным полем, которое не может быть помечено как " "динамическое." -#: ../source/guides/writing-pyproject-toml.rst:133 -#, 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." +#: ../source/guides/writing-pyproject-toml.rst:134 msgid "" "The project name must consist of ASCII letters, digits, underscores " "\"``_``\", hyphens \"``-``\" and periods \"``.``\". It must not start or end " @@ -11602,7 +12919,7 @@ msgstr "" "\"``_``\", дефисов \"``-``\" и точек \"``.``\". Оно не должно начинаться или " "заканчиваться подчеркиванием, дефисом или точкой." -#: ../source/guides/writing-pyproject-toml.rst:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -11617,18 +12934,18 @@ msgstr "" "написаний: ``Cool-Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-" "__sTuFF``." -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "Положите версию вашего проекта." -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 msgid "" "Some more complicated version specifiers like ``2020.0.0a1`` (for an alpha " "release) are possible; see the :ref:`specification ` for " @@ -11637,42 +12954,37 @@ msgstr "" "Возможны и более сложные спецификации версий, например ``2020.0.0a1`` (для " "альфа-версии); подробности см. в :ref:`specification `." -#: ../source/guides/writing-pyproject-toml.rst:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" "Это поле является обязательным, хотя часто его помечают как динамическое с " "помощью" -#: ../source/guides/writing-pyproject-toml.rst:165 -#, 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." +#: ../source/guides/writing-pyproject-toml.rst:166 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:`Single sourcing the version`." +"``__version__`` или тега Git. За более подробной информацией обратитесь к " +"обсуждению :ref:`single-source-version`." -#: ../source/guides/writing-pyproject-toml.rst:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "Зависимости и требования" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "``зависимости``/``опциональные-зависимости``" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" "Если у вашего проекта есть зависимости, перечислите их следующим образом:" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." @@ -11680,7 +12992,7 @@ msgstr "" "Полный синтаксис, который можно использовать для ограничения версий, см. в :" "ref:`Спецификаторы зависимости `." -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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 " @@ -11690,7 +13002,7 @@ msgstr "" "необходимы только для определенной функции вашего пакета. В этом случае " "поместите их в `` по выбору-зависимости``." -#: ../source/guides/writing-pyproject-toml.rst:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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 " @@ -11701,13 +13013,13 @@ msgstr "" "установки проекта с поддержкой графического интерфейса, добавив зависимость " "PyQt5." -#: ../source/guides/writing-pyproject-toml.rst:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "``требуется-python``" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." @@ -11715,11 +13027,11 @@ msgstr "" "Это позволяет объявить минимальную версию Python, которую вы поддерживаете " "[#requires-python-upper-bounds]_." -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "Создание исполняемых скриптов" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." @@ -11727,17 +13039,17 @@ msgstr "" "Чтобы установить команду как часть вашего пакета, объявите ее в таблице " "``[project.scripts]``." -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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()``." +"li``. Выполнение этой команды эквивалентно выполнению команды ``import sys; " +"from spam import main_cli; sys.exit(main_cli())``." -#: ../source/guides/writing-pyproject-toml.rst:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -11749,7 +13061,7 @@ msgstr "" "терминал. Чтобы этого не происходило, используйте таблицу ``[project.gui-" "scripts]`` вместо ``[project.scripts]``." -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 msgid "" "In that case, launching your script from the command line will give back " "control immediately, leaving the script to run in the background." @@ -11757,7 +13069,7 @@ msgstr "" "В этом случае запуск скрипта из командной строки сразу же вернет управление, " "оставив скрипт работать в фоновом режиме." -#: ../source/guides/writing-pyproject-toml.rst:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." @@ -11765,16 +13077,16 @@ msgstr "" "Разница между ``[project.scripts]`` и ``[project.gui-scripts]`` актуальна " "только для Windows." -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "О вашем проекте" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "``авторы``/ ``майнтейнеры``" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 msgid "" "Both of these fields contain lists of people identified by a name and/or an " "email address." @@ -11782,13 +13094,13 @@ msgstr "" "Оба эти поля содержат списки людей, идентифицированных по имени и/или адресу " "электронной почты." -#: ../source/guides/writing-pyproject-toml.rst:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "``description``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 msgid "" "This should be a one-line description of your project, to show as the " "\"headline\" of your project page on PyPI (`example `_), and " @@ -11799,13 +13111,13 @@ msgstr "" "(`пример `_), а также в других местах, таких как списки " "результатов поиска (`пример `_)." -#: ../source/guides/writing-pyproject-toml.rst:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "``readme``" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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." @@ -11815,42 +13127,103 @@ msgstr "" "странице вашего проекта на PyPI. Обычно у вашего проекта есть файл ``README." "md`` или ``README.rst``, и вы просто помещаете его имя сюда." -#: ../source/guides/writing-pyproject-toml.rst:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "Формат README определяется автоматически по расширению:" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "``README.md`` → `GitHub-flavored Markdown `_," -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "``README.rst`` → ``reStructuredText `_ (без расширений Sphinx)." -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "Вы также можете указать формат в явном виде, например, так:" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "``лицензия``" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" +":pep:`639` (принят в августе 2024 года) изменил способ объявления поля " +"``лицензия``. Убедитесь, что предпочитаемый вами бэкенд сборки поддерживает :" +"pep:`639`, прежде чем пытаться применить новые рекомендации. По состоянию на " +"февраль 2025 года, :doc:`setuptools ` " +"и :ref:`flit ` пока не поддерживают :pep:`639`." + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr ":pep:`639` Лицензионная декларация" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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 "" +"Это действительное выражение лицензии :term:`SPDX `, " +"состоящее из одного или нескольких :term:`license identifiers `. Полный список лицензий доступен на странице `списка лицензий " +"SPDX `_. Поддерживаемая версия списка - 3.17 или любая " +"более поздняя совместимая." + +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 "" +"Если ваш проект лицензирован по лицензии, для которой не существует " +"идентификатора SPDX, вы можете создать собственный идентификатор в формате " +"``LicenseRef-[idstring]``. Пользовательские идентификаторы должны " +"соответствовать спецификации SPDX, `пункт 10.1 `_ версии 2.2 " +"или любой более поздней совместимой." + +#: ../source/guides/writing-pyproject-toml.rst:367 +msgid "Legacy license declaration" +msgstr "Декларация унаследованной лицензии" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" "Это может быть сделано в двух формах. Вы можете поместить лицензию в файл, " -"обычно ``LICENSE`` или ``LICENSE.txt``, и сослаться на этот файл здесь:" +"обычно :file:`LICENSE` или :file:`LICENSE.txt`, и сослаться на этот файл " +"здесь:" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "или вы можете написать название лицензии:" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -11860,18 +13233,95 @@ msgid "" msgstr "" "Если вы используете стандартную, хорошо известную лицензию, нет " "необходимости использовать это поле. Вместо этого следует использовать один " -"из : ссылка:`классификаторов`, начинающийся с ``Лицензия ::``. (Как правило, " +"из :ref:`classifiers`, начинающийся с ``License ::``. (Как правило, " "рекомендуется использовать стандартную, хорошо известную лицензию, как для " "того, чтобы избежать путаницы, так и потому, что некоторые организации " -"избегают программ, лицензия которых не утверждена)" +"избегают программ, лицензия которых не утверждена)." + +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "``лицензионные файлы``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" +"В :pep:`639` (принят в августе 2024 года) появилось поле ``license-files``. " +"Убедитесь, что ваш бэкенд сборки поддерживает :pep:`639`, прежде чем " +"объявлять это поле. По состоянию на февраль 2025 года, :doc:`setuptools " +"` и :ref:`flit ` пока не поддерживают :pep:`639`." + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "Шаблоны glob должны соответствовать спецификации:" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" +"Буквенно-цифровые символы, знаки подчеркивания (``_``), дефисы (``-``) и " +"точки (``.``) будут соответствовать дословно." + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" +"Специальные символы: ``*``, ``?``, ``**`` и диапазоны символов: [] " +"поддерживаются." + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "Разделителями путей должны быть символы прямой косой черты (``/``)." + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "Индикаторы родительских каталогов (``..``) не должны использоваться." + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "Каждый glob должен соответствовать хотя бы одному файлу." + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:350 +#: ../source/guides/writing-pyproject-toml.rst:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "``ключевые слова``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 msgid "" "This will help PyPI's search box to suggest your project when people search " "for these keywords." @@ -11879,13 +13329,13 @@ msgstr "" "Это поможет поисковой строке PyPI предлагать ваш проект при поиске по этим " "ключевым словам." -#: ../source/guides/writing-pyproject-toml.rst:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "`` классификаторы ``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." @@ -11893,7 +13343,7 @@ msgstr "" "Список классификаторов PyPI, которые применимы к вашему проекту. Проверьте " "`полный список возможностей `_." -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -11907,7 +13357,7 @@ msgstr "" "действительно ограничить, на каких версиях Python может быть установлен " "проект, используйте аргумент :ref:`requires-python`." -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 msgid "" "To prevent a package from being uploaded to PyPI, use the special " "``Private :: Do Not Upload`` classifier. PyPI will always reject packages " @@ -11917,13 +13367,13 @@ msgstr "" "классификатор ``Private :: Do Not Upload``. PyPI всегда будет отклонять " "пакеты с классификаторами, начинающимися с ``Private ::``." -#: ../source/guides/writing-pyproject-toml.rst:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "``urls``" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 msgid "" "A list of URLs associated with your project, displayed on the left sidebar " "of your PyPI project page." @@ -11931,56 +13381,64 @@ msgstr "" "Список URL-адресов, связанных с вашим проектом, отображаемый на левой " "боковой панели страницы проекта PyPI." -#: ../source/guides/writing-pyproject-toml.rst:412 +#: ../source/guides/writing-pyproject-toml.rst:486 msgid "" "See :ref:`well-known-labels` for a listing of labels that PyPI and other " "packaging tools are specifically aware of, and `PyPI's project metadata docs " "`_ for PyPI-specific " "URL processing." msgstr "" +"См. :ref:`well-known-labels` для списка меток, о которых PyPI и другие " +"инструменты упаковки знают, и `PyPI's project metadata docs `_ для обработки URL, специфичных " +"для PyPI." -#: ../source/guides/writing-pyproject-toml.rst:426 -#, 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\"``." +#: ../source/guides/writing-pyproject-toml.rst:500 msgid "" "Note that if the label contains spaces, it needs to be quoted, e.g., " "``Website = \"https://example.com\"`` but ``\"Official Website\" = \"https://" "example.com\"``." msgstr "" -"Обратите внимание, что если ключ содержит пробелы, его необходимо заключить " -"в кавычки, например, ``Website = \"https://example.com\"``, но " -"``\"Официальный сайт\" = \"https://example.com\"``." +"Обратите внимание, что если метка содержит пробелы, ее нужно заключить в " +"кавычки, например, ``Website = «https://example.com»``, но ``«Официальный " +"сайт» = «https://example.com»``." -#: ../source/guides/writing-pyproject-toml.rst:430 +#: ../source/guides/writing-pyproject-toml.rst:504 msgid "" "Users are advised to use :ref:`well-known-labels` for their project URLs " "where appropriate, since consumers of metadata (like package indices) can " "specialize their presentation." msgstr "" +"Пользователям рекомендуется использовать :ref:`well-known-labels` для URL-" +"адресов своих проектов, где это уместно, поскольку потребители метаданных " +"(например, индексов пакетов) могут специализировать их представление." -#: ../source/guides/writing-pyproject-toml.rst:434 +#: ../source/guides/writing-pyproject-toml.rst:508 msgid "" "For example in the following metadata, neither ``MyHomepage`` nor " "``\"Download Link\"`` is a well-known label, so they will be rendered " "verbatim:" msgstr "" +"Например, в следующих метаданных ни ``MyHomepage``, ни ``«Download Link»`` " +"не являются известными метками, поэтому они будут отображены дословно:" -#: ../source/guides/writing-pyproject-toml.rst:444 +#: ../source/guides/writing-pyproject-toml.rst:518 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 "" +"В то время как в этих метаданных ``HomePage`` и ``DOWNLOAD`` имеют " +"общеизвестные эквиваленты (``homepage`` и ``download``), и могут быть " +"представлены с учетом этой семантики (домашняя страница проекта и его " +"внешнее место загрузки, соответственно)." -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "Расширенные плагины" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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 " @@ -11990,17 +13448,17 @@ msgstr "" "можно привести Pytest_ и Pygments_. Чтобы создать такой плагин, нужно " "объявить его в подтаблице ``[project.entry-points]`` следующим образом:" -#: ../source/guides/writing-pyproject-toml.rst:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" "Дополнительную информацию см. в :ref:`Руководство по плагинам `." -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "Полный пример" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -12906,14 +14364,18 @@ msgid "" "or `pixi `_ systems. It is available for Windows, Mac and " "Linux systems." msgstr "" +"Conda - это система управления пакетами, зависимостями и окружением для " +"любого языка - Python, R, Ruby, C/C++, Fortran и других. Она написана на " +"языке Python и широко используется в сообществе научных вычислений на Python " +"благодаря поддержке непитоновских компилируемых библиотек и расширений. На " +"нем основан дистрибутив `Anaconda `__ " +"Python от Anaconda, Inc. Изначально он был ориентирован на научное " +"сообщество, но также может использоваться самостоятельно или вместе с " +"системами :doc:`miniconda `, `miniforge `_ или `pixi `_. Он доступен для " +"систем Windows, Mac и Linux." #: ../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, " @@ -12921,9 +14383,9 @@ msgid "" "binary code." msgstr "" "Conda является совершенно отдельным инструментом от :ref:`pip`, virtualenv и " -"wheel, но предоставляет многие из их объединенных возможностей в плане " -"управления пакетами, виртуальным окружением и развертыванием бинарных " -"расширений." +"wheel, но предоставляет многие из их объединенных возможностей, таких как " +"управление пакетами, управление виртуальным окружением и развертывание " +"бинарных расширений и другого бинарного кода." #: ../source/key_projects.rst:420 msgid "" @@ -12935,19 +14397,15 @@ msgid "" "are a wide variety of packages from the community supported `conda-forge " "project `__" msgstr "" +"Conda не устанавливает пакеты из PyPI - она может управлять только пакетами, " +"созданными специально для conda, которые могут быть доступны на «канале " +"conda», например, размещенном на `anaconda.org `__, " +"или на локальном (например, интранет) сервере пакетов. В дополнение к " +"каналам «по умолчанию», управляемым `Anaconda, Inc. `__, существует широкий спектр пакетов из поддерживаемого сообществом " +"проекта `conda-forge `__" #: ../source/key_projects.rst:426 -#, 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 " @@ -12956,16 +14414,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` может быть " -"установлен и работать бок о бок с conda для управления :term:`distributions " -"` из PyPI. Кроме того, `conda skeleton `__ - это инструмент для того, чтобы сделать пакеты Python " -"устанавливаемыми conda, предварительно получив их из PyPI и изменив их " -"метаданные." +"Обратите внимание, что :ref:`pip` может быть установлен и работать бок о бок " +"с conda для управления :term:`distributions ` из PyPI. " +"Также можно собирать пакеты conda из исходных пакетов Python с помощью таких " +"инструментов, как `conda skeleton `__: " +"инструмент для автоматического создания пакетов conda из пакетов Python, " +"доступных на PyPI." #: ../source/key_projects.rst:435 msgid "devpi" @@ -15852,15 +17307,19 @@ msgstr "Содержимое файлов" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"The contents of a wheel file, where {distribution} is replaced with the :ref:" +"`normalized name ` of the package, e.g. ``beaglevote`` " +"and {version} is replaced with its :ref:`normalized version `, e.g. ``1.0.0``, (with dash/``-`` characters " +"replaced with underscore/``_`` characters in both fields) consist of:" msgstr "" -"Содержимое файла wheel, в котором {distribution} заменяется именем пакета, " -"например ``beaglevote``, а {version} заменяется его версией, например " -"``1.0.0``, состоит из:" +"Содержимое файла wheel, где {distribution} заменено на :ref:`нормализованное " +"название ` пакета, например ``beaglevote``, а {version} " +"заменено на его :ref:`нормализованную версию `, например ``1.0.0``, (с символами тире/``-`` замененными на " +"символы подчеркивания/``_`` в обоих полях) состоит из:" -#: ../source/specifications/binary-distribution-format.rst:181 +#: ../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 " @@ -15870,11 +17329,17 @@ msgstr "" "``purelib`` или ``platlib``, как указано в ``WHEEL``. ``purelib`` и " "``platlib`` обычно являются ``сайт-пакетами``." -#: ../source/specifications/binary-distribution-format.rst:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "``{distribution}-{version}.dist-info/`` содержит метаданные." -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../source/specifications/binary-distribution-format.rst:188 +msgid "" +":file:`{distribution}-{version}.dist-info/licenses/` contains license files." +msgstr "" +":file:`{distribution}-{version}.dist-info/licenses/` содержит файлы лицензий." + +#: ../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 " @@ -15886,12 +17351,7 @@ msgstr "" "является индексом в словаре путей установки (например, ``data``, ``cripts``, " "``headers``, ``purelib``, ``platlib``)." -#: ../source/specifications/binary-distribution-format.rst:189 -#, 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." +#: ../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`` " @@ -15900,9 +17360,10 @@ msgid "" msgstr "" "Python-скрипты должны находиться в ``scripts` и начинаться с ``b'#!python``, " "чтобы во время установки можно было сгенерировать обертку скрипта и " -"переписать ``#!python``. Они могут иметь любое расширение или не иметь его." +"переписать ``#!python``. Они могут иметь любое расширение или не иметь " +"его. Каталог ``scripts`` может содержать только обычные файлы." -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../source/specifications/binary-distribution-format.rst:197 msgid "" "``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " "greater format metadata." @@ -15910,7 +17371,7 @@ msgstr "" "``{distribution}-{version}.dist-info/METADATA`` - это метаданные формата " "Metadata версии 1.1 или выше." -#: ../source/specifications/binary-distribution-format.rst:195 +#: ../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::" @@ -15918,18 +17379,18 @@ msgstr "" "``{distribution}-{version}.dist-info/WHEEL`` - это метаданные о самом архиве " "в том же базовом формате key: value::" -#: ../source/specifications/binary-distribution-format.rst:205 +#: ../source/specifications/binary-distribution-format.rst:209 msgid "``Wheel-Version`` is the version number of the Wheel specification." msgstr "``Wheel-Version`` - это номер версии спецификации Wheel." -#: ../source/specifications/binary-distribution-format.rst:206 +#: ../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:208 +#: ../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 " @@ -15939,7 +17400,7 @@ msgstr "" "должен быть установлен в purelib; в противном случае корень должен быть " "установлен в platlib." -#: ../source/specifications/binary-distribution-format.rst:211 +#: ../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``." @@ -15947,13 +17408,13 @@ msgstr "" "``Tag`` - это расширенные теги совместимости колеса; в примере имя файла " "будет содержать ``py2.py3-none-any``." -#: ../source/specifications/binary-distribution-format.rst:213 +#: ../source/specifications/binary-distribution-format.rst:217 msgid "" "``Build`` is the build number and is omitted if there is no build number." msgstr "" "``Build`` - это номер сборки и опускается, если номер сборки отсутствует." -#: ../source/specifications/binary-distribution-format.rst:214 +#: ../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 " @@ -15963,7 +17424,7 @@ msgstr "" "чем поддерживаемая ею версия, и должна выходить из строя, если Wheel-Version " "имеет большую мажорную версию, чем поддерживаемая ею версия." -#: ../source/specifications/binary-distribution-format.rst:217 +#: ../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." @@ -15971,11 +17432,11 @@ msgstr "" "Wheel, будучи форматом установки, предназначенным для работы с несколькими " "версиями Python, обычно не включает файлы .pyc." -#: ../source/specifications/binary-distribution-format.rst:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "Колесо не содержит setup.py или setup.cfg." -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -15987,12 +17448,12 @@ msgstr "" "супернабор функций, предоставляемых существующими бинарными форматами " "wininst и egg." -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../source/specifications/binary-distribution-format.rst:232 #: ../source/specifications/recording-installed-packages.rst:23 msgid "The .dist-info directory" msgstr "Директория .dist-info" -#: ../source/specifications/binary-distribution-format.rst:230 +#: ../source/specifications/binary-distribution-format.rst:234 msgid "" "Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " "RECORD." @@ -16000,7 +17461,7 @@ msgstr "" "Каталоги Wheel .dist-info включают в себя как минимум METADATA, WHEEL и " "RECORD." -#: ../source/specifications/binary-distribution-format.rst:232 +#: ../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." @@ -16008,11 +17469,11 @@ msgstr "" "METADATA - это метаданные пакета, в том же формате, что и PKG-INFO, которые " "находятся в корне sdists." -#: ../source/specifications/binary-distribution-format.rst:234 +#: ../source/specifications/binary-distribution-format.rst:238 msgid "WHEEL is the wheel metadata specific to a build of the package." msgstr "WHEEL - это метаданные колеса, специфичные для сборки пакета." -#: ../source/specifications/binary-distribution-format.rst:235 +#: ../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 " @@ -16027,17 +17488,17 @@ msgstr "" "подписанные файлы колеса полагаются на надежные хэши в RECORD для " "подтверждения целостности архива." -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../source/specifications/binary-distribution-format.rst:245 msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." msgstr "В архив не включены файлы PEP 376 \"INSTALLER\" и \"REQUESTED\"." -#: ../source/specifications/binary-distribution-format.rst:242 +#: ../source/specifications/binary-distribution-format.rst:246 msgid "" "RECORD.jws is used for digital signatures. It is not mentioned in RECORD." msgstr "" "RECORD.jws используется для цифровых подписей. Он не упоминается в RECORD." -#: ../source/specifications/binary-distribution-format.rst:244 +#: ../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." @@ -16046,7 +17507,7 @@ msgstr "" "использовать подписи S/MIME для защиты своих колесных файлов. Она не " "упоминается в RECORD." -#: ../source/specifications/binary-distribution-format.rst:247 +#: ../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 " @@ -16058,11 +17519,29 @@ msgstr "" "неудачей, если какой-либо файл в архиве не упомянут и не захеширован " "правильно в RECORD." -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "Каталог :file:`.dist-info/licenses/`" + +#: ../source/specifications/binary-distribution-format.rst:260 +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 "" +"Если версия метаданных 2.4 или выше и указано одно или несколько полей " +"``License-File``, каталог :file:`.dist-info/` ДОЛЖЕН содержать подкаталог :" +"file:`licenses/`, который ДОЛЖЕН содержать файлы, перечисленные в полях " +"``License-File`` в файле :file:`METADATA`` по их соответствующим путям " +"относительно каталога :file:`licenses/`." + +#: ../source/specifications/binary-distribution-format.rst:268 msgid "The .data directory" msgstr "Директория .data" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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/ " @@ -16072,7 +17551,7 @@ msgstr "" "помещаются в каталог .data, названный так же, как и каталог .dist-info, но с " "расширением .data/::" -#: ../source/specifications/binary-distribution-format.rst:264 +#: ../source/specifications/binary-distribution-format.rst:278 msgid "" "The .data directory contains subdirectories with the scripts, headers, " "documentation and so forth from the distribution. During installation the " @@ -16082,11 +17561,11 @@ msgstr "" "и прочим из дистрибутива. Во время установки содержимое этих подкаталогов " "переносится на путь назначения." -#: ../source/specifications/binary-distribution-format.rst:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "Подписанные файлы колес" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -16103,7 +17582,7 @@ msgstr "" "файлы, такие как файлы .pyc, но не RECORD, который не может содержать свой " "собственный хеш. Например::" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -16115,7 +17594,7 @@ msgstr "" "остальные файлы в архиве должны иметь правильный хэш в RECORD, иначе " "установка завершится неудачей." -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -16127,11 +17606,11 @@ msgstr "" "примыкающем к RECORD. JWS используется для подписи RECORD путем включения " "SHA-256 хэша RECORD в качестве полезной нагрузки JSON подписи:" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "(Хеш-значение имеет тот же формат, что и в RECORD)" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." @@ -16139,7 +17618,7 @@ msgstr "" "Если используется файл RECORD.p7s, он должен содержать отделенную подпись " "RECORD в формате S/MIME." -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -16151,15 +17630,15 @@ msgstr "" "установки сверяет хэши файлов с RECORD, отдельному средству проверки подписи " "достаточно убедиться, что RECORD соответствует подписи." -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "Смотрите" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "https://datatracker.ietf.org/doc/html/rfc7515" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" @@ -16167,27 +17646,27 @@ msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "https://datatracker.ietf.org/doc/html/rfc7517" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "ЧаВо" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" "Wheel определяет каталог .data. Должен ли я поместить туда все свои данные?" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -16203,11 +17682,11 @@ msgstr "" "если *эти* файлы обычно не будут распространяться в директории *wheel'а* ``." "data``." -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "Почему колесо включает в себя прикрепленные подписи?" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -16220,11 +17699,11 @@ msgstr "" "файлы, архив можно перекомпрессировать, не аннулируя подпись, или проверить " "отдельные файлы без необходимости загружать весь архив." -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "Почему колесо разрешает подписи JWS?" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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 " @@ -16234,11 +17713,11 @@ msgstr "" "реализации, что также является одной из основных целей дизайна Wheel. JWS " "представляет собой полезную и лаконичную реализацию на чистом Python." -#: ../source/specifications/binary-distribution-format.rst:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "Почему wheel также позволяет использовать подписи S/MIME?" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 msgid "" "S/MIME signatures are allowed for users who need or want to use existing " "public key infrastructure with wheel." @@ -16246,7 +17725,7 @@ msgstr "" "Подписи S/MIME разрешены для пользователей, которым необходимо или хочется " "использовать существующую инфраструктуру открытых ключей с помощью колеса." -#: ../source/specifications/binary-distribution-format.rst:354 +#: ../source/specifications/binary-distribution-format.rst:368 msgid "" "Signed packages are only a basic building block in a secure package update " "system. Wheel only provides the building block." @@ -16254,11 +17733,11 @@ msgstr "" "Подписанные пакеты являются лишь базовым элементом системы безопасного " "обновления пакетов. Wheel предоставляет только строительный блок." -#: ../source/specifications/binary-distribution-format.rst:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "Как обстоят дела с \"purelib\" и \"platlib\"?" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -16270,7 +17749,7 @@ msgstr "" "usr/lib/pythonX.Y/site-packages', а платформозависимые пакеты - в '/usr/" "lib64/pythonX.Y/site-packages'." -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -16282,7 +17761,7 @@ msgstr "" "теми же файлами в корне, и законно иметь файлы как в категории \"purelib\", " "так и в категории \"platlib\"." -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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 " @@ -16293,11 +17772,11 @@ msgstr "" "должны находиться в корне с соответствующей настройкой для \"Root-is-" "purelib\"." -#: ../source/specifications/binary-distribution-format.rst:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "Можно ли импортировать код Python непосредственно из файла wheel?" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -16311,7 +17790,7 @@ msgstr "" "Однако, хотя такое поведение является естественным следствием дизайна " "формата, полагаться на него, как правило, не рекомендуется." -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -16330,7 +17809,7 @@ msgstr "" "безопасности, или полная интеграция со стандартным механизмом сборки для C-" "расширений путем публикации заголовочных файлов в соответствующем месте)." -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -16363,7 +17842,7 @@ msgstr "" "взаимодействие с внешними компонентами все равно может потребовать наличия " "реального файла на диске." -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -16377,31 +17856,31 @@ msgstr "" "имейте в виду, что многие проекты потребуют воспроизвести сбой с полностью " "установленным пакетом, прежде чем принять его за настоящую ошибку." -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "История" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "Февраль 2013 г: Эта спецификация была одобрена через :pep:`427`." -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 msgid "" "February 2021: The rules on escaping in wheel filenames were revised, to " "bring them into line with what popular tools actually do." @@ -16410,19 +17889,40 @@ msgstr "" "пересмотрены, чтобы привести их в соответствие с тем, что на самом деле " "делают популярные инструменты." -#: ../source/specifications/binary-distribution-format.rst:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " "symlinks or subdirectories in this folder is not formally defined, and hence " "may vary between tools)." msgstr "" +"Декабрь 2024: Уточнено, что папка ``scripts`` должна содержать только " +"обычные файлы (ожидаемое поведение инструментов потребления при встрече с " +"симлинками или подкаталогами в этой папке формально не определено, и поэтому " +"может отличаться для разных инструментов)." + +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" +"Декабрь 2024 года: Каталог :file:`.dist-info/licenses/` был указан через :" +"pep:`639`." + +#: ../source/specifications/binary-distribution-format.rst:446 +msgid "" +"January 2025: Clarified that name and version needs to be normalized for ``." +"dist-info`` and ``.data`` directories." +msgstr "" +"Январь 2025 года: Уточнено, что имя и версия должны быть нормализованы для " +"директорий ``.dist-info`` и ``.data``." -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:451 msgid "Appendix" msgstr "Приложение" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "Пример реализации urlsafe-base64-nopad::" @@ -16516,16 +18016,12 @@ msgid "Metadata-Version" msgstr "Metadata-Version" #: ../source/specifications/core-metadata.rst:50 -#, 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\"." 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»." #: ../source/specifications/core-metadata.rst:53 msgid "" @@ -16570,8 +18066,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "Пример::" @@ -16706,8 +18202,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "Примеры::" @@ -17048,10 +18544,8 @@ msgid "License" msgstr "Лицензия" #: ../source/specifications/core-metadata.rst:437 -#, fuzzy -#| msgid "in favour of ``Requires-Dist``" msgid "in favour of ``License-Expression``." -msgstr "в пользу ``Requires-Dist``" +msgstr "в пользу ``лицензии-выражения``." #: ../source/specifications/core-metadata.rst:441 msgid "" @@ -17060,6 +18554,11 @@ msgid "" "``License`` and PyPI will reject uploads. See `PEP 639 `__." msgstr "" +"Начиная с версии Metadata 2.4, ``License`` и ``License-Expression`` являются " +"взаимоисключающими. Если указаны оба значения, инструменты, анализирующие " +"метаданные, будут игнорировать ``Лицензию``, а PyPI будет отклонять " +"загрузки. Смотрите `PEP 639 `__." #: ../source/specifications/core-metadata.rst:446 msgid "" @@ -17079,7 +18578,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:466 msgid "License-Expression" -msgstr "" +msgstr "License-Expression" #: ../source/specifications/core-metadata.rst:470 msgid "" @@ -17087,12 +18586,13 @@ msgid "" "org/pep-0639/#term-license-expression>`__ as `defined in PEP 639 `__." msgstr "" +"Текстовая строка, являющаяся действительным выражением SPDX-лицензии " +"`__, как " +"определено в PEP 639 `__." #: ../source/specifications/core-metadata.rst:489 -#, fuzzy -#| msgid "Requires-Dist (multiple use)" msgid "License-File (multiple use)" -msgstr "Requires-Dist (можно использовать несколько раз)" +msgstr "Лицензия-файл (многократное использование)" #: ../source/specifications/core-metadata.rst:493 msgid "" @@ -17100,6 +18600,9 @@ msgid "" "The path is located within the project source tree, relative to the project " "root directory. For details see :pep:`639`." msgstr "" +"Каждая запись представляет собой строковое представление пути к файлу, " +"связанному с лицензией. Путь находится в дереве исходных текстов проекта, " +"относительно корневого каталога проекта. Подробности см. в :pep:`639`." #: ../source/specifications/core-metadata.rst:510 msgid "Classifier (multiple use)" @@ -17123,6 +18626,9 @@ msgid "" "``License-Expression`` instead. See `PEP 639 `_." msgstr "" +"Использование классификаторов ``License ::`` устарело начиная с версии " +"Metadata 2.4, вместо них используйте ``License-Expression``. См. `PEP 639 " +"`_." #: ../source/specifications/core-metadata.rst:524 #: ../source/specifications/core-metadata.rst:614 @@ -17311,6 +18817,10 @@ msgid "" "known\" labels, which can then be given special presentations when being " "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" +"Начиная с :pep:`753`, потребители метаданных проекта (такие как Python " +"Package Index) могут использовать стандартный процесс нормализации для " +"обнаружения «известных» меток, которые затем могут быть представлены в " +"особом виде при выводе на экран. См. :ref:`well-known-project-urls`." #: ../source/specifications/core-metadata.rst:656 msgid "Provides-Extra (multiple use)" @@ -17535,50 +19045,60 @@ msgstr "" msgid "Deprecated Fields" msgstr "Утраченные поля" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "Home-page" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" +"Согласно :pep:`753`, вместо этого используйте :ref:`core-metadata-project-" +"url`." -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "Строка, содержащая URL-адрес главной страницы дистрибутива." -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "Download-URL" -#: ../source/specifications/core-metadata.rst:829 -#, 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:834 msgid "" "A string containing the URL from which this version of the distribution can " "be downloaded. (This means that the URL can't be something like \"``.../" "BeagleVote-latest.tgz``\", but instead must be \"``.../BeagleVote-0.45." "tgz``\".)" msgstr "" -"Строка, содержащая URL, по которому можно загрузить данную версию " -"дистрибутива. (Это означает, что URL не может быть чем-то вроде \".../" -"BeagleVote-latest.tgz\", а вместо этого должен быть \".../BeagleVote-0.45." -"tgz\".)" +"Строка, содержащая URL, с которого можно загрузить данную версию " +"дистрибутива. (Это означает, что URL не может быть чем-то вроде «``.../" +"BeagleVote-latest.tgz``», а вместо этого должен быть «``.../BeagleVote-0.45." +"tgz``».)" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "Требуется" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "в пользу ``Requires-Dist``" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." @@ -17586,7 +19106,7 @@ msgstr "" "Каждая запись содержит строку, описывающую другой модуль или пакет, " "необходимый для данного пакета." -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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 " @@ -17596,7 +19116,7 @@ msgstr "" "используемого с помощью оператора ``импорта``, за которым в круглых скобках " "по желанию следует объявление версии." -#: ../source/specifications/core-metadata.rst:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -17614,7 +19134,7 @@ msgstr "" "конце, состоящим из буквы 'a' или 'b', за которой следует число. Примеры " "номеров версий: \"1.0\", \"2.3a2\", \"1.3.99\"," -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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." @@ -17622,7 +19142,7 @@ msgstr "" "Можно указать любое количество условных операторов, например, строка " "\">1.0, !=1.3.4, <2.0\" является законным объявлением версии." -#: ../source/specifications/core-metadata.rst:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." @@ -17630,7 +19150,7 @@ msgstr "" "Возможными строками требований являются все следующие: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 msgid "" "There’s no canonical list of what strings should be used; the Python " "community is left to choose its own standards." @@ -17638,15 +19158,15 @@ msgstr "" "Не существует канонического списка того, какие строки должны использоваться; " "сообщество Python оставляет за собой право выбирать собственные стандарты." -#: ../source/specifications/core-metadata.rst:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "Предоставляет" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "в пользу ``Provides-Dist``" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -17660,15 +19180,15 @@ msgstr "" "версии (без оператора сравнения); номер версии пакета будет подразумеваться, " "если он не указан." -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "Обзоры" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "в пользу ``Obsoletes-Dist``" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 msgid "" "Each entry contains a string describing a package or module that this " "package renders obsolete, meaning that the two packages should not be " @@ -17678,7 +19198,7 @@ msgstr "" "пакет делает устаревшим, что означает, что эти два пакета не должны быть " "установлены одновременно. Могут быть предоставлены объявления версий." -#: ../source/specifications/core-metadata.rst:907 +#: ../source/specifications/core-metadata.rst:912 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 " @@ -17688,81 +19208,73 @@ msgstr "" "например, Gorgon 2.3 переходит в Torqued Python 1.0. При установке Torqued " "Python пакет Gorgon должен быть удален." -#: ../source/specifications/core-metadata.rst:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "Март 2001: Core metadata 1.0 был одобрен через :pep:`241`." -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "Апрель 2003 года: Core metadata 1.1 был одобрен через :pep:`314`:" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "Февраль 2010 г: Core metadata 1.2 был одобрен через :pep:`345`." -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "Февраль 2018 г: Core metadata 2.1 был одобрен через :pep:`566`." -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "Добавлены ``Description-Content-Type`` и ``Provides-Extra``." -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "Добавлен метод canonical для преобразования метаданных в JSON." -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "Ограничение грамматики поля ``Имя``." -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "Октябрь 2020 года: Core metadata 2.2 был одобрен через :pep:`643`." -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "Добавлено поле ``Динамика``." -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "Март 2022: Core metadata 2.3 был одобрен через :pep:`685`." -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "Ограниченные дополнительные имена, подлежащие нормализации." -#: ../source/specifications/core-metadata.rst:936 -#, fuzzy -#| msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." -msgstr "Октябрь 2020 года: Core metadata 2.2 был одобрен через :pep:`643`." +msgstr "Август 2024 года: Core metadata 2.4 был одобрен через :pep:`639`." -#: ../source/specifications/core-metadata.rst:938 -#, fuzzy -#| msgid "Added the ``Dynamic`` field." +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." -msgstr "Добавлено поле ``Динамика``." +msgstr "Добавлено поле ``Лицензия-выражение``." -#: ../source/specifications/core-metadata.rst:939 -#, fuzzy -#| msgid "Added the ``Dynamic`` field." +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." -msgstr "Добавлено поле ``Динамика``." +msgstr "Добавлено поле ``Лицензионный файл``." -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "Разметка reStructuredText: https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 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 "" @@ -17770,6 +19282,9 @@ msgid "" "package requirements in ``pyproject.toml`` files such that they are not " "included in project metadata when it is built." msgstr "" +"Эта спецификация определяет Dependency Groups, механизм для хранения " +"требований к пакетам в файлах ``pyproject.toml`` таким образом, чтобы они не " +"включались в метаданные проекта при его сборке." #: ../source/specifications/dependency-groups.rst:11 msgid "" @@ -17777,6 +19292,10 @@ msgid "" "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 "" @@ -17784,6 +19303,9 @@ msgid "" "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" +"По сути, группы зависимостей следует рассматривать как стандартизированное " +"подмножество возможностей файлов ``requirements.txt`` (которые являются " +"специфическими для ``pip``)." #: ../source/specifications/dependency-groups.rst:20 #: ../source/specifications/dependency-specifiers.rst:26 @@ -17796,15 +19318,15 @@ msgstr "Спецификация" #: ../source/specifications/dependency-groups.rst:25 msgid "This is a simple table which shows a ``test`` group::" -msgstr "" +msgstr "Это простая таблица, которая показывает группу ``тест``::" #: ../source/specifications/dependency-groups.rst:30 msgid "and a similar table which defines ``test`` and ``coverage`` groups::" -msgstr "" +msgstr "и аналогичная таблица, определяющая группы ``тестов`` и ``покрытий``::" #: ../source/specifications/dependency-groups.rst:37 msgid "The ``[dependency-groups]`` Table" -msgstr "" +msgstr "Таблица ``[dependency-groups]``" #: ../source/specifications/dependency-groups.rst:39 msgid "" @@ -17813,6 +19335,10 @@ msgid "" "number of user-defined keys, each of which has, as its value, a list of " "requirements." msgstr "" +"Группы зависимостей определяются в виде таблицы в файле ``pyproject.toml`` с " +"именем ``dependency-groups``. Таблица ``dependency-groups`` содержит " +"произвольное количество определяемых пользователем ключей, каждый из которых " +"имеет в качестве значения список требований." #: ../source/specifications/dependency-groups.rst:44 msgid "" @@ -17821,6 +19347,10 @@ msgid "" "Dependency Groups MUST :ref:`normalize ` these names " "before comparisons." msgstr "" +"Ключи ``[dependency-groups]``, иногда также называемые «именами групп», " +"должны быть :ref:`valid non-normalized names `. Инструменты, " +"работающие с группами зависимостей, ДОЛЖНЫ :ref:`normalize ` эти имена перед сравнением." #: ../source/specifications/dependency-groups.rst:49 msgid "" @@ -17828,6 +19358,9 @@ msgid "" "and if duplicate names are detected after normalization, tools SHOULD emit " "an error." msgstr "" +"Инструменты ДОЛЖНЫ предпочитать представлять пользователям оригинальное, " +"ненормализованное имя, а если после нормализации обнаруживаются дубликаты " +"имен, инструменты ДОЛЖНЫ выдавать ошибку." #: ../source/specifications/dependency-groups.rst:53 msgid "" @@ -17836,24 +19369,30 @@ msgid "" "Strings must be valid :ref:`dependency specifiers `, " "and tables must be valid Dependency Group Includes." msgstr "" +"Списки требований, значения в ``[dependency-groups]``, могут содержать " +"строки, таблицы (``dict`` в Python) или смесь строк и таблиц. Строки должны " +"быть валидными :ref:`dependency specifiers `, а " +"таблицы должны быть валидными Dependency Group Includes." #: ../source/specifications/dependency-groups.rst:59 -#, fuzzy -#| msgid "Dependency Overrides" msgid "Dependency Group Include" -msgstr "Переопределение зависимостей" +msgstr "Группа зависимости Включает" #: ../source/specifications/dependency-groups.rst:61 msgid "" "A Dependency Group Include includes another Dependency Group in the current " "group." msgstr "" +"Группа зависимостей Include включает другую группу зависимостей в текущую " +"группу." #: ../source/specifications/dependency-groups.rst:64 msgid "" "An include is a table with exactly one key, ``\"include-group\"``, whose " "value is a string, the name of another Dependency Group." msgstr "" +"Включенная группа - это таблица с одним ключом, ``«include-group»``, " +"значением которого является строка, имя другой группы зависимостей." #: ../source/specifications/dependency-groups.rst:67 msgid "" @@ -17864,6 +19403,12 @@ msgid "" "evaluate to ``[\"c\", \"a\", \"b\", \"d\"]`` when Dependency Group Includes " "are expanded." msgstr "" +"Включения определяются как точно эквивалентные содержимому именованной " +"группы зависимостей, вставленные в текущую группу в месте расположения " +"включения. Например, если ``foo = [«a», «b»]`` - это одна группа, а ``bar = " +"[«c», {include-group = «foo»}, «d»]`` - другая, то ``bar`` должен " +"оцениваться как ``[«c», «a», „b“, «d»]`` при раскрытии Dependency Group " +"Includes." #: ../source/specifications/dependency-groups.rst:73 msgid "" @@ -17871,6 +19416,9 @@ 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:90 msgid "" @@ -17879,6 +19427,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:95 msgid "" @@ -17887,12 +19439,14 @@ msgid "" "Dependency Group Includes MUST NOT include cycles, and tools SHOULD report " "an error if they detect a cycle." msgstr "" +"Dependency Group Includes может включать группы, содержащие Dependency Group " +"Includes, в этом случае эти включения также должны быть расширены. " +"Dependency Group Includes НЕ ДОЛЖНЫ включать циклы, и инструменты ДОЛЖНЫ " +"сообщать об ошибке, если они обнаруживают цикл." #: ../source/specifications/dependency-groups.rst:100 -#, fuzzy -#| msgid "Package upload" msgid "Package Building" -msgstr "Загрузка пакетов" +msgstr "Создание пакета" #: ../source/specifications/dependency-groups.rst:102 msgid "" @@ -17901,6 +19455,10 @@ msgid "" "``METADATA`` files should not include referenceable fields containing " "Dependency Groups." msgstr "" +"Бэкенды сборки НЕ ДОЛЖНЫ включать данные о группах зависимостей в собранные " +"дистрибутивы в качестве метаданных пакета. Это означает, что файлы sdist " +"``PKG-INFO`` и wheel ``METADATA`` не должны содержать ссылаемые поля, " +"содержащие Dependency Groups." #: ../source/specifications/dependency-groups.rst:106 msgid "" @@ -17909,12 +19467,14 @@ msgid "" "``[dependency-groups]``. However, the table's contents are not part of a " "built package's interfaces." msgstr "" +"Однако использование групп зависимостей при оценке динамических метаданных " +"допустимо, и файлы ``pyproject.toml``, включенные в sdists, по-прежнему " +"будут содержать ``[dependency-groups]``. Однако содержимое таблицы не " +"является частью интерфейсов собранного пакета." #: ../source/specifications/dependency-groups.rst:112 -#, fuzzy -#| msgid "Installing \"Extras\"" msgid "Installing Dependency Groups & Extras" -msgstr "Установка \"Дополнений\"" +msgstr "Установка групп зависимостей и дополнительных функций" #: ../source/specifications/dependency-groups.rst:114 msgid "" @@ -17922,6 +19482,9 @@ msgid "" "referring to Dependency Groups. Tools are expected to provide dedicated " "interfaces for this purpose." msgstr "" +"Не существует синтаксиса или определенного спецификацией интерфейса для " +"установки или обращения к группам зависимостей. Ожидается, что инструменты " +"будут предоставлять специальные интерфейсы для этой цели." #: ../source/specifications/dependency-groups.rst:118 msgid "" @@ -17932,12 +19495,17 @@ msgid "" "Dependency Groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" +"Инструменты МОГУТ предоставлять те же или подобные интерфейсы для " +"взаимодействия с группами зависимостей, что и для управления дополнениями. " +"Авторам инструментов рекомендуется обратить внимание на то, что спецификация " +"не запрещает иметь экстра, имя которого совпадает с группой зависимостей. " +"Отдельно пользователям рекомендуется избегать создания групп зависимостей, " +"имена которых совпадают с именами дополнений, а инструменты МОГУТ " +"рассматривать такое совпадение как ошибку." #: ../source/specifications/dependency-groups.rst:126 -#, fuzzy -#| msgid "Backwards Compatibility" msgid "Validation and Compatibility" -msgstr "Обратная совместимость" +msgstr "Проверка и совместимость" #: ../source/specifications/dependency-groups.rst:128 msgid "" @@ -17946,18 +19514,26 @@ msgid "" "possibility of future extensions to the specification, so that they do not " "unnecessarily emit errors or warnings." msgstr "" +"Инструменты, поддерживающие группы зависимостей, могут захотеть проверять " +"данные перед их использованием. При реализации такой проверки авторы должны " +"учитывать возможность будущих расширений спецификации, чтобы не выдавать " +"ненужных ошибок или предупреждений." #: ../source/specifications/dependency-groups.rst:133 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " "Dependency Groups." msgstr "" +"Инструменты ДОЛЖНЫ ошибаться при оценке или обработке нераспознанных данных " +"в группах зависимостей." #: ../source/specifications/dependency-groups.rst:136 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:139 msgid "" @@ -17965,6 +19541,9 @@ 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:150 msgid "" @@ -17972,6 +19551,9 @@ msgid "" "Linters and validators are an example, as their purpose is to validate the " "contents of all Dependency Groups." msgstr "" +"Известно несколько случаев, когда инструменты имеют все основания быть более " +"строгими. Примером могут служить линеры и валидаторы, поскольку их задача - " +"проверять содержимое всех групп зависимостей." #: ../source/specifications/dependency-groups.rst:155 #: ../source/specifications/inline-script-metadata.rst:123 @@ -17984,12 +19566,13 @@ msgid "" "Group to stdout, newline delimited. The output is therefore valid " "``requirements.txt`` data." msgstr "" +"Следующая реализация справочника выводит содержимое группы зависимостей в " +"stdout с разграничением по новой строке. Таким образом, на выходе получаются " +"корректные данные ``requirements.txt``." #: ../source/specifications/dependency-groups.rst:250 -#, fuzzy -#| msgid "November 2015: This specification was approved through :pep:`508`." msgid "October 2024: This specification was approved through :pep:`735`." -msgstr "Ноябрь 2015 г: Эта спецификация была одобрена через :pep:`508`." +msgstr "Октябрь 2024 года: Эта спецификация была одобрена через :pep:`735`." #: ../source/specifications/dependency-specifiers.rst:7 msgid "Dependency specifiers" @@ -18150,11 +19733,11 @@ msgstr "" "необязательными и не имеют смыслового значения. Единственным исключением " "является определение конца требования URL." -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "Имена" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -18175,11 +19758,11 @@ msgstr "" "имени может произойти в будущем PEP для метаданных. Регекс (выполняется с re." "IGNORECASE) выглядит так::" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "Дополнительно" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -18191,7 +19774,7 @@ msgstr "" "объявлению дополнительных зависимостей дистрибутива, **когда** дополнение " "используется в спецификации зависимостей. Например::" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -18203,18 +19786,17 @@ msgstr "" "к установке requests, собственных зависимостей запросов, а также любых " "зависимостей, перечисленных в дополнении запросы \"безопасности\"." -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" "Если перечислено несколько дополнений, все зависимости объединяются вместе." -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "Версии" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -18232,11 +19814,11 @@ msgstr "" "скобки вокруг версии присутствуют для совместимости с :pep:`345`, но не " "должны генерироваться, а только приниматься." -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "Маркеры окружающей среды" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -18250,7 +19832,7 @@ msgstr "" "присутствует всегда. В более старых версиях Python он должен быть установлен " "как зависимость. Это можно выразить так::" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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." @@ -18258,7 +19840,7 @@ msgstr "" "Маркерное выражение оценивается либо в True, либо в False. Если оно имеет " "значение False, спецификация зависимости должна быть проигнорирована." -#: ../source/specifications/dependency-specifiers.rst:186 +#: ../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 " @@ -18272,7 +19854,7 @@ msgstr "" "документе исправлены некоторые проблемы, которые были замечены в " "конструкции, описанной в :pep:`426`." -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -18294,7 +19876,7 @@ msgstr "" "противном случае должна быть выдана ошибка. Например, следующие действия " "приведут к ошибкам::" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -18311,7 +19893,7 @@ msgstr "" "отличных от ASCII: все переменные времени выполнения, на которые мы " "ссылаемся, должны быть только ASCII." -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -18323,7 +19905,7 @@ msgstr "" "\"extra\", все значения определены во всех современных версиях Python - если " "значение не определено, это ошибка в реализации маркеров." -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 msgid "" "Unknown variables must raise an error rather than resulting in a comparison " "that evaluates to True or False." @@ -18331,7 +19913,7 @@ msgstr "" "Неизвестные переменные должны вызывать ошибку, а не приводить к сравнению, " "которое оценивается как True или False." -#: ../source/specifications/dependency-specifiers.rst:219 +#: ../source/specifications/dependency-specifiers.rst:227 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 " @@ -18341,7 +19923,7 @@ msgstr "" "Python, должны оцениваться как ``0`` для версий, и как пустая строка для " "всех остальных переменных." -#: ../source/specifications/dependency-specifiers.rst:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -18358,39 +19940,39 @@ msgstr "" "\"extra\" должна приводить к ошибке, как и все остальные неизвестные " "переменные." -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "Маркер" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "Эквивалент Python" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "Образцовые значения" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "``ос_название``" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr ":py: данные:`ос. название`" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "``posix``, ``java``" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "``системная платформа``" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr ":py: данные:`sys. платформа`" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" @@ -18398,63 +19980,64 @@ msgstr "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (обратите внимание, что " "\"linux\" - из Python3, а \"linux2\" - из Python2)" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "``платформа_машины``" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr ":py:func:`платформа.машина()`" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "``x86_64``" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "``платформа_python_имплементация``" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr ":py:func:`платформа.python_имплементация()`" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "``CPython``, ``Jython``" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "``платформа_выпуска``" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr ":py:func:`платформа. релиз()`" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "``платформа_системы``" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr ":py:func:`платформа.система()`" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "``Linux``, ``Windows``, ``Java``" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "``платформа_версия``" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr ":py:func:`платформа.версия()`" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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 " @@ -18464,68 +20047,67 @@ msgstr "" "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``" -#: ../source/specifications/dependency-specifiers.rst:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "``python_версия``" -#: ../source/specifications/dependency-specifiers.rst:261 -#, fuzzy +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "``'.'.join(platform.python_version_tuple()[:2])``" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "``3.4``, ``2.7``" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "``python_полная_версия``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr ":py:func:`платформа. python_версия()`" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "``3.4.0``, ``3.5.0b1``" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "``имя_реализации``" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr ":py: данные:`sys.имплементация. название `" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "``cpython``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "``Версия_реализации``" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "смотрите определение ниже" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "``экстра``" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" "Ошибка, за исключением случаев, когда она определена контекстом, " "интерпретирующим спецификацию." -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "``тест``" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" @@ -18533,7 +20115,7 @@ msgstr "" "Маркерная переменная ``имплементация_версия`` получена из :py: данные:`sys." "имплементация.версия `:" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." @@ -18541,23 +20123,23 @@ msgstr "" "Этот раздел маркеров окружения, первоначально определенный через :pep:`508`, " "заменяет раздел маркеров окружения в :pep:`345`." -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "Полная грамматика" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "Полная грамматика петрушки::" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "Тестовая программа - если грамматика находится в строке ``grammar``:" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "Ноябрь 2015 г: Эта спецификация была одобрена через :pep:`508`." -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -18570,7 +20152,7 @@ msgstr "" "Python с двузначными мажорными и минорными версиями (например, 3.10). " "[#future_versions]_" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " @@ -18580,7 +20162,7 @@ msgstr "" "запятые в конце, что соответствует поведению реализации Python, которая " "используется с конца 2022 года." -#: ../source/specifications/dependency-specifiers.rst:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" @@ -18588,11 +20170,11 @@ msgstr "" "pip, рекомендуемая программа установки пакетов Python (http://pip." "readthedocs.org/en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "Библиотека PEG Петрушка. (https://pypi.python.org/pypi/parsley/)" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -18629,7 +20211,7 @@ msgstr "" "прямую URL-ссылку (включая VCS URL)." #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -18803,7 +20385,7 @@ msgstr "" #: ../source/specifications/direct-url-data-structure.rst:35 msgid "Security Considerations" -msgstr "" +msgstr "Соображения безопасности" #: ../source/specifications/direct-url-data-structure.rst:37 msgid "" @@ -18822,25 +20404,20 @@ 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 " "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -"Кроме того, секция user:password в URL может быть известной, не " -"чувствительной к безопасности строкой. Типичным примером является ``git`` в " -"случае URL, такого как ``ssh://git@gitlab.com/user/repo``." +"Кроме того, секция user:password в URL может быть известной строкой, не " +"связанной с безопасностью. Типичным примером является ``git`` в случае " +"такого URL, как ``ssh://git@gitlab.com/user/repo``." -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "VCS URLs" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:" @@ -18848,7 +20425,7 @@ msgstr "" "Когда ``url`` ссылается на VCS-репозиторий, ключ ``vcs_info`` ДОЛЖЕН " "присутствовать в виде словаря со следующими ключами:" -#: ../source/specifications/direct-url-data-structure.rst:58 +#: ../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 " @@ -18862,7 +20439,7 @@ msgstr "" "Значение ``url`` ДОЛЖНО быть совместимым с соответствующей VCS, чтобы " "установщик мог передать его без преобразования команде проверки/загрузки VCS." -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -18874,7 +20451,7 @@ msgstr "" "ДОЛЖНО соответствовать ревизии, запрошенной пользователем, и НЕ ДОЛЖНО " "существовать, если пользователь не выбрал конкретную ревизию." -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -18887,11 +20464,11 @@ msgstr "" "использоваться в качестве ``commit_id``, чтобы ссылаться на неизменяемую " "версию исходного кода." -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "Архивные URL" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:" @@ -18899,7 +20476,7 @@ msgstr "" "Когда ``url`` ссылается на исходный архив или колесо, ключ ``archive_info`` " "ДОЛЖЕН присутствовать в виде словаря со следующими ключами:" -#: ../source/specifications/direct-url-data-structure.rst:81 +#: ../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." @@ -18907,7 +20484,7 @@ msgstr "" "Ключ ``hashes`` ДОЛЖЕН присутствовать в виде словаря, сопоставляющего имя " "хэша с шестнадцатеричным дайджестом файла." -#: ../source/specifications/direct-url-data-structure.rst:84 +#: ../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, " @@ -18917,11 +20494,11 @@ msgstr "" "несколькими хэшами (он может подтвердить все из них или их подмножество, или " "вообще ничего)." -#: ../source/specifications/direct-url-data-structure.rst:88 +#: ../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:90 +#: ../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 " @@ -18936,7 +20513,7 @@ msgstr "" "алгоритмы_гарантированы` ДОЛЖЕН быть всегда включен. На момент написания " "статьи рекомендуется ``sha256`." -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../source/specifications/direct-url-data-structure.rst:100 msgid "" "A deprecated ``hash`` key (type ``string``) MAY be present for backwards " "compatibility purposes, with value ``=``." @@ -18944,7 +20521,7 @@ msgstr "" "Устаревший ключ ``hash`` (тип ``string``) МОЖЕТ присутствовать в целях " "обратной совместимости, со значением ``=``." -#: ../source/specifications/direct-url-data-structure.rst:99 +#: ../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 " @@ -18956,7 +20533,7 @@ msgstr "" "выдавать ключ ``hash`` в тех контекстах, где они делали это раньше, чтобы " "сохранить обратную совместимость для существующих клиентов." -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -18968,11 +20545,11 @@ msgstr "" "могут рассматривать ключ ``hashes``, только если он присутствует, и " "возвращаться к ``hash`` в противном случае." -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "Локальные каталоги" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:" @@ -18980,7 +20557,7 @@ msgstr "" "Когда ``url`` ссылается на локальный каталог, ключ ``dir_info`` ДОЛЖЕН " "присутствовать в виде словаря со следующим ключом:" -#: ../source/specifications/direct-url-data-structure.rst:113 +#: ../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 " @@ -18990,7 +20567,7 @@ msgstr "" "установлен в редактируемом режиме, ``false`` в противном случае. Если " "отсутствует, то по умолчанию ``false``." -#: ../source/specifications/direct-url-data-structure.rst:116 +#: ../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 " @@ -19002,11 +20579,11 @@ msgstr "" "абсолютным. Символьные ссылки ДОЛЖНЫ сохраняться при преобразовании " "относительных путей в абсолютные." -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "Проекты в подкаталогах" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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 " @@ -19016,11 +20593,11 @@ msgstr "" "относительно корня VCS-репозитория, исходного архива или локального " "каталога, чтобы указать, где находится ``pyproject.toml`` или ``setup.py``." -#: ../source/specifications/direct-url-data-structure.rst:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "Зарегистрированный VCS" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -19039,48 +20616,48 @@ msgstr "" "команды (в нижнем регистре). Дополнительные поля, необходимые для поддержки " "такой VCS, ДОЛЖНЫ иметь префикс с именем команды VCS." -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "Git" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:220 msgid "vcs command" msgstr "команда vcs" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" msgstr "git" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:160 +#: ../source/specifications/direct-url-data-structure.rst:187 +#: ../source/specifications/direct-url-data-structure.rst:205 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "``vcs`` field" msgstr "поле ``vcs``" -#: ../source/specifications/direct-url-data-structure.rst:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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." @@ -19088,18 +20665,18 @@ msgstr "" "Имя тега, имя ветки, Git ref, хэш коммита, сокращённый хэш коммита или " "другое имя коммита." -#: ../source/specifications/direct-url-data-structure.rst:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../source/specifications/direct-url-data-structure.rst:167 +#: ../source/specifications/direct-url-data-structure.rst:193 +#: ../source/specifications/direct-url-data-structure.rst:211 +#: ../source/specifications/direct-url-data-structure.rst:232 msgid "``commit_id`` field" msgstr "поле ``commit_id``" -#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "Хэш фиксации (40 шестнадцатеричных символов sha1)." -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -19112,64 +20689,64 @@ msgstr "" "соответствует тегу, а ссылка, начинающаяся с ``refs/remotes/origin/`` после " "клонирования, соответствует ветке." -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "Mercurial" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" msgstr "hg" -#: ../source/specifications/direct-url-data-structure.rst:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "Идентификатор набора изменений (40 шестнадцатеричных символов)." -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "Bazaar" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "https://www.breezy-vcs.org/" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" msgstr "bzr" -#: ../source/specifications/direct-url-data-structure.rst:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "Имя тега, имя ветки, идентификатор ревизии." -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "Идентификатор ревизии." -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" msgstr "svn" -#: ../source/specifications/direct-url-data-structure.rst:216 +#: ../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``." @@ -19177,7 +20754,7 @@ msgstr "" "``requested_revision`` должен быть совместим с опцией ``vn checkout`` ``--" "revision``. В Subversion ветка или тег являются частью ``url``." -#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../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." @@ -19186,11 +20763,11 @@ msgstr "" "это поле представляет собой номер ревизии Subversion в соответствующем " "хранилище." -#: ../source/specifications/direct-url-data-structure.rst:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "Схема JSON" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../source/specifications/direct-url-data-structure.rst:237 msgid "" "The following JSON Schema can be used to validate the contents of " "``direct_url.json``:" @@ -19198,23 +20775,23 @@ msgstr "" "Следующая JSON-схема может быть использована для проверки содержимого файла " "``direct_url.json``:" -#: ../source/specifications/direct-url-data-structure.rst:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "Архив источников:" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "URL-адрес Git с тегом и хэшем фиксации:" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "Локальный справочник:" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "Локальная директория в режиме редактирования:" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 msgid "" "March 2020: This specification was approved through :pep:`610`, defining the " "``direct_url.json`` metadata file." @@ -19222,7 +20799,7 @@ msgstr "" "Март 2020 года: Эта спецификация была одобрена через :pep:`610`, определяя " "файл метаданных ``direct_url.json``." -#: ../source/specifications/direct-url-data-structure.rst:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -19968,13 +21545,6 @@ 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 " @@ -19983,8 +21553,8 @@ msgid "" "EXTERNALLY-MANAGED`` consisting of something like" msgstr "" "Распространители программного обеспечения, у которых есть неспецифичный для " -"Python менеджер пакетов, управляющий библиотеками в ``ys.path`` их пакета " -"Python, должны, как правило, поставлять файл ``EXTERNALLY-MANAGED`` в " +"Python менеджер пакетов, управляющий библиотеками в ``sys.path` их пакета " +"Python, должны, как правило, поставлять файл ``EXTERNALLY-MANAGED`` в их " "стандартном каталоге библиотек. Например, Debian может поставлять файл в ``/" "usr/lib/python3.9/EXTERNALLY-MANAGED``, состоящий из чего-то вроде" @@ -20473,15 +22043,11 @@ msgstr "" #: ../source/specifications/index-hosted-attestations.rst:6 msgid "Index hosted attestations" -msgstr "" +msgstr "Аттестаты, размещенные в индексе" #: ../source/specifications/index-hosted-attestations.rst:8 -#, fuzzy -#| msgid "" -#| "This specification was originally defined in :pep:`518` and :pep:`621`." msgid "This specification was originally defined in :pep:`740`." -msgstr "" -"Эта спецификация была первоначально определена в :pep:`518` и :pep:`621`." +msgstr "Эта спецификация была первоначально определена в :pep:`740`." #: ../source/specifications/index-hosted-attestations.rst:12 msgid "" @@ -20489,10 +22055,13 @@ msgid "" "are documented in the :ref:`simple-repository-api` under :ref:`simple-" "repository-api-base` and :ref:`json-serialization`." msgstr "" +":pep:`740` включает изменения в HTML и JSON API индексов. Эти изменения " +"документированы в разделах :ref:`Simple-repository-api` под :ref:`Simple-" +"repository-api-base` и :ref:`json-serialization`." #: ../source/specifications/index-hosted-attestations.rst:22 msgid "Upload endpoint changes" -msgstr "" +msgstr "Загрузка изменений конечной точки" #: ../source/specifications/index-hosted-attestations.rst:26 msgid "" @@ -20500,12 +22069,13 @@ msgid "" "documentation `_ for how attestations are " "uploaded." msgstr "" +"«Устаревший» API выгрузки не стандартизирован. О том, как загружаются " +"аттестаты, см. документацию по API выгрузки `PyPI `_." #: ../source/specifications/index-hosted-attestations.rst:33 -#, fuzzy -#| msgid "Existing projects" msgid "Attestation objects" -msgstr "Существующие проекты" +msgstr "Объекты аттестации" #: ../source/specifications/index-hosted-attestations.rst:35 msgid "" @@ -20514,6 +22084,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 "" @@ -20523,6 +22097,12 @@ msgid "" "sources of signed time (such as an :rfc:`3161` Time Stamping Authority or a " "`Roughtime `__ server)." msgstr "" +"Полная модель данных для каждого объекта в ``transparency_entries`` " +"приведена в :ref:``appendix``. Объекты аттестации **ДОЛЖНЫ** включать одну " +"или несколько записей журнала прозрачности, и **МОГУТ** включать " +"дополнительные ключи для других источников подписанного времени (таких как :" +"rfc:`3161` Time Stamping Authority или `Roughtime `__ сервер)." #: ../source/specifications/index-hosted-attestations.rst:94 msgid "" @@ -20530,34 +22110,47 @@ msgid "" "version is tied to a single cryptographic suite to minimize unnecessary " "cryptographic agility. In version 1, the suite is as follows:" msgstr "" +"Объекты аттестации имеют версии; данный PEP определяет версию 1. Каждая " +"версия привязана к одному криптографическому набору, чтобы минимизировать " +"ненужную криптографическую маневренность. В версии 1 этот набор выглядит " +"следующим образом:" #: ../source/specifications/index-hosted-attestations.rst:98 msgid "" "Certificates are specified as X.509 certificates, and comply with the " "profile in :rfc:`5280`." msgstr "" +"Сертификаты указываются как сертификаты X.509 и соответствуют профилю в :rfc:" +"`5280`." #: ../source/specifications/index-hosted-attestations.rst:100 msgid "" "The message signature algorithm is ECDSA, with the P-256 curve for public " "keys and SHA-256 as the cryptographic digest function." msgstr "" +"Алгоритм подписи сообщений - ECDSA, с кривой P-256 для открытых ключей и " +"SHA-256 в качестве функции криптографического дайджеста." #: ../source/specifications/index-hosted-attestations.rst:103 msgid "" "Future PEPs may change this suite (and the overall shape of the attestation " "object) by selecting a new version number." msgstr "" +"Будущие PEP могут изменить этот набор (и общую форму объекта аттестации), " +"выбрав новый номер версии." #: ../source/specifications/index-hosted-attestations.rst:109 msgid "Attestation statement and signature generation" -msgstr "" +msgstr "Создание аттестационного листа и подписи" #: ../source/specifications/index-hosted-attestations.rst:111 msgid "" "The *attestation statement* is the actual claim that is cryptographically " "signed over within the attestation object (i.e., the ``envelope.statement``)." msgstr "" +"Заявление об аттестации* - это фактическое утверждение, которое " +"криптографически подписывается внутри объекта аттестации (т.е. ``конверт." +"заявление``)." #: ../source/specifications/index-hosted-attestations.rst:114 msgid "" @@ -20566,16 +22159,22 @@ msgid "" "md>`__, in JSON form. When serialized the statement is treated as an opaque " "binary blob, avoiding the need for canonicalization." msgstr "" +"Заявление об аттестации кодируется как объект `v1 in-toto Statement `__, в форме " +"JSON. При сериализации заявление рассматривается как непрозрачный двоичный " +"блок, что позволяет избежать необходимости канонизации." #: ../source/specifications/index-hosted-attestations.rst:119 msgid "" "In addition to being a v1 in-toto Statement, the attestation statement is " "constrained in the following ways:" msgstr "" +"Помимо того, что аттестационное заявление является v1 in-toto Statement, оно " +"ограничено следующим образом:" #: ../source/specifications/index-hosted-attestations.rst:122 msgid "The in-toto ``subject`` **MUST** contain only a single subject." -msgstr "" +msgstr "In-toto ``субъект`` **ДОЛЖЕН** содержать только один субъект." #: ../source/specifications/index-hosted-attestations.rst:123 msgid "" @@ -20583,6 +22182,9 @@ msgid "" "valid :ref:`source distribution ` or :ref:`wheel " "distribution ` filename." msgstr "" +"``subject[0].name`` - это имя файла дистрибутива, которое **МОЖЕТ** быть " +"действительным именем файла :ref:`source distribution ` или :ref:`wheel distribution `." #: ../source/specifications/index-hosted-attestations.rst:126 msgid "" @@ -20590,22 +22192,30 @@ msgid "" "**MAY** be present. The digests **MUST** be represented as hexadecimal " "strings." msgstr "" +"``subject[0].digest`` **МОЖНО** содержать дайджест SHA-256. Другие дайджесты " +"**МОГУТ** присутствовать. Дайджесты **МОГУТ** быть представлены в виде " +"шестнадцатеричных строк." #: ../source/specifications/index-hosted-attestations.rst:128 msgid "The following ``predicateType`` values are supported:" -msgstr "" +msgstr "Поддерживаются следующие значения ``predicateType``:" #: ../source/specifications/index-hosted-attestations.rst:130 +#, fuzzy msgid "" "`SLSA Provenance `__: ``https://slsa.dev/" "provenance/v1``" msgstr "" +"`SLSA Provenance `__: ``https://slsa.dev/" +"provenance/v1``" #: ../source/specifications/index-hosted-attestations.rst:131 msgid "" "`PyPI Publish Attestation `__: ``https://docs.pypi.org/attestations/publish/v1``" msgstr "" +"`PyPI Публикация аттестации `__: `https://docs.pypi.org/attestations/publish/v1``" #: ../source/specifications/index-hosted-attestations.rst:133 msgid "" @@ -20615,32 +22225,43 @@ msgid "" "and a ``PAYLOAD_BODY`` of the JSON-encoded statement above. No other " "``PAYLOAD_TYPE`` is permitted." msgstr "" +"Подпись под этим утверждением построена с использованием протокола подписи " +"DSSE `__, с ``PAYLOAD_TYPE`` из ``application/vnd.in-toto+json`` и " +"``PAYLOAD_BODY`` из JSON-кодированного утверждения выше. Никакой другой " +"``PAYLOAD_TYPE`` не допускается." #: ../source/specifications/index-hosted-attestations.rst:141 msgid "Provenance objects" -msgstr "" +msgstr "Объекты, имеющие происхождение" #: ../source/specifications/index-hosted-attestations.rst:143 msgid "" "The index will serve uploaded attestations along with metadata that can " "assist in verifying them in the form of JSON serialized objects." msgstr "" +"Индекс будет обслуживать загруженные аттестации вместе с метаданными, " +"которые могут помочь в их проверке, в виде сериализованных объектов JSON." #: ../source/specifications/index-hosted-attestations.rst:146 msgid "" "These *provenance objects* will be available via both the Simple Index and " "JSON-based Simple API as described above, and will have the following layout:" msgstr "" +"Эти объекты *provenance* будут доступны как через Simple Index, так и через " +"JSON-based Simple API, как описано выше, и будут иметь следующий вид:" #: ../source/specifications/index-hosted-attestations.rst:169 msgid "or, as pseudocode:" -msgstr "" +msgstr "или, как псевдокод:" #: ../source/specifications/index-hosted-attestations.rst:217 msgid "" "``version`` is ``1``. Like attestation objects, provenance objects are " "versioned, and this PEP only defines version ``1``." msgstr "" +"``версия`` - ``1``. Как и объекты аттестации, объекты подтверждения имеют " +"версии, и в этом PEP определена только версия ``1``." #: ../source/specifications/index-hosted-attestations.rst:219 msgid "" @@ -20649,18 +22270,27 @@ msgid "" "(such as a Trusted Publishing identity), and contains one or more " "attestation objects." msgstr "" +"``attestation_bundles`` - это **обязательный** массив JSON, содержащий один " +"или несколько \"пучков\" аттестаций. Каждый пакет соответствует " +"идентификатору подписи (например, идентификатору доверенной публикации) и " +"содержит один или несколько объектов аттестации." #: ../source/specifications/index-hosted-attestations.rst:224 msgid "" "As noted in the ``Publisher`` model, each ``AttestationBundle.publisher`` " "object is specific to its Trusted Publisher but must include at minimum:" msgstr "" +"Как отмечается в модели ``Издатель``, каждый объект ``AttestationBundle." +"publisher`` специфичен для своего Доверенного Издателя, но должен включать в " +"себя как минимум:" #: ../source/specifications/index-hosted-attestations.rst:228 msgid "" "A ``kind`` key, which **MUST** be a JSON string that uniquely identifies the " "kind of Trusted Publisher." msgstr "" +"Ключ ``kind``, который **МОЖЕТ** быть строкой JSON, уникально " +"идентифицирующей тип доверенного издателя." #: ../source/specifications/index-hosted-attestations.rst:230 msgid "" @@ -20668,10 +22298,14 @@ msgid "" "specific claims retained by the index during Trusted Publisher " "authentication." msgstr "" +"Ключ ``claims``, который **МОЖЕТ** быть JSON-объектом, содержащим любые " +"контекстно-специфические требования, сохраненные индексом во время " +"аутентификации Trusted Publisher." #: ../source/specifications/index-hosted-attestations.rst:233 msgid "All other keys in the publisher object are publisher-specific." msgstr "" +"Все остальные ключи в объекте publisher являются специфическими для издателя." #: ../source/specifications/index-hosted-attestations.rst:235 msgid "" @@ -20680,16 +22314,22 @@ msgid "" "time, as described in :ref:`upload-endpoint` and :ref:`changes-to-provenance-" "objects`." msgstr "" +"Каждый массив объектов аттестации является надмножеством массива " +"``аттестаций``, предоставленного загружаемым через поле ``аттестации`` во " +"время загрузки, как описано в :ref:`upload-endpoint` и :ref:`changes-to-" +"provenance-objects`." #: ../source/specifications/index-hosted-attestations.rst:243 msgid "Changes to provenance objects" -msgstr "" +msgstr "Изменить объекты подтверждения" #: ../source/specifications/index-hosted-attestations.rst:245 msgid "" "Provenance objects are *not* immutable, and may change over time. Reasons " "for changes to the provenance object include but are not limited to:" msgstr "" +"Объекты провенанса *не* неизменяемы и могут изменяться с течением времени. " +"Причины изменения объекта провенанса включают, но не ограничиваются ими:" #: ../source/specifications/index-hosted-attestations.rst:248 msgid "" @@ -20697,6 +22337,10 @@ msgid "" "**MAY** choose to allow additional attestations by pre-existing signing " "identities, such as newer attestation versions for already uploaded files." msgstr "" +"Добавление новых аттестаций для уже существующего идентификатора подписи: " +"индекс **МОЖЕТ** разрешить дополнительные аттестации для уже существующих " +"идентификаторов подписи, например, новые версии аттестаций для уже " +"загруженных файлов." #: ../source/specifications/index-hosted-attestations.rst:253 msgid "" @@ -20706,20 +22350,28 @@ msgid "" "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 "" +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 "" +"``версия`` - ``1``. Верификатор **МОЖЕТ** отклонить любую другую версию." #: ../source/specifications/index-hosted-attestations.rst:268 msgid "" @@ -20727,6 +22379,9 @@ msgid "" "issued by an *a priori* trusted authority (such as a root of trust already " "present within the verifying client)." msgstr "" +"``verification_material.certificate`` - это действительный сертификат " +"подписи, выданный *априори* доверенным органом (например, корнем доверия, " +"который уже присутствует в проверяющем клиенте)." #: ../source/specifications/index-hosted-attestations.rst:271 msgid "" @@ -20734,6 +22389,9 @@ msgid "" "subject, such as the machine identity of the Trusted Publisher that " "published the package." msgstr "" +"``verification_material.certificate`` идентифицирует соответствующий субъект " +"подписи, например, идентификатор машины доверенного издателя, " +"опубликовавшего пакет." #: ../source/specifications/index-hosted-attestations.rst:274 msgid "" @@ -20743,6 +22401,11 @@ msgid "" "appropriate source distribution or wheel filename format, as the statement's " "subject may be equivalent but normalized." msgstr "" +"``envelope.statement`` - это корректный in-toto v1 Statement, с темой и " +"дайджестом, которые **ДОЛЖНЫ** совпадать с именем и содержимым дистрибутива. " +"Для имени дистрибутива соответствие **ДОЛЖНО** быть выполнено путем разбора " +"с использованием соответствующего формата имени исходного дистрибутива или " +"колеса, так как тема заявления может быть эквивалентной, но нормализованной." #: ../source/specifications/index-hosted-attestations.rst:279 msgid "" @@ -20751,6 +22414,10 @@ msgid "" "the `v1 DSSE signature protocol `__." msgstr "" +"``envelope.signature`` является действительной подписью для ``envelope." +"statement``, соответствующей ``verification_material.certificate``, как " +"восстановлено по протоколу подписи `v1 DSSE `__." #: ../source/specifications/index-hosted-attestations.rst:284 msgid "" @@ -20761,10 +22428,16 @@ msgid "" "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 "" +msgstr "Приложение: Модели данных для записей журнала прозрачности" #: ../source/specifications/index-hosted-attestations.rst:295 msgid "" @@ -20772,6 +22445,10 @@ msgid "" "in attestation objects. Each transparency log entry serves as a source of " "signed inclusion time, and can be verified either online or offline." msgstr "" +"Это приложение содержит псевдокодированные модели данных для записей журнала " +"прозрачности в объектах аттестации. Каждая запись журнала прозрачности " +"служит источником подписанного времени включения и может быть проверена как " +"онлайн, так и офлайн." #: ../source/specifications/inline-script-metadata.rst:5 msgid "Inline script metadata" @@ -20914,14 +22591,13 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" -"Таблица ``[ инструмент]`` МОЖЕТ использоваться любым инструментом, " -"исполнителем скриптов или другим, для настройки поведения. Он имеет ту же " -"семантику, что и : ссылка:`[ инструмент] таблица в pyproject.toml `." +"Таблица ``[tool]`` МОЖЕТ использоваться любым инструментом, исполнителем " +"скриптов или другим, для настройки поведения. Она имеет ту же семантику, что " +"и таблица :ref:`[tool] в pyproject.toml `." #: ../source/specifications/inline-script-metadata.rst:86 msgid "The top-level fields are:" @@ -21000,7 +22676,7 @@ msgid "" msgstr "Ниже приведен пример чтения потока произвольных блоков метаданных." #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "Рекомендации" @@ -21359,19 +23035,19 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 "" -"Текущим стандартом является перспективный стандарт ``manylinux_x_y``. Он " -"определяет теги вида ``manylinux_x_y_arch``, где ``x`` и ``y`` - " -"поддерживаемые версии glibc major и minor (например, ``manylinux_2_24_xxx`` " -"должен работать на любом дистрибутиве, использующем glibc 2.24+), а ``arch`` " -"- архитектура, соответствующая значению :py: функция :`sysconfig." -"get_platform()` на системе, как в \"простой\" форме выше." +"Текущий стандарт - это защищенный от будущего стандарт :file:`manylinux_{x}" +"_{y}`. Он определяет теги вида :file:`manylinux_{x}_{y}_{arch}`, где ``x`` и " +"``y`` - поддерживаемые версии glibc major и minor (например, " +"``manylinux_2_24_xxx`` должен работать на любом дистрибутиве, использующем " +"glibc 2.24+), а ``arch`` - архитектура, соответствующая значению :py:func:" +"`sysconfig.get_platform()` на системе, как в \"простой\" форме выше." #: ../source/specifications/platform-compatibility-tags.rst:118 msgid "" @@ -21499,13 +23175,13 @@ msgstr "``musllinux``" 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"Alpine Linux). The schema is :file:`musllinux_{x}_{y}_{arch}``, supporting " +"musl ``x.y`` and higher on the architecture ``arch``." msgstr "" "Семейство тегов ``musllinux`` аналогично ``manylinux``, но для Linux-" "платформ, использующих не glibc, а musl_ libc (яркий пример - Alpine Linux). " -"Схема ``musllinux_x_y_arch``, поддерживающая musl ``x.y`` и выше на " -"архитектуре ``arch``." +"Схема :file:`musllinux_{x}_{y}_{arch}``, поддерживающая musl ``x.y`` и выше " +"на архитектуре ``arch``." #: ../source/specifications/platform-compatibility-tags.rst:157 msgid "" @@ -21529,11 +23205,300 @@ msgstr "" "команды ldd_, либо путем разбора значения секции ``PT_INTERP`` из заголовка " "ELF_ исполняемого файла." -#: ../source/specifications/platform-compatibility-tags.rst:194 +#: ../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 "" +"В macOS используется семейство тегов ``macosx`` (суффикс ``x`` является " +"историческим артефактом официальной схемы именования macOS от Apple). Схема " +"тегов совместимости - :file:`macosx_{x}_{y}_{arch}`, указывающая на то, что " +"колесо совместимо с macOS ``x.y`` или более поздними версиями на архитектуре " +"``arch``." + +#: ../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 "" +"Значения ``x`` и ``y`` соответствуют мажорному и минорному номеру версии " +"выпуска macOS, соответственно. Оба они должны быть положительными целыми " +"числами, причем значение ``x`` должно быть ``>= 10``. Номер версии всегда " +"включает в себя мажорную *и* минорную версии, даже если официальная " +"нумерация версий Apple ссылается только на мажорное значение. Например, " +"``macosx_11_0_arm64`` указывает на совместимость с macOS 11 или более " +"поздней версией." + +#: ../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 "" +"Двоичные файлы macOS могут быть скомпилированы для одной архитектуры, а " +"могут включать поддержку нескольких архитектур в одном двоичном файле " +"(иногда их называют \"толстыми\" двоичными файлами). Чтобы указать на " +"поддержку одной архитектуры, значение ``arch`` должно совпадать со " +"значением :py:func:`platform.machine()` в системе. Чтобы указать на " +"поддержку нескольких архитектур, тег ``arch`` должен быть идентификатором из " +"следующего списка, описывающего набор поддерживаемых архитектур:" + +#: ../source/specifications/platform-compatibility-tags.rst:217 +#, fuzzy +msgid "``arch``" +msgstr "``arch``" + +#: ../source/specifications/platform-compatibility-tags.rst:217 +msgid "Architectures supported" +msgstr "Поддержка архитектуры" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +msgid "``universal2``" +msgstr "``универсальный2``" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +#, fuzzy +#| msgid "``x86_64``" +msgid "``arm64``, ``x86_64``" +msgstr "``arm64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``universal``" +msgstr "``универсальный``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +#, fuzzy +msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" +msgstr "``i386``, ``ppc``, ``ppc64``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +#, fuzzy +#| msgid "``install``" +msgid "``intel``" +msgstr "``intel``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +#, fuzzy +#| msgid "``x86_64``" +msgid "``i386``, ``x86_64``" +msgstr "``i386``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +#, fuzzy +msgid "``fat``" +msgstr "``fat``" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +#, fuzzy +#| msgid "``3.4``, ``2.7``" +msgid "``i386``, ``ppc``" +msgstr "``i386``, ``ppc``" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +#, fuzzy +msgid "``fat3``" +msgstr "``fat3``" + +#: ../source/specifications/platform-compatibility-tags.rst:223 +#, fuzzy +msgid "``i386``, ``ppc``, ``x86_64``" +msgstr "``i386``, ``ppc``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +#, fuzzy +#| msgid "``x86_64``" +msgid "``fat64``" +msgstr "``fat64``" + +#: ../source/specifications/platform-compatibility-tags.rst:224 +#, fuzzy +#| msgid "``x86_64``" +msgid "``ppc64``, ``x86_64``" +msgstr "``ppc64``, ``x86_64``" + +#: ../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 "" +"Минимальная поддерживаемая версия macOS также может быть ограничена " +"архитектурой. Например, macOS 11 (Big Sur) была первой версией, " +"поддерживающей arm64. Эти дополнительные ограничения прозрачно применяются " +"инструментальной цепочкой компиляции macOS при сборке двоичных файлов, " +"поддерживающих несколько архитектур." + +#: ../source/specifications/platform-compatibility-tags.rst:235 +#, fuzzy +msgid "Android" +msgstr "Android" + +#: ../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 "" +"Android использует схему :file:`android_{apilevel}_{abi}`, указывающую на " +"совместимость с данным уровнем API Android или более поздним, на данном ABI. " +"Например, ``android_27_arm64_v8a`` указывает на поддержку уровня API 27 или " +"более позднего, на устройствах ``arm64_v8a``. Android не делает различий " +"между физическими и эмулируемыми устройствами." + +#: ../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 "" +"Уровень API должен быть целым положительным числом. Это *не* то же самое, " +"что версия Android для пользователя. Например, релиз, известный как Android " +"12 (кодовое название \"Snow Cone\"), использует уровень API 31 или 32, в " +"зависимости от конкретной используемой версии Android. Полный список версий " +"Android и соответствующих им уровней API содержится в документации по " +"релизам Android `__." + +#: ../source/specifications/platform-compatibility-tags.rst:250 +msgid "" +"There are 4 `supported ABIs `__. Normalized according to the rules above, they are:" +msgstr "" +"Существует 4 поддерживаемых ABI `__. Нормализованные в соответствии с правилами выше, они таковы:" + +#: ../source/specifications/platform-compatibility-tags.rst:253 +#, fuzzy +msgid "``armeabi_v7a``" +msgstr "``armeabi_v7a``" + +#: ../source/specifications/platform-compatibility-tags.rst:254 +#, fuzzy +msgid "``arm64_v8a``" +msgstr "``arm64_v8a``" + +#: ../source/specifications/platform-compatibility-tags.rst:255 +#, fuzzy +#| msgid "``x86_64``" +msgid "``x86``" +msgstr "``x86``" + +#: ../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 "" +"Практически все современные физические устройства используют одну из " +"архитектур ARM. Для использования в эмуляторе поддерживаются ``x86`` и " +"``x86_64``. ``x86`` не поддерживается в качестве платформы разработки с 2020 " +"года, и с тех пор не было выпущено ни одного нового образа эмулятора." + +#: ../source/specifications/platform-compatibility-tags.rst:266 +#, fuzzy +msgid "iOS" +msgstr "iOS" + +#: ../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 "" +"iOS использует схему :file:`ios_{x}_{y}_{arch}_{sdk}`, указывающую на " +"совместимость с iOS ``x.y`` или более поздней версии, на архитектуре " +"``arch``, с использованием ``sdk`` SDK." + +#: ../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 "" +"Значения ``x`` и ``y`` соответствуют номеру мажорной и минорной версии " +"релиза iOS, соответственно. Оба они должны быть положительными целыми " +"числами. Номер версии всегда включает в себя мажорную *и* минорную версии, " +"даже если официальная нумерация версий Apple ссылается только на мажорное " +"значение. Например, ``ios_13_0_arm64_iphonesimulator`` указывает на " +"совместимость с iOS 13 или более поздней версией." + +#: ../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 "" +"Значение ``arch`` должно совпадать со значением :py:func:`platform." +"machine()` в системе." + +#: ../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 "" +"Значение ``sdk` должно быть либо ``iphoneos`` (для физических устройств), " +"либо ``iphonesimulator`` (для симуляторов устройств). Эти SDK имеют " +"одинаковую поверхность API, но несовместимы на бинарном уровне, даже если " +"они работают на одной архитектуре процессора. Код, скомпилированный для " +"симулятора arm64, не будет работать на устройстве arm64." + +#: ../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 "" +"Комбинация :file:`{arch}_{sdk}` называется \"multiarch\". Существует три " +"возможных значения для multiarch:" + +#: ../source/specifications/platform-compatibility-tags.rst:289 +msgid "" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" +msgstr "" +"``arm64_iphoneos``, для физических устройств iPhone/iPad. Сюда входят все " +"iOS-устройства, выпущенные с ~2015 года;" + +#: ../source/specifications/platform-compatibility-tags.rst:291 +msgid "" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" +msgstr "" +"``arm64_iphonesimulator``, для симуляторов, работающих на оборудовании Apple " +"Silicon macOS; и" + +#: ../source/specifications/platform-compatibility-tags.rst:293 +msgid "``x86_64_iphonesimulator``, for simulators running on x86_64 hardware." +msgstr "" +"``x86_64_iphonesimulator``, для симуляторов, работающих на оборудовании " +"x86_64." + +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "Используйте" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -21546,7 +23511,7 @@ msgstr "" "abi, arch), которые она будет поддерживать. Если тег собранного " "дистрибутива находится ``в`` этом списке, то он может быть установлен." -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -21565,7 +23530,7 @@ msgstr "" "any``, чтобы загружать только те собранные пакеты, которые рекламируют себя " "как чистый Python." -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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 " @@ -21576,7 +23541,7 @@ msgstr "" "предпочтительной, чем некоторые совместимые, но устаревшие опции " "предварительной сборки." -#: ../source/specifications/platform-compatibility-tags.rst:214 +#: ../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 " @@ -21591,63 +23556,63 @@ msgstr "" "предпочтительного (дистрибутив чистого Python, собранный для более старой " "версии Python):" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "cp33-cp33m-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "cp33-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "cp3-abi3-linux_x86_64" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "cp33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "cp3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "py33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "py3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "cp33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "cp3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "py33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "py3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "py32-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "py31-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "py30-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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." @@ -21656,7 +23621,7 @@ msgstr "" "причинам, не связанным с расширениями C, например, путем включения " "собственного исполняемого файла, вызываемого в качестве подпроцесса." -#: ../source/specifications/platform-compatibility-tags.rst:239 +#: ../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 " @@ -21675,11 +23640,11 @@ msgstr "" "предпочтительнее, чем пакет без него, поскольку этот тег появляется первым в " "списке." -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "Сжатые наборы тегов" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -21695,7 +23660,7 @@ msgstr "" "исходным кодом, может распространять bdist с тегом ``py2.py3-none-any``. " "Полный список простых тегов выглядит так::" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -21708,11 +23673,11 @@ msgstr "" "не поддерживаются ни одной реализацией Python, например, \"cp33-cp31u-" "win64\", поэтому используйте ее осторожно." -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "Какие теги используются по умолчанию?" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -21725,7 +23690,7 @@ msgstr "" "упаковщик переопределяет значение по умолчанию, это указывает на то, что он " "намерен обеспечить кросс-Python совместимость." -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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?" @@ -21733,7 +23698,7 @@ msgstr "" "Какой тег мне использовать, если в моем дистрибутиве используется функция, " "эксклюзивная для новейшей версии Python?" -#: ../source/specifications/platform-compatibility-tags.rst:278 +#: ../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 " @@ -21751,11 +23716,11 @@ msgstr "" "квалификаторы, например, требовать более старый выпуск ``beaglevote-1.1.0``, " "который не использует новую возможность, чтобы получить совместимую сборку." -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../source/specifications/platform-compatibility-tags.rst:392 msgid "Why isn't there a ``.`` in the Python version number?" msgstr "Почему в номере версии Python нет ``.``?" -#: ../source/specifications/platform-compatibility-tags.rst:288 +#: ../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, " @@ -21766,14 +23731,14 @@ msgstr "" "использовать _ в качестве разделителя, поскольку и -, и . разграничивают " "окружающее имя файла." -#: ../source/specifications/platform-compatibility-tags.rst:296 +#: ../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:293 +#: ../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 " @@ -21785,12 +23750,12 @@ msgstr "" "файловой системы для имен файлов (включая возможность использования в URL-" "путях без кавычек)." -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" "Почему бы не использовать специальный символ , а не ``.`` или ``-``?" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -21807,11 +23772,11 @@ msgstr "" "pep:`427` (например, использование ``,`` вместо ``.`` для разделения " "компонентов в сжатом теге)." -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "Кто будет вести реестр сокращенных реализаций?" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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 " @@ -21821,11 +23786,11 @@ msgstr "" "dev. Как правило, аббревиатуры сохраняются для 4 наиболее известных " "реализаций." -#: ../source/specifications/platform-compatibility-tags.rst:315 +#: ../source/specifications/platform-compatibility-tags.rst:417 msgid "Does the compatibility tag go into METADATA or PKG-INFO?" msgstr "Тег совместимости помещается в METADATA или PKG-INFO?" -#: ../source/specifications/platform-compatibility-tags.rst:313 +#: ../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 " @@ -21835,11 +23800,11 @@ msgstr "" "дистрибутива. METADATA / PKG-INFO должны быть действительны для всего " "дистрибутива, а не для одной его сборки." -#: ../source/specifications/platform-compatibility-tags.rst:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "Почему вы не упомянули мою любимую реализацию Python?" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -21851,7 +23816,7 @@ msgstr "" "но с более длинными тегами. Напомним, что все дистрибутивы, построенные на " "\"чистом Python\", просто используют ``py``." -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../source/specifications/platform-compatibility-tags.rst:431 msgid "" "Why is the ABI tag (the second tag) sometimes \"none\" in the reference " "implementation?" @@ -21859,7 +23824,7 @@ msgstr "" "Почему в эталонной реализации тег ABI (второй тег) иногда имеет значение " "\"none\"?" -#: ../source/specifications/platform-compatibility-tags.rst:324 +#: ../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 " @@ -21873,7 +23838,7 @@ msgstr "" "u)\" по аналогии с новыми версиями Python, но пока что \"none\" - достаточно " "хороший способ сказать \"не знаю\"." -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../source/specifications/platform-compatibility-tags.rst:436 msgid "" "February 2013: The original version of this specification was approved " "through :pep:`425`." @@ -21881,31 +23846,39 @@ msgstr "" "Февраль 2013 г: Первоначальная версия этой спецификации была одобрена через :" "pep:`425`." -#: ../source/specifications/platform-compatibility-tags.rst:336 +#: ../source/specifications/platform-compatibility-tags.rst:438 msgid "January 2016: The ``manylinux1`` tag was approved through :pep:`513`." msgstr "Январь 2016 г: Метка ``manylinux1`` была одобрена через :pep:`513``." -#: ../source/specifications/platform-compatibility-tags.rst:337 +#: ../source/specifications/platform-compatibility-tags.rst:439 msgid "April 2018: The ``manylinux2010`` tag was approved through :pep:`571`." msgstr "" "Апрель 2018 г: Метка ``manylinux2010`` была одобрена через :pep:`571``." -#: ../source/specifications/platform-compatibility-tags.rst:338 +#: ../source/specifications/platform-compatibility-tags.rst:440 msgid "July 2019: The ``manylinux2014`` tag was approved through :pep:`599`." msgstr "Июль 2019: Метка ``manylinux2014`` была одобрена через :pep:`599``." -#: ../source/specifications/platform-compatibility-tags.rst:339 +#: ../source/specifications/platform-compatibility-tags.rst:441 msgid "" "November 2019: The ``manylinux_x_y`` perennial tag was approved through :pep:" "`600`." msgstr "" "Ноябрь 2019: Многолетний тег ``manylinux_x_y`` был одобрен через :pep:`600`." -#: ../source/specifications/platform-compatibility-tags.rst:341 +#: ../source/specifications/platform-compatibility-tags.rst:443 msgid "April 2021: The ``musllinux_x_y`` tag was approved through :pep:`656`." msgstr "" "Апрель 2021 года: Метка ``musllinux_x_y`` была одобрена через :pep:`656``." +#: ../source/specifications/platform-compatibility-tags.rst:444 +msgid "December 2023: The tags for iOS were approved through :pep:`730`." +msgstr "Декабрь 2023 года: Теги для iOS были одобрены через :pep:`730`." + +#: ../source/specifications/platform-compatibility-tags.rst:445 +msgid "March 2024: The tags for Android were approved through :pep:`738`." +msgstr "Март 2024 года: Теги для Android были одобрены через :pep:`738`." + #: ../source/specifications/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "Файл :file:`.pypirc`" @@ -22229,7 +24202,7 @@ msgid "``dependencies``" msgstr "``зависимости``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "``динамический``" @@ -22241,22 +24214,23 @@ msgstr "``точки входа``" msgid "``gui-scripts``" msgstr "``gui-скрипт``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "``мастера``" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "``опциональные зависимости``" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "Тип TOML_: строка" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" @@ -22264,11 +24238,11 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Name `" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "Название проекта." -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." @@ -22276,7 +24250,7 @@ msgstr "" "Инструменты ДОЛЖНЫ :ref:`нормализовать <имя-нормализация>` это имя, как " "только оно будет прочитано для внутренней согласованности." -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" @@ -22284,7 +24258,7 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Version " "`" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." @@ -22292,11 +24266,11 @@ msgstr "" "Версия проекта, как определено в спецификации спецификатора версии `." -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "Пользователи ДОЛЖНЫ предпочитать указывать уже нормализованные версии." -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" @@ -22304,7 +24278,7 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Summary " "`" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." @@ -22312,11 +24286,11 @@ msgstr "" "Краткое описание проекта в одной строке. Инструменты MAY ошибаются, если оно " "включает несколько строк." -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "Тип TOML_: строка или таблица" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type ` и :ref:`Description-Content-Type `" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "Полное описание проекта (то есть README)." -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -22354,7 +24328,7 @@ msgstr "" "указывая этот ключ как ``динамический``. Для всех нераспознанных суффиксов, " "когда тип содержимого не указан, инструменты ДОЛЖНЫ выдавать ошибку." -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -22369,73 +24343,214 @@ msgstr "" "взаимоисключающими, поэтому инструменты ДОЛЖНЫ выдавать ошибку, если в " "метаданных указаны оба ключа." -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 +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 "" +"Таблица, указанная в ключе ``readme'', также имеет ключ ``content-type'', " +"который принимает строку, определяющую тип содержимого полного описания. " +"Инструмент ДОЛЖЕН выдать ошибку, если метаданные не указывают этот ключ в " +"таблице. Если в метаданных не указан параметр ``charset'', то " +"предполагается, что это UTF-8. Инструменты МОГУТ поддерживать другие " +"кодировки по своему усмотрению. Инструменты МОГУТ поддерживать " +"альтернативные типы содержимого, которые они могут преобразовать в тип " +"содержимого, поддерживаемый :ref:`core metadata `. В " +"противном случае инструменты ДОЛЖНЫ выдавать ошибку о неподдерживаемых типах " +"содержимого." + +#: ../source/specifications/pyproject-toml.rst:231 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Python `" +msgstr "" +"Соответствующее поле :ref:`core metadata `: :ref:`Requires-" +"Python `" + +#: ../source/specifications/pyproject-toml.rst:234 +msgid "The Python version requirements of the project." +msgstr "Требования к версии Python для проекта." + +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" +msgstr "" +"Соответствующее поле :ref:`core metadata `: :ref:`License-" +"Expression `." + +#: ../source/specifications/pyproject-toml.rst:244 +msgid "" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." +msgstr "" +"Текстовая строка, которая является действительным выражением лицензии SPDX, " +"как определено в :pep:`639`. Инструменты ДОЛЖНЫ проверять и выполнять " +"нормализацию регистра выражения." + +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "Табличные подключи ключа ``license`` устарели." + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" +msgstr "Тип TOML_: массив строк" + +#: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" +"Соответствующее поле :ref:`core metadata `: :ref:`License-" +"File `" + +#: ../source/specifications/pyproject-toml.rst:257 +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 "" +"Массив, указывающий пути в дереве исходных текстов проекта относительно " +"корневого каталога проекта (т.е. каталога, содержащего :file:`pyproject." +"toml` или унаследованные файлы конфигурации проекта, например :file:`setup." +"py`, :file:`setup.cfg` и т.д.) к файлу(ам) с лицензиями и другими " +"юридическими уведомлениями, которые будут распространяться вместе с пакетом." + +#: ../source/specifications/pyproject-toml.rst:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "Строки ДОЛЖНЫ содержать правильные шаблоны glob, как указано ниже:" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" +"Буквенно-цифровые символы, подчеркивания (``_``), дефисы (``-``) и точки (``." +"``) ДОЛЖНЫ совпадать дословно." + +#: ../source/specifications/pyproject-toml.rst:268 +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 "" +"Специальные символы глобуса: ``*``, ``?``, ``**`` и диапазоны символов: " +"``[...]``, содержащие только дословные совпадающие символы, ДОЛЖНЫ " +"поддерживаться. Внутри ``[...]`` дефис указывает на диапазон, не зависящий " +"от локали (например, ``a-z``, порядок основан на кодовых точках Unicode). " +"Дефисы в начале или в конце совпадают буквально." + +#: ../source/specifications/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" +"Разделителями путей ДОЛЖЕН быть символ прямой косой черты (``/``). Образцы " +"являются относительными к директории, содержащей :file:`pyproject.toml`, " +"поэтому символ прямой косой черты НЕ ДОЛЖЕН использоваться." + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "Индикаторы родительского каталога (``..``) НЕ ДОЛЖНЫ использоваться." + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" +"Любые символы или последовательности символов, не предусмотренные данной " +"спецификацией, являются недействительными. Проекты НЕ ДОЛЖНЫ использовать " +"такие значения. Средства, использующие это поле, ДОЛЖНЫ отклонять " +"недопустимые значения с ошибкой." + +#: ../source/specifications/pyproject-toml.rst:284 +msgid "" +"Tools MUST assume that license file content is valid UTF-8 encoded text, and " +"SHOULD validate this and raise an error if it is not." +msgstr "" +"Инструменты ДОЛЖНЫ предполагать, что содержимое файла лицензии является " +"правильным текстом в кодировке UTF-8, и ДОЛЖНЫ проверять его и выдавать " +"ошибку, если это не так." + +#: ../source/specifications/pyproject-toml.rst:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" +"Буквальные пути (например, :file:`LICENSE`) являются допустимыми глобусами, " +"что означает, что они также могут быть определены." + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "Сборка инструментов:" + +#: ../source/specifications/pyproject-toml.rst:292 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." +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." msgstr "" -"Таблица, указанная в ключе ``readme'', также имеет ключ ``content-type'', " -"который принимает строку, определяющую тип содержимого полного описания. " -"Инструмент ДОЛЖЕН выдать ошибку, если метаданные не указывают этот ключ в " -"таблице. Если в метаданных не указан параметр ``charset'', то " -"предполагается, что это UTF-8. Инструменты МОГУТ поддерживать другие " -"кодировки по своему усмотрению. Инструменты МОГУТ поддерживать " -"альтернативные типы содержимого, которые они могут преобразовать в тип " -"содержимого, поддерживаемый :ref:`core metadata `. В " -"противном случае инструменты ДОЛЖНЫ выдавать ошибку о неподдерживаемых типах " -"содержимого." +"ДОЛЖНО рассматривать каждое значение как шаблон glob, и ДОЛЖНО выдать " +"ошибку, если шаблон содержит неверный синтаксис glob." -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:294 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`Requires-" -"Python `" +"MUST include all files matched by a listed pattern in all distribution " +"archives." msgstr "" -"Соответствующее поле :ref:`core metadata `: :ref:`Requires-" -"Python `" - -#: ../source/specifications/pyproject-toml.rst:233 -msgid "The Python version requirements of the project." -msgstr "Требования к версии Python для проекта." +"ОБЯЗАТЕЛЬНО включите все файлы, соответствующие перечисленному шаблону, во " +"все архивы дистрибутива." -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" -msgstr "TOML_ тип: таблица" +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" +"ДОЛЖЕН перечислить каждый совпадающий путь к файлу в поле License-File в " +"основных метаданных." -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:298 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." msgstr "" -"Соответствующее поле :ref:`core metadata `: :ref:`License " -"`" +"ДОЛЖНА вызывать ошибку, если любой отдельный шаблон, указанный " +"пользователем, не соответствует хотя бы одному файлу." -#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:301 msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +"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 "" -"Таблица может иметь один из двух ключей. Ключ ``file`` имеет строковое " -"значение, которое представляет собой путь к файлу относительно ``pyproject." -"toml`` к файлу, содержащему лицензию на проект. Инструменты ДОЛЖНЫ считать, " -"что кодировка файла - UTF-8. Ключ ``text`` имеет строковое значение, которое " -"является лицензией проекта. Эти ключи являются взаимоисключающими, поэтому " -"инструмент ДОЛЖЕН выдать ошибку, если в метаданных указаны оба ключа." +"Если ключ ``license-files`` присутствует и имеет значение пустого массива, " +"то инструменты НЕ ДОЛЖНЫ включать никакие файлы лицензий и НЕ ДОЛЖНЫ " +"выдавать ошибку. Если ключ ``license-files`` не определен, инструменты могут " +"сами решать, как обращаться с файлами лицензий. Например, они могут не " +"включать никаких файлов или использовать собственную логику для обнаружения " +"соответствующих файлов в дистрибутиве." -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "TOML_ type: Массив строчных таблиц со строковыми ключами и значениями" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -22447,7 +24562,7 @@ msgstr "" "ref:`Maintainer `, и :ref:`Maintainer-email `" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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 " @@ -22457,7 +24572,7 @@ msgstr "" "открыто для интерпретации - это может быть список оригинальных или основных " "авторов, текущих сопровождающих или владельцев пакета." -#: ../source/specifications/pyproject-toml.rst:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." @@ -22465,7 +24580,7 @@ msgstr "" "Ключ \"maintainers\" похож на \"authors\" тем, что его точное значение можно " "интерпретировать." -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -22480,14 +24595,14 @@ msgstr "" "``email`` ДОЛЖНО быть действительным адресом электронной почты. Оба ключа " "необязательны, но хотя бы один из них должен быть указан в таблице." -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" "Использование данных для заполнения :ref:`core metadata ` " "осуществляется следующим образом:" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." @@ -22496,7 +24611,7 @@ msgstr "" "metadata-author>` или :ref:`Maintainer ` в " "зависимости от ситуации." -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 msgid "" "If only ``email`` is provided, the value goes in :ref:`Author-email ` or :ref:`Maintainer-email ` или :ref:`Maintainer-email ` в зависимости от ситуации." -#: ../source/specifications/pyproject-toml.rst:286 +#: ../source/specifications/pyproject-toml.rst:344 msgid "" "If both ``email`` and ``name`` are provided, the value goes in :ref:`Author-" "email ` or :ref:`Maintainer-email ` в зависимости от ситуации, с форматом ``{name} " "<{email}>```." -#: ../source/specifications/pyproject-toml.rst:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "Несколько значений должны быть разделены запятыми." -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "Тип TOML_: массив строк" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" @@ -22534,11 +24644,11 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Keywords " "`" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "Ключевые слова для проекта." -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" @@ -22546,15 +24656,28 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Classifier " "`" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "Классификаторы Trove, применимые к проекту." -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +msgid "" +"The use of ``License ::`` classifiers is deprecated and tools MAY issue a " +"warning informing users about that. Build tools MAY raise an error if both " +"the ``license`` string value (translating to ``License-Expression`` metadata " +"field) and the ``License ::`` classifiers are used." +msgstr "" +"Использование классификаторов ``License ::`` устарело, и инструменты МОГУТ " +"выдавать предупреждение, информирующее об этом пользователей. Инструменты " +"сборки МОГУТ выдать ошибку, если используется как строковое значение " +"``license`` (перевод в поле метаданных ``License-Expression``), так и " +"классификаторы ``License ::``." + +#: ../source/specifications/pyproject-toml.rst:380 msgid "TOML_ type: table with keys and values of strings" msgstr "Тип TOML_: таблица с ключами и значениями строк" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" @@ -22562,18 +24685,21 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Project-URL " "`" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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 "" +"Таблица URL-адресов, где ключом является метка URL, а значением - сам URL. " +"См. :ref:`well-known-project-urls` для правил нормализации и общеизвестных " +"правил при обработке метаданных для представления." -#: ../source/specifications/pyproject-toml.rst:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "Точки входа" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" @@ -22581,11 +24707,11 @@ msgstr "" "Тип TOML_: таблица (``[project.scripts]``, ``[project.gui-scripts]``, и " "``[project.entry-points]``)" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr ":ref:`Спецификация точек входа `" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -22597,7 +24723,7 @@ msgstr "" "точек входа `. Ключом таблицы является имя точки входа, а " "значением - ссылка на объект." -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 msgid "" "The ``[project.gui-scripts]`` table corresponds to the ``gui_scripts`` group " "in the :ref:`entry points specification `. Its format is the " @@ -22607,7 +24733,7 @@ msgstr "" "спецификации точек входа `. Ее формат такой же, как и у " "``[project.scripts]``." -#: ../source/specifications/pyproject-toml.rst:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -22620,7 +24746,7 @@ msgstr "" "создавать вложенные подтаблицы, а должны ограничиваться группами точек входа " "только одного уровня." -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -22632,7 +24758,7 @@ msgstr "" "entry-points.gui_scripts]``, поскольку они будут неоднозначными перед лицом " "``[project.scripts]`` и ``[project.gui-scripts]``, соответственно." -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" @@ -22640,7 +24766,7 @@ msgstr "" "Тип TOML_: Массив строк :pep:`508` (``зависимости``), и таблица со " "значениями массивов строк :pep:`508` (``опциональные-зависимости``)" -#: ../source/specifications/pyproject-toml.rst:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra ` и :ref:`Provides-Extra `" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "Зависимости проекта (необязательно)." -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -22666,7 +24792,7 @@ msgstr "" "как корректная строка :pep:`508`. Каждая строка сопоставляется " "непосредственно с записью :ref:`Requires-Dist `." -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -22685,11 +24811,11 @@ msgstr "" "для соответствующего метаданного :ref:`Provides-Extra `." -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "Тип TOML_: массив строк" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" @@ -22697,7 +24823,7 @@ msgstr "" "Соответствующее поле :ref:`core metadata `: :ref:`Dynamic " "`" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -22710,7 +24836,7 @@ msgstr "" "определены и, как ожидается, останутся неопределенными по сравнению с тем, " "что будет предоставлено с помощью инструментов позже." -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 msgid "" "A build back-end MUST honour statically-specified metadata (which means the " "metadata did not list the key in ``dynamic``)." @@ -22718,7 +24844,7 @@ msgstr "" "Бэкэнд сборки ДОЛЖЕН почитать статически заданные метаданные (это означает, " "что в метаданных не указан ключ в ``динамическом``)." -#: ../source/specifications/pyproject-toml.rst:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." @@ -22726,7 +24852,7 @@ msgstr "" "Внутренний модуль сборки ДОЛЖЕН выдать ошибку, если в метаданных указано " "``имя`` в ``dynamic``." -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -22740,7 +24866,7 @@ msgstr "" "случае, т.е. не должно быть возможности, чтобы требуемый ключ не был как-то " "указан в таблице ``[project]``)." -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Optional\", the metadata MAY list it in ``dynamic`` if the expectation is " @@ -22750,7 +24876,7 @@ msgstr "" "\"Optional\", метаданные МОГУТ указывать его в ``dynamic``, если " "предполагается, что сборка бэкенда предоставит данные для ключа позже." -#: ../source/specifications/pyproject-toml.rst:411 +#: ../source/specifications/pyproject-toml.rst:475 msgid "" "Build back-ends MUST raise an error if the metadata specifies a key " "statically as well as being listed in ``dynamic``." @@ -22758,7 +24884,7 @@ msgstr "" "Внутренние компоненты сборки ДОЛЖНЫ выдать ошибку, если метаданные указывают " "ключ статически, а также перечислены в ``динамических``." -#: ../source/specifications/pyproject-toml.rst:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -22770,7 +24896,7 @@ msgstr "" "это единственный способ позволить инструменту заполнить метаданные, и " "пользователь должен согласиться на заполнение)." -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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 " @@ -22780,11 +24906,11 @@ msgstr "" "``dynamic``, но бэкэнд сборки не смог определить данные для него (опускание " "данных, если определено, что это точное значение, допустимо)." -#: ../source/specifications/pyproject-toml.rst:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "Произвольная конфигурация инструментов: таблица ``[tool]``" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -22797,7 +24923,7 @@ msgstr "" "``[tool]``, например, инструмент `flit `_ " "будет хранить свою конфигурацию в ``[tool.flit]``." -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -22810,7 +24936,7 @@ msgstr "" "может использовать подтаблицу ``tool.$NAME`` тогда и только тогда, когда он " "владеет записью для ``$NAME`` в Cheeseshop/PyPI." -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 msgid "" "May 2016: The initial specification of the ``pyproject.toml`` file, with " "just a ``[build-system]`` containing a ``requires`` key and a ``[tool]`` " @@ -22820,7 +24946,7 @@ msgstr "" "только ``[build-system]``, содержащую ключ ``requires`` и таблицу " "``[tool]``, была одобрена через :pep:`518``." -#: ../source/specifications/pyproject-toml.rst:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." @@ -22828,6 +24954,15 @@ msgstr "" "Ноябрь 2020 года: Спецификация таблицы ``[проект]`` была утверждена через :" "pep:`621``." +#: ../source/specifications/pyproject-toml.rst:517 +msgid "" +"December 2024: The ``license`` key was redefined, the ``license-files`` key " +"was added and ``License::`` classifiers were deprecated through :pep:`639`." +msgstr "" +"Декабрь 2024 года: Ключ ``license`` был переопределен, ключ ``license-" +"files`` был добавлен, а классификаторы ``License::`` были устаревшими через :" +"pep:`639`." + #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "Запись установленных проектов" @@ -22970,7 +25105,19 @@ msgstr "" "опущены по усмотрению программы установки. Могут присутствовать " "дополнительные файлы, специфичные для программы установки." -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"described in detail below:" +msgstr "" +"Этот каталог :file:`.dist-info/` может содержать следующие каталоги, " +"подробно описанные ниже:" + +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr ":file:`licenses/`: содержит файлы лицензий." + +#: ../source/specifications/recording-installed-packages.rst:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -22982,7 +25129,7 @@ msgstr "" "`Wheel`. Такие файлы могут быть скопированы в каталог ``.dist-info`` " "установленного проекта." -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -22995,11 +25142,11 @@ msgstr "" "значение см. в `PEP 376 `_." -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "Файл METADATA" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 msgid "" "The ``METADATA`` file contains metadata as described in the :ref:`core-" "metadata` specification, version 1.1 or greater." @@ -23007,7 +25154,7 @@ msgstr "" "Файл ``METADATA`` содержит метаданные, описанные в спецификации :ref:`core-" "metadata``, версии 1.1 или выше." -#: ../source/specifications/recording-installed-packages.rst:88 +#: ../source/specifications/recording-installed-packages.rst:93 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 " @@ -23017,11 +25164,11 @@ msgstr "" "если необходимые метаданные ядра отсутствуют, программа установки должна " "сообщить об ошибке и не установить проект." -#: ../source/specifications/recording-installed-packages.rst:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "Файл RECORD" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 msgid "" "The ``RECORD`` file holds the list of installed files. It is a CSV file " "containing one record (line) per installed file." @@ -23029,7 +25176,7 @@ msgstr "" "Файл ``RECORD`` содержит список установленных файлов. Это CSV-файл, " "содержащий по одной записи (строке) на каждый установленный файл." -#: ../source/specifications/recording-installed-packages.rst:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" @@ -23037,19 +25184,19 @@ msgstr "" "Диалект CSV должен быть доступен для чтения с помощью стандартного " "``reader`` модуля Python ``csv``:" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "разделитель полей: ``,`` (запятая)," -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "Кавычки: ``''`` (прямая двойная кавычка)," -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "терминатор строки: либо ``\\r\\n``, либо ``\\n``." -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 msgid "" "Each record is composed of three elements: the file's **path**, the **hash** " "of the contents, and its **size**." @@ -23057,7 +25204,7 @@ msgstr "" "Каждая запись состоит из трех элементов: **путь** файла, **хэш** его " "содержимого и **размер**." -#: ../source/specifications/recording-installed-packages.rst:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -23069,7 +25216,7 @@ msgstr "" "Windows каталоги могут быть разделены прямыми или обратными слешами (``/`` " "или ``\\``)." -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -23083,7 +25230,7 @@ msgstr "" "кодировки urlsafe-base64-nopad (:py:func:`base64.urlsafe_b64encode(digest) " "` с удаленным ``=`` в конце)." -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 msgid "" "The *size* is either the empty string, or file's size in bytes, as a base 10 " "integer." @@ -23091,7 +25238,7 @@ msgstr "" "Параметр *size* - это либо пустая строка, либо размер файла в байтах, как " "целое число по основанию 10." -#: ../source/specifications/recording-installed-packages.rst:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -23105,7 +25252,7 @@ msgstr "" "рекомендуется, так как это мешает проверке целостности установленного " "проекта." -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -23119,7 +25266,7 @@ msgstr "" "необязательными. В частности, должно быть перечислено содержимое каталога ``." "dist-info`` (включая сам файл ``RECORD``). Каталоги перечислять не следует." -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 msgid "" "To completely uninstall a package, a tool needs to remove all files listed " "in ``RECORD``, all ``.pyc`` files (of all optimization levels) corresponding " @@ -23130,11 +25277,11 @@ msgstr "" "соответствующие удаленным файлам ``.py``, и все каталоги, опустошенные в " "результате деинсталляции." -#: ../source/specifications/recording-installed-packages.rst:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "Вот пример фрагмента возможного файла ``RECORD``::" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -23146,7 +25293,7 @@ msgstr "" "распространяется на инструменты, которые полагаются на другие источники " "информации, такие как системные менеджеры пакетов в дистрибутивах Linux.)" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -23163,11 +25310,11 @@ msgstr "" "останутся незарегистрированные файлы (возможно, это приведет к появлению " "пакета-зомби в пространстве имен)." -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "Файл INSTALLER" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -23180,16 +25327,16 @@ msgstr "" "имя команды. В противном случае в нем должна содержаться печатаемая ASCII-" "строка." -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" "Файл может быть завершен нулем или несколькими пробельными символами ASCII." -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "Вот примеры двух возможных файлов ``INSTALLER``::" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -23201,11 +25348,11 @@ msgstr "" "``RECORD``, он может предположить, что инструмент, названный в " "``INSTALLER``, может выполнить удаление." -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "Файл entry_points.txt" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -23217,15 +25364,15 @@ msgstr "" "другим кодом, включая консольные сценарии и другие приложения, которые " "программа установки сделала доступными для выполнения." -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "Его подробная спецификация находится по адресу :ref:`entry-points`." -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "Файл direct_url.json" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 msgid "" "This file MUST be created by installers when installing a distribution from " "a requirement specifying a direct URL reference (including a VCS URL)." @@ -23233,15 +25380,35 @@ msgstr "" "Этот файл ДОЛЖЕН создаваться программой установки при установке дистрибутива " "из требования, указывающего прямую URL-ссылку (включая VCS URL)." -#: ../source/specifications/recording-installed-packages.rst:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "Его подробная спецификация находится по адресу :ref:`direct-url`." -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "Подкаталог :file:`licenses/`" + +#: ../source/specifications/recording-installed-packages.rst:230 +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 "" +"Если версия метаданных 2.4 или выше и указано одно или несколько полей " +"``License-File``, каталог :file:`.dist-info/` ДОЛЖЕН содержать подкаталог :" +"file:`licenses/`, который ДОЛЖЕН содержать файлы, перечисленные в полях " +"``License-File`` в файле :file:`METADATA`` по их соответствующим путям " +"относительно каталога :file:`licenses/`. Любые файлы в этом каталоге ДОЛЖНЫ " +"быть скопированы с колеса средствами установки." + +#: ../source/specifications/recording-installed-packages.rst:239 msgid "Intentionally preventing changes to installed packages" msgstr "Намеренное предотвращение изменений в установленных пакетах" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -23256,13 +25423,13 @@ msgstr "" "поскольку это может привести к проблемам совместимости с более широкой " "средой." -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" "Чтобы добиться этого, пострадавшие инструменты должны предпринять следующие " "шаги:" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -23275,7 +25442,7 @@ msgstr "" "инструменту, или полностью удалите файл, если содержимое пакета " "отслеживается и управляется другими средствами)" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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 " @@ -23286,7 +25453,7 @@ msgstr "" "``RECORD``, выдавать более точные уведомления об ошибках при запросе на " "модификацию затронутых пакетов)" -#: ../source/specifications/recording-installed-packages.rst:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -23301,7 +25468,7 @@ msgstr "" "предоставляемыми платформой (при этом оба места должны быть указаны в пути " "импорта Python по умолчанию)." -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:" @@ -23311,7 +25478,7 @@ msgstr "" "установку дополнительных пакетов с помощью инструментов, специфичных для " "Python. Для таких случаев обратитесь к :ref:`externally-managed-environments`" -#: ../source/specifications/recording-installed-packages.rst:254 +#: ../source/specifications/recording-installed-packages.rst:270 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 " @@ -23321,7 +25488,7 @@ msgstr "" "pep:`376`. В то время она была известна как *База данных установленных " "дистрибутивов Python*." -#: ../source/specifications/recording-installed-packages.rst:257 +#: ../source/specifications/recording-installed-packages.rst:273 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` " @@ -23331,7 +25498,7 @@ msgstr "" "`610``. Он только упоминается на этой странице; полное определение см. в :" "ref:`direct-url`." -#: ../source/specifications/recording-installed-packages.rst:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -23361,17 +25528,29 @@ msgstr "Простой API репозитория" #: ../source/specifications/simple-repository-api.rst:8 msgid "" +"The keywords \"**MUST**\", \"**MUST NOT**\", \"**REQUIRED**\", " +"\"**SHALL**\", \"**SHALL NOT**\", \"**SHOULD**\", \"**SHOULD NOT**\", " +"\"**RECOMMENDED**\", \"**MAY**\", and \"**OPTIONAL**\"\" in this document " +"are to be interpreted as described in :rfc:`2119`." +msgstr "" +"Ключевые слова \"**MUST**\", \"**MUST NOT**\", \"**REQUIRED**\", " +"\"**SHALL**\", \"**SHALL NOT**\", \"**SHOULD**\", \"**SHOULD NOT**\", " +"\"**RECOMMENDED**\", \"**MAY**\" и \"**OPTIONAL**\" в этом документе должны " +"интерпретироваться, как описано в :rfc:`2119`." + +#: ../source/specifications/simple-repository-api.rst:13 +msgid "" "The interface for querying available package versions and retrieving " "packages from an index server comes in two forms: HTML and JSON." msgstr "" "Интерфейс для запроса доступных версий пакетов и получения пакетов с " "индексного сервера представлен в двух формах: HTML и JSON." -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "Базовый HTML API" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -23383,7 +25562,7 @@ msgstr "" "назван \"простым\" репозиторием из-за того, что базовый URL PyPI - ``https://" "pypi.org/simple/``." -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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/" @@ -23393,21 +25572,21 @@ msgstr "" "URL (поэтому, учитывая URL PyPI, URL ``/foo/`` будет ``https://pypi.org/" "simple/foo/``." -#: ../source/specifications/simple-repository-api.rst:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" "Внутри репозитория корневой URL (``/`` в данной спецификации представляет " "собой базовый URL) **ДОЛЖЕН** быть корректной HTML5-страницей с одним " "якорным элементом для каждого проекта в репозитории. Текст тега якоря " "**ДОЛЖЕН** быть названием проекта, а атрибут href ** ДОЛЖЕН** ссылаться на " -"URL для этого конкретного проекта. В качестве примера::" +"URL для этого конкретного проекта. В качестве примера:" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -23435,13 +25614,13 @@ msgstr "" "(например, ``sha256``), а ``<хэш-значение>`` - шестнадцатеричное кодирование " "дайджеста." -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" "В дополнение к вышесказанному, на API накладываются следующие ограничения:" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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 " @@ -23451,7 +25630,7 @@ msgstr "" "``/``, а хранилище **ДОЛЖНО** перенаправлять URL-адреса без ``/``, чтобы " "добавить ``/`` в конец." -#: ../source/specifications/simple-repository-api.rst:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." @@ -23459,7 +25638,7 @@ msgstr "" "URL-адреса могут быть как абсолютными, так и относительными, если они " "указывают на правильное местоположение." -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." @@ -23467,7 +25646,7 @@ msgstr "" "Нет никаких ограничений на то, где должны быть размещены файлы относительно " "хранилища." -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 msgid "" "There may be any other HTML elements on the API pages as long as the " "required anchor elements exist." @@ -23475,7 +25654,7 @@ msgstr "" "На страницах API могут быть любые другие HTML-элементы при условии наличия " "необходимых элементов якоря." -#: ../source/specifications/simple-repository-api.rst:68 +#: ../source/specifications/simple-repository-api.rst:75 msgid "" "Repositories **MAY** redirect unnormalized URLs to the canonical normalized " "URL (e.g. ``/Foobar/`` may redirect to ``/foobar/``), however clients **MUST " @@ -23486,7 +25665,7 @@ msgstr "" "foobar/``), однако клиенты **НЕ ДОЛЖНЫ** полагаться на это перенаправление и " "**МОГУТ** запрашивать нормализованный URL." -#: ../source/specifications/simple-repository-api.rst:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -23499,7 +25678,7 @@ msgstr "" "```sha256``, ```sha384``, ```sha512``). В настоящее время рекомендуется " "использовать ``sha256``." -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -23513,7 +25692,53 @@ msgstr "" "соответствующую подпись, подпись будет находиться по адресу ``/пакеты/" "HolyGrail-1.0.tar.gz.asc``." -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" +"Хранилище **МОЖЕТ** включать атрибут ``data-core-metadata`` в ссылку на файл." + +#: ../source/specifications/simple-repository-api.rst:94 +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 "" +"Хранилище **ДОЛЖНО** предоставить хэш файла основных метаданных в качестве " +"значения атрибута ``data-core-metadata``, используя синтаксис " +"``=``, где ```` - это имя используемой хэш-" +"функции, а ```` - шестнадцатеричный дайджест. Хранилище **МОЖЕТ** " +"использовать ``true`` в качестве значения атрибута, если хэш недоступен." + +#: ../source/specifications/simple-repository-api.rst:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" +"Хранилище **МОЖЕТ** включать атрибут ``data-dist-info-metadata`` в ссылку на " +"файл." + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" +"Индексные клиенты **МОГУТ** использовать этот ключ, если он присутствует, в " +"качестве традиционного запасного варианта для ``data-core-metadata``." + +#: ../source/specifications/simple-repository-api.rst:108 +msgid "" +"``data-dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``data-core-metadata`` with :pep:`714`." +msgstr "" +"``data-dist-info-metadata`` была стандартизирована в :pep:`658` и " +"переименована в ``data-core-metadata`` в :pep:`714`." + +#: ../source/specifications/simple-repository-api.rst:111 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 " @@ -23525,21 +25750,21 @@ msgstr "" "подписи. Репозитории, которые делают это, **ДОЛЖНЫ** включать его в каждую " "ссылку." -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -"Репозиторий **МОЖЕТ** включать атрибут ``данные-запросы-python`` в ссылку на " -"файл. Он раскрывает поле метаданных : ссылка:``ядро-метаданные-запросы-" -"python`` для соответствующего релиза. Если это поле присутствует, " -"инструменты установки **ДОЛЖНЫ** игнорировать загрузку при установке на " -"версию Python, которая не удовлетворяет требованию. Например::" +"Репозиторий **МОЖЕТ** включать атрибут ``data-requires-python`` в ссылку на " +"файл. Он раскрывает поле метаданных :ref:`core-metadata-requires-python` для " +"соответствующего релиза. При наличии этого атрибута инструменты установки " +"**ДОЛЖНЫ** игнорировать загрузку при установке на версию Python, которая не " +"удовлетворяет этому требованию. Например:" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." @@ -23547,7 +25772,7 @@ msgstr "" "В значении атрибута < и > должны быть закодированы в HTML как ``<`` и " "``>``, соответственно." -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -23555,18 +25780,29 @@ msgid "" "represent a `secure origin `_." msgstr "" +"Хранилище **МОЖЕТ** включать атрибут ``data-provenance`` в ссылку на файл. " +"Значение этого атрибута **ДОЛЖНО** представлять собой полностью определенный " +"URL, сигнализирующий о том, что информацию о происхождении файла можно найти " +"по этому URL. Этот URL **ДОЛЖЕН** представлять собой `secure origin `_." -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "Атрибут ``data-provenance`` был добавлен в API версии 1.3." + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" +"Формат связанного провенанса определен в :ref:`index-hosted-attestations`." -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "Нормализованные названия" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -23582,11 +25818,11 @@ msgstr "" "символов ``.``, ``-`` или ``_`` должны быть заменены одним символом ``-``. " "Это можно реализовать на языке Python с помощью модуля ``re``::" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "Добавление поддержки \"Янк\" в простой API" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -23602,7 +25838,7 @@ msgstr "" "\"выдернут\", и не должен выбираться программой установки, за исключением " "особых случаев." -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -23614,7 +25850,7 @@ msgstr "" "выдернут. Инструменты, обрабатывающие простой API репозитория, **МОГУТ** " "отображать эту строку для конечных пользователей." -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -23626,11 +25862,11 @@ msgstr "" "пользователи API **МОГУТ** быть в состоянии справиться с тем, что файл с " "атрибутом yanked может быть \"отменен\" (и даже снова отменен)." -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "Установщики" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -23646,7 +25882,7 @@ msgstr "" "первоначальному приказу установить удаленный файл, то он ведет себя так, как " "будто он не был удален." -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -23662,7 +25898,7 @@ msgstr "" "**ДОЛЖНА** выбрать политику, которая следует духу вышеуказанного намерения и " "предотвращает \"новые\" зависимости от выдернутых релизов/файлов." -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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 " @@ -23672,7 +25908,7 @@ msgstr "" "вписать это в общее использование своего инсталлятора. Однако можно " "предложить два подхода:" -#: ../source/specifications/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -23690,7 +25926,7 @@ msgstr "" "спецификаторы>` для таких вещей, как локальные версии, нулевые подстановки и " "т.д." -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -23703,7 +25939,7 @@ msgstr "" "этом случае выдернутый файл **ДОЛЖЕН** не использоваться при создании или " "обновлении файла блокировки из какого-либо входного файла или команды." -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -23719,15 +25955,15 @@ msgstr "" "пользователю более конкретную информацию о том, почему этот файл был " "выдернут." -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "Зеркала" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "Как правило, зеркала можно обрабатывать одним из двух способов:" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 msgid "" "They may choose to omit them from their simple repository API completely, " "providing a view over the repository that shows only \"active\", unyanked " @@ -23737,7 +25973,7 @@ msgstr "" "предоставляя представление репозитория, в котором отображаются только " "\"активные\", незаанкетированные файлы." -#: ../source/specifications/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." @@ -23745,7 +25981,7 @@ msgstr "" "Они могут выбрать включение выдернутых файлов и дополнительно отразить " "атрибут ``данные выдернуты``." -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." @@ -23753,37 +25989,37 @@ msgstr "" "Зеркала **МОГУТ НЕ** зеркалировать выдернутый файл, не зеркалируя также " "атрибут ``данные выдернуты`` для него." -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "Версионирование простого API PyPI" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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 "" -"Эта спецификация предлагает включать мета-тег в ответы на каждый успешный " -"запрос к простой странице API, который содержит атрибут name \"pypi: " -"репозиторий-версия\", и содержимое, которое является : ссылка:`спецификация " -"версий <версия-спецификаторы>` совместимым номером версии, который далее " -"ограничивается ТОЛЬКО Major.Minor, и ни одной из дополнительных " -"возможностей, поддерживаемых :ссылка:`спецификация версий <версия-" -"спецификаторы>`." +"Эта спецификация предлагает включение мета-тега в ответы на каждый успешный " +"запрос к простой странице API, который содержит атрибут имени ``pypi:" +"repository-version`` и содержимое, которое является совместимым с :ref:" +"``спецификацией версий ` номером версии, который далее " +"ограничивается тем, что он может быть только Major.Minor, и ни одной из " +"дополнительных возможностей, поддерживаемых :ref:``спецификацией версий " +"`." -#: ../source/specifications/simple-repository-api.rst:214 -msgid "This would end up looking like::" -msgstr "В итоге это будет выглядеть так::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" +msgstr "В итоге это будет выглядеть так:" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "При интерпретации версии репозитория:" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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 " @@ -23793,7 +26029,7 @@ msgstr "" "несовместимом с обратной стороной, когда существующие клиенты уже не смогут " "полноценно использовать API." -#: ../source/specifications/simple-repository-api.rst:223 +#: ../source/specifications/simple-repository-api.rst:258 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 " @@ -23803,7 +26039,7 @@ msgstr "" "изменении обратной совместимости, так что ожидается, что существующие " "клиенты все еще смогут полноценно использовать API." -#: ../source/specifications/simple-repository-api.rst:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -23817,7 +26053,7 @@ msgstr "" "использовать API, и это может включать добавление, модификацию или удаление " "существующих функций." -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -23833,22 +26069,54 @@ msgstr "" "который жил по адресу /v2/, но который был бы запутан, если бы в репозитории-" "версия была установлена версия >= 2)." -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "История версий API" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"This section contains only an abbreviated history of changes, as marked by " +"the API version number. For a full history of changes including changes made " +"before API versioning, see :ref:`History `." msgstr "" -"Эта спецификация устанавливает текущую версию API на \"1.0\" и ожидает, что " -"будущие спецификации, которые будут развивать простой API, будут увеличивать " -"номер минорной версии." +"Этот раздел содержит только сокращенную историю изменений, отмеченную " +"номером версии API. Полную историю изменений, включая изменения, сделанные " +"до появления версий API, смотрите в :ref:`History `." -#: ../source/specifications/simple-repository-api.rst:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" +"Версия API 1.0: Начальная версия API, объявленная с помощью :pep:`629`." + +#: ../source/specifications/simple-repository-api.rst:283 +msgid "" +"API version 1.1: Added ``versions``, ``files[].size``, and ``files[].upload-" +"time`` metadata to the JSON serialization, declared with :pep:`700`." +msgstr "" +"API версии 1.1: Добавлены метаданные ``версии``, ``файлы[].размер`` и " +"``файлы[].время загрузки`` в сериализацию JSON, объявленную с помощью :pep:" +"`700``." + +#: ../source/specifications/simple-repository-api.rst:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" +"API версии 1.2: Добавлены метаданные репозитория \"треки\", объявленные с " +"помощью :pep:`708`." + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" +"API версии 1.3: Добавлены метаданные о происхождении, объявленные с помощью :" +"pep:`740`." + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "Клиенты" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 msgid "" "Clients interacting with the simple API **SHOULD** introspect each response " "for the repository version, and if that data does not exist **MUST** assume " @@ -23858,7 +26126,7 @@ msgstr "" "на версию хранилища, и если эти данные отсутствуют, **ОБЯЗАНЫ** считать, что " "это версия 1.0." -#: ../source/specifications/simple-repository-api.rst:252 +#: ../source/specifications/simple-repository-api.rst:295 msgid "" "When encountering a major version greater than expected, clients **MUST** " "hard fail with an appropriate error message for the user." @@ -23867,7 +26135,7 @@ msgstr "" "**ДОЛЖНЫ** жестко отказывать с соответствующим сообщением об ошибке для " "пользователя." -#: ../source/specifications/simple-repository-api.rst:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." @@ -23875,7 +26143,7 @@ msgstr "" "При столкновении с минорной версией, превышающей ожидаемую, клиенты " "**ДОЛЖНЫ** предупреждать пользователей соответствующим сообщением." -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 msgid "" "Clients **MAY** still continue to use feature detection in order to " "determine what features a repository uses." @@ -23883,11 +26151,11 @@ msgstr "" "Клиенты **МОГУТ** продолжать использовать обнаружение функций, чтобы " "определить, какие функции использует хранилище." -#: ../source/specifications/simple-repository-api.rst:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "Предоставление метаданных распространения в API простого репозитория" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -23901,7 +26169,7 @@ msgstr "" "представленный тегом якоря, **МОЖЕТ** содержать файл метаданных Core, " "который не будет изменен при обработке и/или установке дистрибутива." -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -23921,7 +26189,7 @@ msgstr "" "ref:`в базовой спецификации HTML API <простой репозиторий-апи-база>` " "указывается местоположение файла подписи GPG." -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -23937,11 +26205,11 @@ msgstr "" "**МОЖЕТ** использовать ``true`` в качестве значения атрибута, если хэш " "недоступен." -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "Обратная совместимость" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 msgid "" "If an anchor tag lacks the ``data-dist-info-metadata`` attribute, tools are " "expected to revert to their current behaviour of downloading the " @@ -23951,7 +26219,7 @@ msgstr "" "метаданные``, ожидается, что инструменты вернутся к своему текущему " "поведению загрузки дистрибутива для проверки метаданных." -#: ../source/specifications/simple-repository-api.rst:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -23964,11 +26232,11 @@ msgstr "" "метаданных. Это похоже на то, как предыдущие добавления атрибута ``данные-`` " "предполагают работу существующих инструментов." -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "Простой API на основе JSON для индексов пакетов Python" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -23981,7 +26249,7 @@ msgstr "" "api-базовая>`) должны быть сериализованы с помощью `JSON `_." -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -23997,7 +26265,7 @@ msgstr "" "согласование содержимого, чтобы позволить клиенту и серверу выбрать " "правильный формат сериализации для обслуживания, т.е. либо HTML, либо JSON." -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -24013,7 +26281,7 @@ msgstr "" "для существующих возможностей, эта спецификация не изменяет существующую " "версию ``1.0``, а вместо этого просто описывает, как сериализовать ее в JSON." -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -24025,7 +26293,7 @@ msgstr "" "изменения в новом формате приведут к тому, что существующие клиенты больше " "не смогут понять этот формат." -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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 " @@ -24035,7 +26303,7 @@ msgstr "" "добавляются или удаляются функции, но ожидается, что существующие клиенты " "будут продолжать понимать формат." -#: ../source/specifications/simple-repository-api.rst:338 +#: ../source/specifications/simple-repository-api.rst:381 msgid "" "Changes that would not result in existing clients being unable to " "meaningfully understand the format and which do not represent features being " @@ -24045,7 +26313,7 @@ msgstr "" "понять формат, и которые не представляют собой добавления или удаления " "функций, могут происходить без изменения номера версии." -#: ../source/specifications/simple-repository-api.rst:342 +#: ../source/specifications/simple-repository-api.rst:385 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 " @@ -24056,7 +26324,7 @@ msgstr "" "вносящих какие-либо изменения в API, чтобы исследовать и решить, должно ли " "это изменение увеличивать мажорную или минорную версию." -#: ../source/specifications/simple-repository-api.rst:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -24070,7 +26338,7 @@ msgstr "" "быть синхронизированы, но специфика того, как функция сериализуется в каждом " "формате, может отличаться, включая то, присутствует ли эта функция вообще." -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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 " @@ -24080,11 +26348,11 @@ msgstr "" "URL, которые возвращают данные, интерпретация которых определяется версией " "этих данных, а затем сериализуются в целевой формат сериализации." -#: ../source/specifications/simple-repository-api.rst:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "Сериализация JSON" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 msgid "" "The URL structure from :ref:`the base HTML API specification ` still applies, as this spec only adds an additional " @@ -24094,7 +26362,7 @@ msgstr "" "апи-база>` по-прежнему применима, так как эта спецификация лишь добавляет " "дополнительный формат сериализации для уже существующего API." -#: ../source/specifications/simple-repository-api.rst:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" @@ -24102,7 +26370,7 @@ msgstr "" "Следующие ограничения применяются ко всем сериализованным ответам JSON, " "описанным в данной спецификации:" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." @@ -24110,13 +26378,7 @@ msgstr "" "Все ответы JSON *всегда* будут представлять собой объект JSON, а не массив " "или другой тип." -#: ../source/specifications/simple-repository-api.rst:372 -#, fuzzy -#| msgid "" -#| "While JSON doesn't natively support an 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." +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -24128,7 +26390,7 @@ msgstr "" "правильное местоположение. Если они относительные, то они относятся к " "текущему URL, как если бы это был HTML." -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 msgid "" "Additional keys may be added to any dictionary objects in the API responses " "and clients **MUST** ignore keys that they don't understand." @@ -24136,7 +26398,7 @@ msgstr "" "Дополнительные ключи могут быть добавлены к любым объектам словаря в ответах " "API, и клиенты **МОГУТ** игнорировать ключи, которые они не понимают." -#: ../source/specifications/simple-repository-api.rst:380 +#: ../source/specifications/simple-repository-api.rst:423 msgid "" "All JSON responses will have a ``meta`` key, which contains information " "related to the response itself, rather than the content of the response." @@ -24144,7 +26406,7 @@ msgstr "" "Все JSON-ответы имеют ключ ``meta``, который содержит информацию, " "относящуюся к самому ответу, а не к его содержимому." -#: ../source/specifications/simple-repository-api.rst:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." @@ -24166,11 +26428,20 @@ msgstr "" "Все требования : ссылка:`базовой спецификации HTML API <простой репозиторий-" "апи-база>`, не относящиеся к HTML, остаются в силе." -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" +"Ключи (любого уровня) с ведущим символом подчеркивания зарезервированы как " +"частные для использования индексным сервером. Ни один будущий стандарт не " +"будет присваивать значение такому ключу." + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "Список проектов" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 msgid "" "The root URL ``/`` for this spec (which represents the base URL) will be a " "JSON encoded dictionary which has a two keys:" @@ -24178,7 +26449,7 @@ msgstr "" "Корневой URL ``/`` для этой спецификации (который представляет собой базовый " "URL) будет представлять собой словарь в кодировке JSON, имеющий два ключа:" -#: ../source/specifications/simple-repository-api.rst:399 +#: ../source/specifications/simple-repository-api.rst:444 msgid "" "``projects``: An array where each entry is a dictionary with a single key, " "``name``, which represents string of the project name." @@ -24187,8 +26458,8 @@ msgstr "" "одним ключом, ``название``, который представляет собой строку с названием " "проекта." -#: ../source/specifications/simple-repository-api.rst:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." @@ -24196,12 +26467,12 @@ msgstr "" "``meta``: Общие метаданные ответа, как `описано ранее `__." -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "В качестве примера:" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -24217,7 +26488,7 @@ msgstr "" "на то, что это ненормализованное или нормализованное имя, - это полагаться " "на детали реализации данного репозитория." -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, version " +"strings currently cannot be required to be valid VSS versions, and therefore " +"cannot be assumed to be orderable using the VSS rules. However, servers " +"**SHOULD** use normalized VSS versions where possible." +msgstr "" +"Поскольку серверы могут содержать \"устаревшие\" данные, полученные до " +"принятия :ref:`the version specifiers specification (VSS) `, в настоящее время нельзя требовать, чтобы строки версий были " +"действительными версиями VSS, и поэтому нельзя считать, что они могут быть " +"упорядочены с использованием правил VSS. Тем не менее, серверы **ДОЛЖНЫ** " +"использовать нормализованные версии VSS, где это возможно." + +#: ../source/specifications/simple-repository-api.rst:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "Ключ ``версии`` был добавлен в API версии 1.1." + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "Каждый отдельный словарь файлов имеет следующие ключи:" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "``имя файла``: Имя представляемого файла." -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "``url``: URL, с которого может быть получен файл." -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -24292,7 +26606,7 @@ msgstr "" "вообще ничего). Имена хэшей **ОБЯЗАТЕЛЬНО** всегда должны быть приведены к " "нижнему регистру." -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 msgid "" "The ``hashes`` dictionary **MUST** be present, even if no hashes are " "available for the file, however it is **HIGHLY** recommended that at least " @@ -24302,7 +26616,7 @@ msgstr "" "однако **НАСТОЯТЕЛЬНО** рекомендуется всегда включать хотя бы один " "безопасный, гарантированно доступный хэш." -#: ../source/specifications/simple-repository-api.rst:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -24319,7 +26633,7 @@ msgstr "" "включен. На момент создания данной спецификации рекомендуется использовать " "``sha256``." -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -24331,7 +26645,7 @@ msgstr "" "инструменты установки **ДОЛЖНЫ** игнорировать загрузку при установке на " "версию Python, которая не удовлетворяет этому требованию." -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 msgid "" "Unlike ``data-requires-python`` in :ref:`the base HTML API specification " "`, the ``requires-python`` key does not require " @@ -24341,24 +26655,24 @@ msgstr "" "HTML API ``, ключ ``запросы-python`` не требует " "никакого специального экранирования, кроме того, что JSON делает естественно." -#: ../source/specifications/simple-repository-api.rst:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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 "" -"``dist-info-метаданные``: **опциональный** ключ, указывающий, что метаданные " -"для этого файла доступны в том же месте, что указано в : ссылка:" -"`спецификация файла метаданных API ` " -"(``{файл_url}. метаданные``). Там, где он присутствует, он **МОЖЕТ** быть " -"либо булевым значением, указывающим, есть ли у файла связанный файл " -"метаданных, либо словарем, отображающим имена хэшей на шестнадцатеричный " -"дайджест хэша метаданных." +"``core-metadata``: **опциональный** ключ, указывающий, что метаданные для " +"этого файла доступны в том же месте, которое указано в :ref:спецификации " +"файла метаданных API ` (``{file_url}." +"metadata``). Там, где он присутствует, он **МОЖЕТ** быть либо булевым " +"значением, указывающим, есть ли у файла связанный файл метаданных, либо " +"словарем, отображающим имена хэшей на шестнадцатеричный дайджест хэша " +"метаданных." -#: ../source/specifications/simple-repository-api.rst:486 +#: ../source/specifications/simple-repository-api.rst:554 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 " @@ -24367,7 +26681,7 @@ msgstr "" "Если это словарь хэшей, а не булевых значений, то все те же требования и " "рекомендации, что и для ключа ``хэши``, справедливы и для этого ключа." -#: ../source/specifications/simple-repository-api.rst:490 +#: ../source/specifications/simple-repository-api.rst:558 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 " @@ -24377,7 +26691,7 @@ msgstr "" "не существовать. Если значение ключа истинно, то файл метаданных " "присутствует, а если ложно, то нет." -#: ../source/specifications/simple-repository-api.rst:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." @@ -24385,7 +26699,31 @@ msgstr "" "Рекомендуется, чтобы серверы по возможности предоставляли хэши файлов " "метаданных." -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" +"``dist-info-metadata``: **опциональный**, устаревший псевдоним для ``core-" +"metadata``." + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" +"Индексные клиенты **МОГУТ** использовать этот ключ, если он присутствует, в " +"качестве традиционного запасного варианта для ``ядра-метаданных``." + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" +"``dist-info-metadata`` был стандартизирован в :pep:`658` и переименован в " +"``core-metadata`` в :pep:`714`." + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -24400,7 +26738,7 @@ msgstr "" "Если этот ключ не существует, то подпись может существовать, а может и не " "существовать." -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -24418,15 +26756,65 @@ msgstr "" "``url``, был \"Yanked\" согласно : ссылка:спецификации API yank <простой " "репозиторий-апи-yank>`." -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" +"``размер``: **обязательный** ключ. Он **ДОЛЖЕН** содержать целое число, " +"которое представляет собой размер файла в байтах." + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "Ключ ``размер`` был добавлен в API версии 1.1." + +#: ../source/specifications/simple-repository-api.rst:593 +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 "" +"``время загрузки``: **опциональный** ключ, который, если присутствует, " +"**ДОЛЖЕН** содержать действительную строку даты/времени ISO 8601 в формате " +"``yyyy-mm-ddThh:mm:ss.ffffffZ``, которая представляет время, когда файл был " +"загружен в индекс." + +#: ../source/specifications/simple-repository-api.rst:597 +msgid "" +"As indicated by the ``Z`` suffix, the upload time **MUST** use the UTC " +"timezone. The fractional seconds part of the timestamp (the ``.ffffff`` " +"part) is optional, and if present may contain up to 6 digits of precision. " +"If a server does not record upload time information for a file, it **MAY** " +"omit the ``upload-time`` key." +msgstr "" +"Как указывает суффикс ``Z'', время загрузки **МОЖНО** использовать часовой " +"пояс UTC. Дробная секундная часть временной метки (часть ``.ffffff``) " +"необязательна, и если она присутствует, то может содержать до 6 цифр " +"точности. Если сервер не записывает информацию о времени загрузки файла, он " +"**МОЖЕТ** опустить ключ ``upload-time``." + +#: ../source/specifications/simple-repository-api.rst:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "Ключ ``время загрузки`` был добавлен в API версии 1.1." + +#: ../source/specifications/simple-repository-api.rst:606 msgid "" "``provenance``: An **optional** key which, if present **MUST** be either a " "JSON string or ``null``. If not ``null``, it **MUST** be a URL to the file's " "associated provenance, with the same rules as ``data-provenance`` in the :" "ref:`base HTML API specification `." msgstr "" +"``provenance``: **опциональный** ключ, который, если присутствует, " +"**ДОЛЖЕН** быть либо строкой JSON, либо ``null``. Если не ``null``, то " +"**ДОЛЖЕН** быть URL-адресом связанного с файлом провенанса, по тем же " +"правилам, что и ``data-provenance`` в спецификации HTML API ` в :ref:`base HTML API`." -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "Поле ``provenance`` было добавлено в API версии 1.3." + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -24514,11 +26902,11 @@ msgstr "" "далее определяет ``текст/html`` как псевдоним для типа содержимого " "``приложение/vnd.pypi. простой.v1+html``." -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "Выбор версии + формата" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -24532,7 +26920,7 @@ msgstr "" "новая основная версия API могла быть добавлена без нарушения работы " "существующих клиентов, ожидающих предыдущую версию API." -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 msgid "" "While this spec won't fully describe the entirety of server-driven content " "negotiation, the flow is roughly:" @@ -24550,7 +26938,7 @@ msgstr "" "Хотя эта спецификация не может полностью описать всю процедуру согласования " "содержимого на сервере, ее суть примерно такова:" -#: ../source/specifications/simple-repository-api.rst:599 +#: ../source/specifications/simple-repository-api.rst:705 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." @@ -24558,7 +26946,7 @@ msgstr "" "Клиент отправляет HTTP-запрос, содержащий заголовок ``Принять``, в котором " "перечислены все типы содержимого версии+формата, которые он способен понять." -#: ../source/specifications/simple-repository-api.rst:601 +#: ../source/specifications/simple-repository-api.rst:707 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 " @@ -24568,7 +26956,7 @@ msgstr "" "содержимого, затем возвращает ответ, используя этот тип содержимого " "(рассматривая отсутствие заголовка ``принять`` как ``принять: */*``)." -#: ../source/specifications/simple-repository-api.rst:604 +#: ../source/specifications/simple-repository-api.rst:710 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 " @@ -24577,7 +26965,7 @@ msgstr "" "Если сервер не поддерживает ни один из типов содержимого в заголовке " "``принять``, он может выбрать один из 3 вариантов ответа:" -#: ../source/specifications/simple-repository-api.rst:608 +#: ../source/specifications/simple-repository-api.rst:714 msgid "" "Select a default content type other than what the client has requested and " "return a response with that." @@ -24585,7 +26973,7 @@ msgstr "" "Выберите тип содержимого по умолчанию, отличный от того, что запросил " "клиент, и верните ответ с этим типом." -#: ../source/specifications/simple-repository-api.rst:610 +#: ../source/specifications/simple-repository-api.rst:716 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 " @@ -24595,7 +26983,7 @@ msgstr "" "запрошенных типов содержимого не был доступен, и сервер не смог или не " "захотел выбрать тип содержимого по умолчанию для ответа." -#: ../source/specifications/simple-repository-api.rst:613 +#: ../source/specifications/simple-repository-api.rst:719 msgid "" "Return a HTTP ``300 Multiple Choices`` response that contains a list of all " "of the possible responses that could have been chosen." @@ -24603,7 +26991,7 @@ msgstr "" "Возвращает ответ HTTP ``300 Множество вариантов``, содержащий список всех " "возможных ответов, которые могли быть выбраны." -#: ../source/specifications/simple-repository-api.rst:615 +#: ../source/specifications/simple-repository-api.rst:721 msgid "" "The client interprets the response, handling the different types of " "responses that the server may have responded with." @@ -24611,7 +26999,7 @@ msgstr "" "Клиент интерпретирует ответ, обрабатывая различные типы ответов, которые мог " "дать сервер." -#: ../source/specifications/simple-repository-api.rst:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -24623,7 +27011,7 @@ msgstr "" "**ДОЛЖНЫ** быть готовы обрабатывать все возможные ответы тем способом, " "который наиболее удобен для них." -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -24641,15 +27029,7 @@ msgstr "" "случае, так что в лучшем случае этот ответ будет рассматриваться так же, как " "и ошибка ``406 не принято``." -#: ../source/specifications/simple-repository-api.rst:630 -#, fuzzy -#| 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. A ``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``)." +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -24657,14 +27037,13 @@ msgid "" "pypi.simple.latest+json`` request that returns a ``v1.x`` response should " "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -"Эта спецификация **дополняет** требование о том, что если используется мета-" -"версия ``последней``, сервер **ДОЛЖЕН** отвечать типом содержимого для " -"фактической версии, которая содержится в ответе (т.е. запрос ``принять: " -"приложение/vnd.pypi. простой. последний+json``, который возвращает ответ " -"``v1.x``, должен иметь ``Контент-Тип`` из ``приложение/vnd.pypi.простой." -"v1+json``)." +"Эта спецификация **дополняет** требование, что если используется мета-версия " +"``latest``, сервер **ДОЛЖЕН** отвечать типом содержимого для фактической " +"версии, которая содержится в ответе (т.е. запрос ``Accept: application/vnd." +"pypi.simple.latest+json``, который возвращает ответ ``v1.x'', должен иметь " +"``Content-Type`` из ``application/vnd.pypi.simple.v1+json``)." -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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 " @@ -24674,19 +27053,19 @@ msgstr "" "содержимого, которые клиент понимает и может обрабатывать. Он поддерживает " "три различных формата для каждого запрашиваемого типа содержимого:" -#: ../source/specifications/simple-repository-api.rst:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "``$тип/$подтип``" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "``$тип/*``" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "``*/*``" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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 " @@ -24696,7 +27075,7 @@ msgstr "" "$подтип``, поскольку это единственный способ действительно указать нужную " "версию и формат." -#: ../source/specifications/simple-repository-api.rst:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -24712,7 +27091,7 @@ msgstr "" "синтаксис ``принять`` в заголовке ``значение качества `_." -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -24728,7 +27107,7 @@ msgstr "" "более низким качеством, и любая запись без присутствующего качества будет по " "умолчанию иметь качество ``1``." -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -24739,7 +27118,7 @@ msgstr "" "запрошенных ими типов содержимого, независимо от их приоритета, и даже может " "вернуть тип содержимого, который они **не* запрашивали." -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -24758,11 +27137,11 @@ msgstr "" "_internal/index/collector.py#L123-L150>`_, так что риск реальных поломок " "невелик." -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "Пример работы клиента может выглядеть следующим образом:" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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 " @@ -24772,11 +27151,11 @@ msgstr "" "удалит типы контента, которые ему не нужны, из заголовка ``принять``, и " "превратит их получение в ошибку." -#: ../source/specifications/simple-repository-api.rst:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "Альтернативные механизмы переговоров" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -24791,25 +27170,20 @@ msgstr "" "предусмотрены альтернативные механизмы согласования, которые могут " "*факультативно* использоваться вместо него." -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "Параметр URL" -#: ../source/specifications/simple-repository-api.rst:742 -#, fuzzy -#| msgid "" -#| "Servers that implement the Simple API may choose to support an URL " -#| "parameter named ``format`` to allow the clients to request a specific " -#| "version of the URL." +#: ../source/specifications/simple-repository-api.rst:848 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 "" -"Серверы, реализующие простой API, могут поддерживать параметр URL с именем " +"Серверы, реализующие Simple API, могут поддерживать параметр URL с именем " "``формат``, чтобы позволить клиентам запрашивать определенную версию URL." -#: ../source/specifications/simple-repository-api.rst:745 +#: ../source/specifications/simple-repository-api.rst:851 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 " @@ -24819,7 +27193,7 @@ msgstr "" "содержимого. Передача нескольких типов содержимого, подстановочных карт, " "качественных значений и т. д. **не поддерживается." -#: ../source/specifications/simple-repository-api.rst:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -24832,7 +27206,7 @@ msgstr "" "документации или примечаниях можно было ссылаться на конкретную " "версию+формат." -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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." @@ -24840,7 +27214,7 @@ msgstr "" "Серверы, не поддерживающие этот параметр, могут возвращать ошибку при его " "наличии или просто игнорировать его присутствие." -#: ../source/specifications/simple-repository-api.rst:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -24857,11 +27231,11 @@ msgstr "" "Недоступен``, ``303 Несколько вариантов`` или выбор типа по умолчанию для " "возврата)." -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "Конфигурация конечной точки" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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 " @@ -24872,7 +27246,7 @@ msgstr "" "серверам выбирать, какой из доступных типов содержимого является их типом по " "умолчанию." -#: ../source/specifications/simple-repository-api.rst:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -24884,7 +27258,7 @@ msgstr "" "свой клиент для выбора нужной им версии, то такая конфигурация " "поддерживается." -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -24901,7 +27275,7 @@ msgstr "" "``Принять``, сервер может проигнорировать его и вернуть тип содержимого, " "соответствующий данной конечной точке." -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -24913,11 +27287,11 @@ msgstr "" "репозитория, и при запросе к этому серверу выдавать заголовок ``Принять``, " "который *только* включает правильный тип содержимого." -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "Поддержка TUF - PEP 458" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -24935,7 +27309,7 @@ msgstr "" "клиент TUF не может справиться с тем, что цель может иметь несколько " "различных представлений, которые хэшируются по-разному." -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -24947,7 +27321,7 @@ msgstr "" "путь типа ``простой/ПРОЕКТ/`` неприемлем, потому что технически он указывает " "на каталог." -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -24961,7 +27335,7 @@ msgstr "" "который нужно получить. То же самое можно сказать и о других аспектах " "фактического HTTP-запроса, таких как заголовок ``принять``." -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -24973,7 +27347,7 @@ msgstr "" "данная спецификация откладывает принятие решения о том, как именно " "представлять это в метаданных :pep:`458`." -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -24989,7 +27363,7 @@ msgstr "" "формат v1 HTML будет ``простой/ПРОЕКТ/vnd.pypi. простой.v1.html``, а формат " "v1 JSON будет ``простой/ПРОЕКТ/vnd.pypi.простой.v1.json``." -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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 " @@ -24999,7 +27373,7 @@ msgstr "" "``приложения/vnd.pypi. простой.v1+html`` при взаимодействии через TUF, " "скорее всего, будет разумнее нормализовать к более явному имени." -#: ../source/specifications/simple-repository-api.rst:825 +#: ../source/specifications/simple-repository-api.rst:931 msgid "" "Likewise the ``latest`` metaversion should not be included in the targets, " "only explicitly declared versions should be supported." @@ -25007,7 +27381,7 @@ msgstr "" "Аналогично, метаверсия ``последней`` не должна включаться в цели, должны " "поддерживаться только явно объявленные версии." -#: ../source/specifications/simple-repository-api.rst:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -25019,7 +27393,7 @@ msgstr "" "реализации этой спецификации, но он **не** представляет собой никаких " "требований по соответствию этим решениям." -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -25033,11 +27407,11 @@ msgstr "" "использование API обеспечивало защитные ограждения, которые пытаются " "подтолкнуть клиента к наилучшему выбору." -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "Рекомендуется использовать серверы:" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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 " @@ -25048,7 +27422,7 @@ msgstr "" "крайней мере, пока они получают нетривиальный трафик, использующий ответы " "HTML." -#: ../source/specifications/simple-repository-api.rst:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -25059,7 +27433,7 @@ msgstr "" "с которыми сервер умеет работать, сервер не должен возвращать ответ ``300 " "Множественный выбор``, а вместо этого возвращает ответ ``406 Неприемлемо``." -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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." @@ -25068,7 +27442,7 @@ msgstr "" "предпочесть возвращать ответ ``200 OK`` в ожидаемом типе содержимого для " "данной конечной точки." -#: ../source/specifications/simple-repository-api.rst:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -25083,11 +27457,11 @@ msgstr "" "использовать тип содержимого ``текст/html`` только в качестве последнего " "средства." -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "Рекомендуется, чтобы клиенты:" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." @@ -25095,7 +27469,7 @@ msgstr "" "Поддерживать все 3 типа контента, описанные в данной спецификации, используя " "согласование контента с сервером, до тех пор, пока это возможно." -#: ../source/specifications/simple-repository-api.rst:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." @@ -25103,7 +27477,7 @@ msgstr "" "При составлении заголовка ``Принять`` включите в него все типы содержимого, " "которые вы поддерживаете." -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -25117,7 +27491,7 @@ msgstr "" "стандартной библиотеки и беспокоитесь о том, что некоторые типы HTML-ответов " "могут быть не в состоянии разобрать в некоторых крайних случаях)." -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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 " @@ -25128,7 +27502,7 @@ msgstr "" "html``, если только это не единственный тип содержимого, который вы " "запрашиваете." -#: ../source/specifications/simple-repository-api.rst:878 +#: ../source/specifications/simple-repository-api.rst:984 msgid "" "Explicitly select what versions they are looking for, rather than using the " "``latest`` meta version during normal operation." @@ -25136,7 +27510,7 @@ msgstr "" "Явно выбирайте версии, которые они ищут, вместо того чтобы использовать " "``последнюю`` мета-версию во время обычной работы." -#: ../source/specifications/simple-repository-api.rst:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." @@ -25144,231 +27518,19 @@ msgstr "" "Проверьте ``Контент-Тип`` в ответе и убедитесь, что он соответствует тому, " "что вы ожидали." -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "Дополнительные поля для простого API для индексов пакетов" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" -"Эта спецификация определяет версию 1.1 простого API репозитория. Для HTML-" -"версии API нет никаких изменений по сравнению с версией 1.0. Для JSON-версии " -"API сделаны следующие изменения:" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "В ``api-версия`` должна быть указана версия 1.1 или более поздняя." - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "На верхнем уровне добавляется новый ключ ``версии``." - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" -"В данные ``файлы`` добавлены два новых ключа \"информации о файле\", " -"``размер`` и ``время загрузки``." - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" -"Ключи ``версии`` и ``размер`` являются обязательными. Ключ ``время " -"загрузки`` является необязательным." - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" -"Дополнительный ключ ``версии`` ДОЛЖЕН присутствовать на верхнем уровне, в " -"дополнение к ключам ``имя``, ``файлы`` и ``мета``, определенным в :ref:" -"спецификации JSON API <простой репозиторий-апи-json>`. Этот ключ ДОЛЖЕН " -"содержать список строк версий, определяющих все версии проекта, загруженные " -"для этого проекта. Значение логически является набором, и поэтому не может " -"содержать дубликатов, а порядок значений не имеет значения." - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" -"Обратите внимание, что поскольку серверы могут содержать \"устаревшие\" " -"данные, полученные до принятия : ссылка:спецификация спецификаторов версий " -"(VSS) <версии-спецификаторы>`, в настоящее время нельзя требовать, чтобы " -"строки версий были действительными версиями VSS, и поэтому нельзя считать, " -"что они могут быть упорядочены с использованием правил VSS. Тем не менее, " -"серверы ДОЛЖНЫ использовать нормализованные версии VSS, где это возможно." - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "Дополнительная информация о файле" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "К ключу ``файлы`` добавляются два новых ключа." - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" -"``размер``: Это поле является обязательным. Оно ДОЛЖНО содержать целое " -"число, представляющее собой размер файла в байтах." - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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 "" -"``время загрузки``: Это поле является необязательным. Если оно присутствует, " -"то ДОЛЖНО содержать действительную строку даты/времени ISO 8601 в формате " -"``гггг-мм-ддТхх:мм:сс.ffffffZ``, которая представляет время, когда файл был " -"загружен в индекс. Как указывает суффикс ``Z``, время загрузки ДОЛЖНО " -"использовать часовой пояс UTC. Дробная секундная часть временной метки " -"(часть ``.ffffff``) необязательна, и если она присутствует, то может " -"содержать до 6 цифр точности. Если сервер не записывает информацию о времени " -"загрузки файла, он МОЖЕТ опустить ключ ``время загрузки``." - -#: ../source/specifications/simple-repository-api.rst:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "Переименование dist- инфо-метаданных в простом API" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" -"Ключевые слова \"**МОЖНО**\", \"**НЕ ДОЛЖНО**\", \"**РЕКОМЕНДУЕТСЯ**\", " -"\"**ОБЯЗАТЕЛЬНО**\", \"**НЕ ДОЛЖНО**\", \"**ПОЛОЖИТЕЛЬНО**\", \"**НЕ " -"ДОЛЖНО**\", \"**РЕКОМЕНДУЕТСЯ**\", \"**МОЖНО**\" и \"**ОПЦИОНАЛЬНО**\" в " -"этом документе должны интерпретироваться так, как описано в :rfc:`RFC 2119 " -"<2119>`." - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "Серверы" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" -"Метаданные : ссылка:спецификация файла метаданных API `, используемые в HTML-представлении простого API, " -"**ОБЯЗАТЕЛЬНО** передаются с помощью атрибута ``данные-ядро-метаданные``, " -"при этом поддерживаемые значения остаются прежними." - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" -"Метаданные из файла метаданных API , " -"используемые в JSON-представлении простого API , " -"**МОЖНО** передавать с помощью ключа ``ядро-метаданные``, при этом " -"поддерживаемые значения остаются неизменными." - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" -"Для поддержки клиентов, использующих предыдущие имена ключей, HTML-" -"представление **МОЖЕТ** также выдаваться с использованием ``данные-дист-инфо-" -"метаданные``, и если оно это делает, то **ДОЛЖНО** соответствовать значению " -"``данные-ядро-метаданные``." - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" -"Клиенты, использующие любое из HTML-представлений Простого API, **ОБЯЗАНЫ** " -"считывать :ref:`спецификацию файла метаданных API ` метаданные из ключа ``данные-ядро-метаданные``, если он " -"присутствует. Они **МОГУТ** опционально использовать унаследованные ``данные-" -"дист-инфо-метаданные``, если они присутствуют, но ``данные-ядро-метаданные`` " -"отсутствуют." - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" -"Клиенты, потребляющие JSON-представление простого API, **ОБЯЗАНЫ** читать : " -"ссылка:спецификация файла метаданных API ` метаданные из ключа ``ядро-метаданные``, если он присутствует. Они " -"**МОГУТ** опционально использовать унаследованный ключ ``дист-инфо-" -"метаданные``, если он присутствует, а ``ядро-метаданные`` - нет." - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "Сентябрь 2015 года: начальная форма формата HTML, в :pep:`503`" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "Июль 2016 г: Метаданные Требуется-Python, в обновлении :pep:`503`" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "Май 2019: поддержка \"янки\", в :pep:`592`" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" @@ -25376,14 +27538,14 @@ msgstr "" "Июль 2020 года: Соглашение о версиях API и метаданные, а также объявление " "формата HTML как API v1, в :pep:`629`" -#: ../source/specifications/simple-repository-api.rst:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" "Май 2021: предоставление метаданных пакета независимо от пакета, в :pep:`658`" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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`" @@ -25391,7 +27553,7 @@ msgstr "" "Май 2022: начальная форма формата JSON, с механизмом выбора между ними для " "клиентов, и объявление обоих форматов как API v1, в :pep:`691`" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:1004 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" @@ -25399,7 +27561,7 @@ msgstr "" "Октябрь 2022: версии проектов, размер файлов и время загрузки в формате " "JSON, в :pep:`700`" -#: ../source/specifications/simple-repository-api.rst:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" @@ -25407,17 +27569,12 @@ msgstr "" "Июнь 2023: переименование поля, предоставляющего метаданные пакета " "независимо от пакета, в :pep:`714`" -#: ../source/specifications/simple-repository-api.rst:1003 -#, fuzzy -#| msgid "" -#| "October 2022: project versions and file size and upload-time in the JSON " -#| "format, in :pep:`700`" +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" -"Октябрь 2022: версии проектов, размер файлов и время загрузки в формате " -"JSON, в :pep:`700`" +"Ноябрь 2024: метаданные о проверке в форматах HTML и JSON, в :pep:`740`" #: ../source/specifications/source-distribution-format.rst:6 msgid "Source distribution format" @@ -25457,11 +27614,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "Дистрибутивы с исходными текстами также известны как *sdists*." -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "Деревья источников" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -25477,11 +27634,11 @@ msgstr "" "должно соответствовать определению того, что должен содержать :file:" "`pyproject.toml`, чтобы что-то считалось деревом исходных текстов." -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "Имя файла исходного дистрибутива" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -25495,7 +27652,7 @@ msgstr "" "format`), а ``{версия}`` - это канонизированная форма версии проекта (см. :" "ref:`version-specifiers`)." -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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." @@ -25503,7 +27660,7 @@ msgstr "" "Компоненты имени и версии в имени файла ДОЛЖНЫ соответствовать значениям, " "хранящимся в метаданных, содержащихся в файле." -#: ../source/specifications/source-distribution-format.rst:45 +#: ../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 :" @@ -25513,7 +27670,7 @@ msgstr "" "соответствующее этой спецификации. Это включает в себя крючок " "``build_sdist`` в :term:`build backend `." -#: ../source/specifications/source-distribution-format.rst:49 +#: ../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 " @@ -25525,18 +27682,18 @@ msgstr "" "имени файла. Код, который это делает, может использовать имя дистрибутива и " "версию из имени файла без дополнительной проверки." -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "Формат файла исходного дистрибутива" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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 "" @@ -25544,12 +27701,25 @@ msgstr "" "верхнего уровня с именем ``{имя}-{версия}`` (например, ``foo-1.0``), " "содержащий исходные файлы пакета. Имя и версия ДОЛЖНЫ совпадать с " "метаданными, хранящимися в файле. Этот каталог также должен содержать :file:" -"`pyproject.toml` в формате, определенном в :ref:`pyproject-toml-spec`, и " -"файл ``PKG-INFO``, содержащий метаданные в формате, описанном в " +"`pyproject.toml` в формате, определенном в :ref:`pyproject-toml-spec`, и :" +"file:`PKG-INFO` файл, содержащий метаданные в формате, описанном в " "спецификации :ref:`core-metadata`. Метаданные ДОЛЖНЫ соответствовать, по " "крайней мере, версии 2.2 спецификации метаданных." -#: ../source/specifications/source-distribution-format.rst:65 +#: ../source/specifications/source-distribution-format.rst:69 +msgid "" +"If the metadata version is 2.4 or greater, the source distribution MUST " +"contain any license files specified by the ``License-File`` field in the :" +"file:`PKG-INFO` at their respective paths relative to the root directory of " +"the sdist (containing the :file:`pyproject.toml` and the :file:`PKG-INFO` " +"metadata)." +msgstr "" +"Если версия метаданных 2.4 или выше, исходный дистрибутив ДОЛЖЕН содержать " +"все файлы лицензий, указанные в поле ``License-File`` в :file:`PKG-INFO`` по " +"соответствующим путям относительно корневого каталога sdist (содержащего :" +"file:`pyproject.toml`` и метаданные :file:`PKG-INFO``)." + +#: ../source/specifications/source-distribution-format.rst:74 msgid "" "No other content of a sdist is required or defined. Build systems can store " "whatever information they need in the sdist to build the project." @@ -25557,7 +27727,7 @@ msgstr "" "Никакое другое содержимое sdist не требуется и не определено. Системы сборки " "могут хранить в sdist любую информацию, необходимую им для сборки проекта." -#: ../source/specifications/source-distribution-format.rst:68 +#: ../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 " @@ -25569,11 +27739,11 @@ msgstr "" "исходных дистрибутивов должны быть читаемы с помощью модуля tarfile " "стандартной библиотеки с флагом open 'r:gz'." -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "Возможности архива распространения исходных текстов" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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." @@ -25581,11 +27751,11 @@ msgstr "" "Поскольку извлекать tar-файлы как таковые опасно, а результаты зависят от " "платформы, возможности архивирования в исходных дистрибутивах ограничены." -#: ../source/specifications/source-distribution-format.rst:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "Распаковка с помощью фильтра данных" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -25597,7 +27767,7 @@ msgstr "" "filter='data') `), либо следовать разделу " "*Распаковка без фильтра данных* ниже." -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -25614,11 +27784,11 @@ msgstr "" "и безопасностью (например, отказ от распаковки) в этом случае остается на " "усмотрение инструмента." -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "Распаковка без фильтра данных" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -25631,7 +27801,7 @@ msgstr "" "этой статьи фильтр ``data`` также следует этому разделу, но в будущем они " "могут рассинхронизироваться)" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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 " @@ -25641,20 +27811,20 @@ msgstr "" "записи инструменты ДОЛЖНЫ уведомить пользователя, НЕ ДОЛЖНЫ распаковывать " "запись и МОГУТ прервать работу с ошибкой:" -#: ../source/specifications/source-distribution-format.rst:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "Файлы, которые будут размещены за пределами каталога назначения." -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" "Ссылки (символические или жесткие), указывающие за пределы целевого каталога." -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "Файлы устройств (включая pipes)." -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:" @@ -25662,15 +27832,15 @@ msgstr "" "Следующие также недействительны. Инструменты МОГУТ обрабатывать их, как " "указано выше, но НЕ ОБЯЗАНЫ это делать:" -#: ../source/specifications/source-distribution-format.rst:115 +#: ../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:116 +#: ../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:118 +#: ../source/specifications/source-distribution-format.rst:127 msgid "" "Tools MAY unpack links (symbolic or hard) as regular files, using content " "from the archive." @@ -25678,11 +27848,11 @@ msgstr "" "Инструменты MAY распаковывают ссылки (символические или жесткие) как обычные " "файлы, используя содержимое архива." -#: ../source/specifications/source-distribution-format.rst:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "При извлечении архивов *sdist*:" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../source/specifications/source-distribution-format.rst:132 msgid "" "Leading slashes in file names MUST be dropped. (This is nowadays standard " "behaviour for ``tar`` unpacking.)" @@ -25690,21 +27860,21 @@ msgstr "" "Ведущие косые черты в именах файлов ДОЛЖНЫ быть опущены. (В настоящее время " "это стандартное поведение для распаковки ``tar``)" -#: ../source/specifications/source-distribution-format.rst:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "Для каждого бита ``мода`` (разрешения Unix) инструменты ДОЛЖНЫ либо:" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "установить бит в соответствии с архивом, или" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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." @@ -25712,19 +27882,19 @@ msgstr "" "используйте бит из ``rw-r--r--`` (``0o644``) для неисполняемых файлов или " "``rwxr-xr-x`` (``0o755``) для исполняемых файлов и каталогов." -#: ../source/specifications/source-distribution-format.rst:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "Старшие биты ``режима'' (setuid, setgid, sticky) ДОЛЖНЫ быть очищены." -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "РЕКОМЕНДУЕТСЯ сохранять пользовательский *исполняемый* бит." -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "Дополнительные подсказки" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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." @@ -25732,7 +27902,7 @@ msgstr "" "Авторам инструментов рекомендуется рассмотреть, насколько *подсказки для " "дальнейшей проверки* в документации к ``tarfile`` применимы к их инструменту." -#: ../source/specifications/source-distribution-format.rst:146 +#: ../source/specifications/source-distribution-format.rst:155 msgid "" "November 2020: The original version of this specification was approved " "through :pep:`643`." @@ -25740,11 +27910,11 @@ msgstr "" "Ноябрь 2020 года: Первоначальная версия этой спецификации была одобрена " "через :pep:`643`." -#: ../source/specifications/source-distribution-format.rst:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "Июль 2021 года: Определено, что такое дерево источников." -#: ../source/specifications/source-distribution-format.rst:149 +#: ../source/specifications/source-distribution-format.rst:158 msgid "" "September 2022: The filename of a source distribution was standardized " "through :pep:`625`." @@ -25752,7 +27922,7 @@ msgstr "" "Сентябрь 2022: Имя файла исходного дистрибутива было стандартизировано " "через :pep:`625`." -#: ../source/specifications/source-distribution-format.rst:151 +#: ../source/specifications/source-distribution-format.rst:160 msgid "" "August 2023: Source distribution archive features were standardized through :" "pep:`721`." @@ -25760,6 +27930,14 @@ msgstr "" "Август 2023 года: Функции архива дистрибутива исходных текстов были " "стандартизированы с помощью :pep:`721`." +#: ../source/specifications/source-distribution-format.rst:162 +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" +"Декабрь 2024 года: Включение файлов лицензий в дистрибутив исходных текстов " +"было стандартизировано с помощью :pep:`639`." + #: ../source/specifications/version-specifiers.rst:7 #: ../source/specifications/version-specifiers.rst:782 msgid "Version specifiers" @@ -27933,17 +30111,12 @@ msgid "Summary of differences from pkg_resources.parse_version" msgstr "Краткое описание отличий от pkg_resources.parse_version" #: ../source/specifications/version-specifiers.rst:1183 -#, fuzzy -#| msgid "" -#| "Note: this comparison is to ``pkg_resourses.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." msgid "" "Note: this comparison is to ``pkg_resources.parse_version`` as it existed at " "the time :pep:`440` was written. After the PEP was accepted, setuptools 6.0 " "and later versions adopted the behaviour described here." msgstr "" -"Примечание: это сравнение с ``pkg_resourses.parse_version`` в том виде, в " +"Примечание: это сравнение с ``pkg_resources.parse_version`` в том виде, в " "котором он существовал на момент написания :pep:`440`. После того, как PEP " "был принят, setuptools 6.0 и более поздние версии приняли описанное здесь " "поведение." @@ -28128,10 +30301,8 @@ msgid "May 2012: This specification was approved through :pep:`405`." msgstr "Май 2012 г: Эта спецификация была одобрена через :pep:`405`." #: ../source/specifications/well-known-project-urls.rst:5 -#, fuzzy -#| msgid "Pyproject Metadata" msgid "Well-known Project URLs in Metadata" -msgstr "Метаданные Pyproject" +msgstr "Известные URL-адреса проектов в метаданных" #: ../source/specifications/well-known-project-urls.rst:9 msgid "" @@ -28139,6 +30310,10 @@ msgid "" "use the normalization rules and well-known list below to make their " "presentation of project URLs consistent across the Python ecosystem." msgstr "" +"Этот документ представляет интерес в первую очередь для *потребителей* " +"метаданных, которые должны использовать правила нормализации и известный " +"список ниже, чтобы сделать представление URL-адресов проектов согласованным " +"во всей экосистеме Python." #: ../source/specifications/well-known-project-urls.rst:14 msgid "" @@ -28147,6 +30322,11 @@ msgid "" "``Project-URL`` length restrictions. However, when possible, users are " "*encouraged* to pick meaningful labels that normalize to well-known labels." msgstr "" +"Производители *метаданных* (такие как инструменты сборки и отдельные " +"сопровождающие пакетов) могут продолжать использовать любые метки по своему " +"усмотрению, в рамках общих ограничений длины ``Project-URL``. Однако, когда " +"это возможно, пользователям *приветствуется* выбирать значимые метки, " +"которые нормализуются к известным меткам." #: ../source/specifications/well-known-project-urls.rst:22 msgid "" @@ -28154,14 +30334,13 @@ msgid "" "for user-oriented guidance on choosing project URL labels in your package's " "metadata." msgstr "" +"Смотрите :ref:`Writing your pyproject.toml - urls ` для ориентированного на пользователя руководства по выбору меток URL " +"проекта в метаданных вашего пакета." #: ../source/specifications/well-known-project-urls.rst:26 -#, fuzzy -#| msgid "" -#| "This specification was originally defined in :pep:`518` and :pep:`621`." msgid "This specification was originally defined in :pep:`753`." -msgstr "" -"Эта спецификация была первоначально определена в :pep:`518` и :pep:`621`." +msgstr "Эта спецификация была первоначально определена в :pep:`753`." #: ../source/specifications/well-known-project-urls.rst:28 msgid "" @@ -28172,24 +30351,32 @@ msgid "" "semantics assigned to ``Home-page``, ``Download-URL``, or other common " "project URLs." msgstr "" +":pep:`753` упраздняет поля метаданных :ref:`core-metadata-home-page` и :ref:" +"`core-metadata-download-url` в пользу :ref:`core-metadata-project-url`, и " +"определяет процедуру нормализации и поиска для определения того, является ли " +"``Project-URL`` \"хорошо известным\", т.е. имеет семантику, присущую ``Home-" +"page``, ``Download-URL``, или другим распространенным URL проекта." #: ../source/specifications/well-known-project-urls.rst:35 msgid "" "This allows indices (such as the Python Package Index) and other downstream " "metadata consumers to present project URLs in a consistent manner." msgstr "" +"Это позволяет индексам (таким как Python Package Index) и другим " +"потребителям метаданных представлять URL-адреса проектов в согласованном " +"виде." #: ../source/specifications/well-known-project-urls.rst:42 -#, fuzzy -#| msgid "Name normalization" msgid "Label normalization" -msgstr "Нормализация имен" +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 "" @@ -28197,204 +30384,199 @@ msgid "" "consumers should normalize the label before comparing it to the :ref:`list " "of well-known labels `." msgstr "" +"Чтобы определить, является ли метка ``Project-URL`` \"хорошо известной\", " +"потребители метаданных должны нормализовать ее перед сравнением со :ref:" +"`списком хорошо известных меток `." #: ../source/specifications/well-known-project-urls.rst:53 msgid "" "The normalization procedure for ``Project-URL`` labels is defined by the " "following Python function:" msgstr "" +"Процедура нормализации меток ``Project-URL`` определяется следующей функцией " +"Python:" #: ../source/specifications/well-known-project-urls.rst:65 msgid "" "In plain language: a label is *normalized* by deleting all ASCII punctuation " "and whitespace, and then converting the result to lowercase." msgstr "" +"Простым языком: метка *нормализуется* путем удаления всех знаков препинания " +"и пробельных символов ASCII, а затем преобразуется в строчные буквы." #: ../source/specifications/well-known-project-urls.rst:68 msgid "" "The following table shows examples of labels before (raw) and after " "normalization:" msgstr "" +"В следующей таблице приведены примеры меток до (сырой) и после нормализации:" #: ../source/specifications/well-known-project-urls.rst:74 msgid "Raw" -msgstr "" +msgstr "Необработанный" #: ../source/specifications/well-known-project-urls.rst:75 -#, fuzzy -#| msgid "Normalized Names" msgid "Normalized" -msgstr "Нормализованные названия" +msgstr "Нормализованный" #: ../source/specifications/well-known-project-urls.rst:76 -#, fuzzy -#| msgid "Home-page" msgid "``Homepage``" -msgstr "Home-page" +msgstr "``Homepage``" #: ../source/specifications/well-known-project-urls.rst:77 #: ../source/specifications/well-known-project-urls.rst:79 #: ../source/specifications/well-known-project-urls.rst:81 -#, fuzzy -#| msgid "Home-page" msgid "``homepage``" -msgstr "Home-page" +msgstr "``homepage``" #: ../source/specifications/well-known-project-urls.rst:78 -#, fuzzy -#| msgid "Home-page" msgid "``Home-page``" -msgstr "Home-page" +msgstr "``Home-page``" #: ../source/specifications/well-known-project-urls.rst:80 -#, fuzzy -#| msgid "Home page" msgid "``Home page``" -msgstr "Домашняя страница" +msgstr "``Home page``" #: ../source/specifications/well-known-project-urls.rst:82 msgid "``Change_Log``" -msgstr "" +msgstr "``Change_Log``" #: ../source/specifications/well-known-project-urls.rst:83 msgid "``changelog``" -msgstr "" +msgstr "``changelog``" #: ../source/specifications/well-known-project-urls.rst:84 msgid "``What's New?``" -msgstr "" +msgstr "``What's New?``" #: ../source/specifications/well-known-project-urls.rst:85 msgid "``whatsnew``" -msgstr "" +msgstr "``whatsnew``" #: ../source/specifications/well-known-project-urls.rst:86 #: ../source/specifications/well-known-project-urls.rst:87 msgid "``github``" -msgstr "" +msgstr "``github``" #: ../source/specifications/well-known-project-urls.rst:92 msgid "Well-known labels" -msgstr "" +msgstr "Известные лейблы" #: ../source/specifications/well-known-project-urls.rst:96 msgid "" "The list of well-known labels is a living standard, maintained as part of " "this document." msgstr "" +"Список известных лейблов - это живой стандарт, поддерживаемый в рамках " +"данного документа." #: ../source/specifications/well-known-project-urls.rst:99 msgid "" "The following table lists labels that are well-known for the purpose of " "specializing the presentation of ``Project-URL`` metadata:" msgstr "" +"В следующей таблице перечислены метки, которые хорошо известны для целей " +"специализации представления метаданных ``Project-URL``:" #: ../source/specifications/well-known-project-urls.rst:105 msgid "Label (Human-readable equivalent)" -msgstr "" +msgstr "Этикетка (человекочитаемый эквивалент)" #: ../source/specifications/well-known-project-urls.rst:107 msgid "Aliases" -msgstr "" +msgstr "Псевдонимы" #: ../source/specifications/well-known-project-urls.rst:108 msgid "``homepage`` (Homepage)" -msgstr "" +msgstr "``Домашняя страница`` (Домашняя страница)" #: ../source/specifications/well-known-project-urls.rst:109 msgid "The project's home page" -msgstr "" +msgstr "Домашняя страница проекта" #: ../source/specifications/well-known-project-urls.rst:110 #: ../source/specifications/well-known-project-urls.rst:116 #: ../source/specifications/well-known-project-urls.rst:122 msgid "*(none)*" -msgstr "" +msgstr "*(никто)*" #: ../source/specifications/well-known-project-urls.rst:111 msgid "``source`` (Source Code)" -msgstr "" +msgstr "``Источник`` (Исходный код)" #: ../source/specifications/well-known-project-urls.rst:112 msgid "The project's hosted source code or repository" -msgstr "" +msgstr "Размещенный исходный код проекта или репозиторий" #: ../source/specifications/well-known-project-urls.rst:113 msgid "``repository``, ``sourcecode``, ``github``" -msgstr "" +msgstr "``repository``, ``sourcecode``, ``github``" #: ../source/specifications/well-known-project-urls.rst:114 msgid "``download`` (Download)" -msgstr "" +msgstr "``Загрузить`` (Загрузка)" #: ../source/specifications/well-known-project-urls.rst:115 msgid "" "A download URL for the current distribution, equivalent to ``Download-URL``" msgstr "" +"URL-адрес загрузки текущего дистрибутива, эквивалентный ``Скачать-URL``" #: ../source/specifications/well-known-project-urls.rst:117 msgid "``changelog`` (Changelog)" -msgstr "" +msgstr "``changelog`` (журнал изменений)" #: ../source/specifications/well-known-project-urls.rst:118 msgid "The project's comprehensive changelog" -msgstr "" +msgstr "Полный журнал изменений проекта" #: ../source/specifications/well-known-project-urls.rst:119 msgid "``changes``, ``whatsnew``, ``history``" -msgstr "" +msgstr "``changes``, ``whatsnew``, ``history``" #: ../source/specifications/well-known-project-urls.rst:120 msgid "``releasenotes`` (Release Notes)" -msgstr "" +msgstr "``releasenotes`` (Заметки о выпуске)" #: ../source/specifications/well-known-project-urls.rst:121 msgid "The project's curated release notes" -msgstr "" +msgstr "Примечания к выпуску проекта" #: ../source/specifications/well-known-project-urls.rst:123 -#, fuzzy -#| msgid "Creating documentation" msgid "``documentation`` (Documentation)" -msgstr "Создание документации" +msgstr "``документация`` (Документация)" #: ../source/specifications/well-known-project-urls.rst:124 -#, fuzzy -#| msgid "Creating documentation" msgid "The project's online documentation" -msgstr "Создание документации" +msgstr "Онлайн-документация проекта" #: ../source/specifications/well-known-project-urls.rst:125 -#, fuzzy -#| msgid "``upload_docs``" msgid "``docs``" -msgstr "``upload_docs``" +msgstr "``docs``" #: ../source/specifications/well-known-project-urls.rst:126 msgid "``issues`` (Issue Tracker)" -msgstr "" +msgstr "``issues`` (Трекер проблем)" #: ../source/specifications/well-known-project-urls.rst:127 msgid "The project's bug tracker" -msgstr "" +msgstr "Трекер ошибок проекта" #: ../source/specifications/well-known-project-urls.rst:128 msgid "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" -msgstr "" +msgstr "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" #: ../source/specifications/well-known-project-urls.rst:129 msgid "``funding`` (Funding)" -msgstr "" +msgstr "``финансирование`` (Финансирование)" #: ../source/specifications/well-known-project-urls.rst:130 -#, fuzzy -#| msgid "Basic information" msgid "Funding Information" -msgstr "Базовая информация" +msgstr "Информация о финансировании" #: ../source/specifications/well-known-project-urls.rst:131 msgid "``sponsor``, ``donate``, ``donation``" -msgstr "" +msgstr "``спонсор``, ``пожертвовать``, ``пожертвование``" #: ../source/specifications/well-known-project-urls.rst:133 msgid "" @@ -28404,7 +30586,6 @@ msgstr "" #: ../source/specifications/well-known-project-urls.rst:137 #, fuzzy -#| msgid "Example" msgid "Example behavior" msgstr "Пример" @@ -28420,7 +30601,6 @@ msgstr "" #: ../source/specifications/well-known-project-urls.rst:151 #, fuzzy -#| msgid "Core metadata specifications" msgid "Core metadata representation" msgstr "Спецификации основных метаданных" @@ -29382,7 +31562,7 @@ msgstr "" "shell``." #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "Следующие шаги" @@ -29752,7 +31932,7 @@ msgstr "" "вас будет уникальное имя пакета, которое не будет конфликтовать с пакетами, " "загруженными другими людьми, следующими этому руководству." -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -29766,7 +31946,7 @@ msgstr "" "пользователя** для этого руководства, так как это гарантирует, что вы не " "попытаетесь загрузить пакет с тем же именем, что и уже существующий." -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 msgid "" "``version`` is the package version. (Some build backends allow it to be " "specified another way, such as from a file or Git tag.)" @@ -29774,7 +31954,7 @@ msgstr "" "``version`` - это версия пакета. (Некоторые сборки позволяют указывать ее " "другим способом, например, из файла или Git-тега)" -#: ../source/tutorials/packaging-projects.rst:231 +#: ../source/tutorials/packaging-projects.rst:257 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 " @@ -29784,11 +31964,11 @@ msgstr "" "и email для каждого автора. В таком же формате можно перечислить " "``maintainers``." -#: ../source/tutorials/packaging-projects.rst:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "``description`` - это краткое, в одно предложение, описание пакета." -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -29802,7 +31982,7 @@ msgstr "" "также более продвинутая форма таблицы, описанная в руководстве :ref:" "`pyproject.toml `." -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 msgid "" "``requires-python`` gives the versions of Python supported by your project. " "An installer like :ref:`pip` will look back through older versions of " @@ -29812,15 +31992,23 @@ msgstr "" "Программа установки, такая как :ref:`pip`, будет просматривать старые версии " "пакетов, пока не найдет ту, которая имеет соответствующую версию Python." -#: ../source/tutorials/packaging-projects.rst:243 +#: ../source/tutorials/packaging-projects.rst:269 +#, fuzzy +#| 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, is licensed under the MIT license, and is OS-independent. You " +#| "should always include at least which version(s) of Python your package " +#| "works on, which license your package is available under, and which " +#| "operating systems your package will work on. For a complete list of " +#| "classifiers, see https://pypi.org/classifiers/." 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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 "" "``классификаторы`` дают индексу и :ref:`pip`` некоторые дополнительные " "метаданные о вашем пакете. В данном случае пакет совместим только с Python " @@ -29830,7 +32018,26 @@ msgstr "" "будет работать. Полный список классификаторов можно найти на сайте https://" "pypi.org/classifiers/." -#: ../source/tutorials/packaging-projects.rst:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +#, fuzzy +#| msgid "" +#| "Now run this command from the same directory where :file:`pyproject.toml` " +#| "is located:" +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" +"Теперь запустите эту команду из той же директории, где находится :file:" +"`pyproject.toml`:" + +#: ../source/tutorials/packaging-projects.rst:281 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." @@ -29839,7 +32046,7 @@ msgstr "" "которые нужно показать на PyPI. Обычно это могут быть ссылки на исходный " "текст, документацию, трекеры проблем и т.д." -#: ../source/tutorials/packaging-projects.rst:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -29851,11 +32058,11 @@ msgstr "" "распространенными полями являются ``ключевые слова'' для повышения удобства " "поиска и ``зависимости'', необходимые для установки вашего пакета." -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "Создание файла :file:`README.md`" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." @@ -29863,11 +32070,11 @@ msgstr "" "Откройте :file:`README.md` и введите следующее содержимое. Вы можете " "настроить его по своему усмотрению." -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "Создание файла :file:`LICENSE`" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -29881,19 +32088,20 @@ msgstr "" "сайте https://choosealicense.com/. Выбрав лицензию, откройте :file:`LICENSE` " "и введите текст лицензии. Например, если вы выбрали лицензию MIT:" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "Включение других файлов" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 msgid "" "The files listed above will be included automatically in your :term:`source " "distribution `. If you want to include " @@ -29903,11 +32111,11 @@ msgstr "" "дистрибутив `. Если вы хотите включить " "дополнительные файлы, обратитесь к документации по вашему бэкенду сборки." -#: ../source/tutorials/packaging-projects.rst:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "Создание архивов дистрибутивов" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 msgid "" "The next step is to generate :term:`distribution packages ` for the package. These are archives that are uploaded to the " @@ -29917,11 +32125,11 @@ msgstr "" "Package>` для пакета. Это архивы, которые загружаются в индекс пакетов " "Python и могут быть установлены с помощью :ref:`pip`." -#: ../source/tutorials/packaging-projects.rst:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "Убедитесь, что у вас установлена последняя версия PyPA :ref:`build`:" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." @@ -29929,7 +32137,7 @@ msgstr "" "Если у вас возникли проблемы с их установкой, обратитесь к руководству :doc:" "`installing-packages`." -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" @@ -29937,7 +32145,7 @@ msgstr "" "Теперь запустите эту команду из той же директории, где находится :file:" "`pyproject.toml`:" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 msgid "" "This command should output a lot of text and once completed should generate " "two files in the :file:`dist` directory:" @@ -29945,7 +32153,7 @@ msgstr "" "Эта команда должна вывести много текста и по завершении создать два файла в " "каталоге :file:`dist`:" -#: ../source/tutorials/packaging-projects.rst:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` и установите свой пакет из TestPyPI:" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "Обязательно укажите свое имя пользователя в названии пакета!" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" @@ -30067,7 +32275,7 @@ msgstr "" "pip должен установить пакет из TestPyPI, и результат должен выглядеть " "примерно так:" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -30083,7 +32291,7 @@ msgstr "" "неожиданное. Хотя наш пример не имеет зависимостей, рекомендуется избегать " "установки зависимостей при использовании TestPyPI." -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:" @@ -30092,18 +32300,18 @@ msgstr "" "Убедитесь, что вы все еще находитесь в виртуальной среде, а затем запустите " "Python:" -#: ../source/tutorials/packaging-projects.rst:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "и импортировать пакет:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" "**Поздравляем, вы упаковали и распространили проект на Python!** ✨ 🍰 ✨" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -30115,7 +32323,7 @@ msgstr "" "времени удаляет пакеты и аккаунты. Лучше всего использовать TestPyPI для " "тестирования и экспериментов, подобных этому руководству." -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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 " @@ -30124,7 +32332,7 @@ msgstr "" "Когда вы будете готовы загрузить реальный пакет в Python Package Index, вы " "можете сделать все то же самое, что и в этом уроке, но с важными отличиями:" -#: ../source/tutorials/packaging-projects.rst:519 +#: ../source/tutorials/packaging-projects.rst:553 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 " @@ -30134,7 +32342,7 @@ msgstr "" "добавлять имя пользователя, как это было в учебнике, но нельзя использовать " "существующее имя." -#: ../source/tutorials/packaging-projects.rst:521 +#: ../source/tutorials/packaging-projects.rst:555 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 " @@ -30144,7 +32352,7 @@ msgstr "" "это два отдельных сервера и данные для входа с тестового сервера не " "передаются на основной сервер." -#: ../source/tutorials/packaging-projects.rst:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -30156,7 +32364,7 @@ msgstr "" "Теперь, когда вы загружаете пакет в production, вам не нужно указывать ``--" "репозиторий``; пакет будет загружен на https://pypi.org/ по умолчанию." -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." @@ -30164,7 +32372,7 @@ msgstr "" "Установите свой пакет из настоящего PyPI с помощью ``python3 -m pip install " "[your-package]``." -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 msgid "" "At this point if you want to read more on packaging Python libraries here " "are some things you can do:" @@ -30172,7 +32380,7 @@ msgstr "" "На этом этапе, если вы хотите прочитать больше об упаковке библиотек Python, " "вот некоторые вещи, которые вы можете сделать:" -#: ../source/tutorials/packaging-projects.rst:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 msgid "" "Look at the :doc:`guides ` on this site for more advanced " "practical information, or the :doc:`discussions ` for " @@ -30192,7 +32400,7 @@ msgstr "" "index>` на этом сайте или в :doc:`discussions ` для " "объяснений и справочной информации по конкретным темам." -#: ../source/tutorials/packaging-projects.rst:540 +#: ../source/tutorials/packaging-projects.rst:574 msgid "" "Consider packaging tools that provide a single command-line interface for " "project management and packaging, such as :ref:`hatch`, :ref:`flit`, :ref:" @@ -30202,11 +32410,11 @@ msgstr "" "командной строки для управления проектом и упаковки, такие как :ref:" "`hatch`, :ref:`flit`, :ref:`pdm` и :ref:`poetry`." -#: ../source/tutorials/packaging-projects.rst:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "Примечания" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages ` metadata, when used in the HTML representation of the " +#~ "Simple API, **MUST** be emitted using the attribute name ``data-core-" +#~ "metadata``, with the supported values remaining the same." +#~ msgstr "" +#~ "Метаданные : ссылка:спецификация файла метаданных API `, используемые в HTML-представлении простого API, " +#~ "**ОБЯЗАТЕЛЬНО** передаются с помощью атрибута ``данные-ядро-метаданные``, " +#~ "при этом поддерживаемые значения остаются прежними." + +#~ msgid "" +#~ "The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API " +#~ "specification ` JSON representation of the " +#~ "Simple API, **MUST** be emitted using the key ``core-metadata``, with the " +#~ "supported values remaining the same." +#~ msgstr "" +#~ "Метаданные из файла метаданных API , " +#~ "используемые в JSON-представлении простого API , **МОЖНО** передавать с помощью ключа ``ядро-метаданные``, при этом " +#~ "поддерживаемые значения остаются неизменными." + +#~ msgid "" +#~ "To support clients that used the previous key names, the HTML " +#~ "representation **MAY** also be emitted using the ``data-dist-info-" +#~ "metadata``, and if it does so it **MUST** match the value of ``data-core-" +#~ "metadata``." +#~ msgstr "" +#~ "Для поддержки клиентов, использующих предыдущие имена ключей, HTML-" +#~ "представление **МОЖЕТ** также выдаваться с использованием ``данные-дист-" +#~ "инфо-метаданные``, и если оно это делает, то **ДОЛЖНО** соответствовать " +#~ "значению ``данные-ядро-метаданные``." + +#~ msgid "" +#~ "Clients consuming any of the HTML representations of the Simple API " +#~ "**MUST** read the :ref:`the API metadata file specification ` metadata from the key ``data-core-" +#~ "metadata`` if it is present. They **MAY** optionally use the legacy " +#~ "``data-dist-info-metadata`` if it is present but ``data-core-metadata`` " +#~ "is not." +#~ msgstr "" +#~ "Клиенты, использующие любое из HTML-представлений Простого API, " +#~ "**ОБЯЗАНЫ** считывать :ref:`спецификацию файла метаданных API ` метаданные из ключа ``данные-ядро-" +#~ "метаданные``, если он присутствует. Они **МОГУТ** опционально " +#~ "использовать унаследованные ``данные-дист-инфо-метаданные``, если они " +#~ "присутствуют, но ``данные-ядро-метаданные`` отсутствуют." + +#~ msgid "" +#~ "Clients consuming the JSON representation of the Simple API **MUST** read " +#~ "the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " +#~ "They **MAY** optionally use the legacy ``dist-info-metadata`` key if it " +#~ "is present but ``core-metadata`` is not." +#~ msgstr "" +#~ "Клиенты, потребляющие JSON-представление простого API, **ОБЯЗАНЫ** " +#~ "читать : ссылка:спецификация файла метаданных API ` метаданные из ключа ``ядро-метаданные``, если он " +#~ "присутствует. Они **МОГУТ** опционально использовать унаследованный ключ " +#~ "``дист-инфо-метаданные``, если он присутствует, а ``ядро-метаданные`` - " +#~ "нет." + +#~ msgid "" +#~ "This spec sets the current API version to \"1.0\", and expects that " +#~ "future specs that further evolve the simple API will increment the minor " +#~ "version number." +#~ msgstr "" +#~ "Эта спецификация устанавливает текущую версию API на \"1.0\" и ожидает, " +#~ "что будущие спецификации, которые будут развивать простой API, будут " +#~ "увеличивать номер минорной версии." + +#~ msgid "Additional Fields for the Simple API for Package Indexes" +#~ msgstr "Дополнительные поля для простого API для индексов пакетов" + +#~ msgid "" +#~ "This specification defines version 1.1 of the simple repository API. For " +#~ "the HTML version of the API, there is no change from version 1.0. For the " +#~ "JSON version of the API, the following changes are made:" +#~ msgstr "" +#~ "Эта спецификация определяет версию 1.1 простого API репозитория. Для HTML-" +#~ "версии API нет никаких изменений по сравнению с версией 1.0. Для JSON-" +#~ "версии API сделаны следующие изменения:" + +#~ msgid "The ``api-version`` must specify version 1.1 or later." +#~ msgstr "В ``api-версия`` должна быть указана версия 1.1 или более поздняя." + +#~ msgid "" +#~ "Two new \"file information\" keys, ``size`` and ``upload-time``, are " +#~ "added to the ``files`` data." +#~ msgstr "" +#~ "В данные ``файлы`` добавлены два новых ключа \"информации о файле\", " +#~ "``размер`` и ``время загрузки``." + +#~ msgid "" +#~ "The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key " +#~ "is optional." +#~ msgstr "" +#~ "Ключи ``версии`` и ``размер`` являются обязательными. Ключ ``время " +#~ "загрузки`` является необязательным." + +#~ msgid "Additional file information" +#~ msgstr "Дополнительная информация о файле" + +#~ msgid "Two new keys are added to the ``files`` key." +#~ msgstr "К ключу ``файлы`` добавляются два новых ключа." + +#~ msgid "TOML_ type: table" +#~ msgstr "TOML_ тип: таблица" + +#~ msgid "" +#~ "The table may have one of two keys. The ``file`` key has a string value " +#~ "that is a file path relative to ``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 "" +#~ "Таблица может иметь один из двух ключей. Ключ ``file`` имеет строковое " +#~ "значение, которое представляет собой путь к файлу относительно " +#~ "``pyproject.toml`` к файлу, содержащему лицензию на проект. Инструменты " +#~ "ДОЛЖНЫ считать, что кодировка файла - UTF-8. Ключ ``text`` имеет " +#~ "строковое значение, которое является лицензией проекта. Эти ключи " +#~ "являются взаимоисключающими, поэтому инструмент ДОЛЖЕН выдать ошибку, " +#~ "если в метаданных указаны оба ключа." + +#~ msgid "" +#~ "Most build backends automatically include license files in packages. See " +#~ "your backend's documentation for more details." +#~ msgstr "" +#~ "Большинство бэкендов сборки автоматически включают файлы лицензий в " +#~ "пакеты. Более подробную информацию можно найти в документации к вашему " +#~ "бэкенду." + +#~ 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()``." +#~ msgstr "" +#~ "В этом примере после установки вашего проекта будет доступна команда " +#~ "``spam-cli''. Выполнение этой команды будет эквивалентно выполнению " +#~ "команды ``from spam import main_cli; main_cli()``." + #~ msgid "" #~ "conda is the package management tool for `Anaconda `__ Python installations. Anaconda Python is a distribution " @@ -30425,9 +32782,6 @@ msgstr "" #~ "д.), а не в коде, и автоматически извлекайте его оттуда с помощью " #~ "`setuptools_scm `_." -#~ msgid "``install``" -#~ msgstr "``install``" - #~ msgid "" #~ "There is a significant difference between the ``[build-system]`` and " #~ "``[project]`` tables. The former should always be present, regardless of " @@ -30946,12 +33300,6 @@ msgstr "" #~ "`пакеты `, размещенные на PyPI." #, fuzzy -#~| msgid "" -#~| "Any hash algorithm available via ``hashlib`` (specifically any that can " -#~| "be passed to ``hashlib.new()`` and do not require additional parameters) " -#~| "can be used as a key for the hashes dictionary. At least one secure " -#~| "algorithm from ``hashlib.algorithms_guaranteed`` SHOULD always be " -#~| "included. At time of writing, ``sha256`` specifically is recommended." #~ msgid "" #~ "By default, any hash algorithm available via `hashlib `_ (specifically any that can be passed " @@ -31122,9 +33470,6 @@ msgstr "" #~ msgid ":ref:`declaring-build-dependencies`" #~ msgstr "Объявление зависимостей системы сборки" -#~ msgid "Declaring build system dependencies" -#~ msgstr "Объявление зависимостей системы сборки" - #, fuzzy #~ msgid "Current recommendation" #~ msgstr "Рекомендации по инструментам" diff --git a/locales/sai/LC_MESSAGES/messages.po b/locales/sai/LC_MESSAGES/messages.po index d76183ac6..9d1d46786 100644 --- a/locales/sai/LC_MESSAGES/messages.po +++ b/locales/sai/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -479,6 +479,7 @@ 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 @@ -499,6 +500,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 @@ -583,6 +585,7 @@ msgid "" msgstr "" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -758,6 +761,701 @@ msgid "" "library/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 " @@ -1884,7 +2582,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2678,49 +3376,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2729,7 +3469,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2737,7 +3477,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2745,32 +3485,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2780,21 +3520,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2803,31 +3543,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2837,48 +3577,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2886,11 +3626,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2899,11 +3639,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2911,49 +3651,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2962,21 +3722,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2985,11 +3745,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -2997,15 +3757,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3013,21 +3773,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3179,7 +3939,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3536,7 +4296,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4224,7 +4984,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5904,6 +6664,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8556,13 +9641,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8570,11 +9656,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8584,29 +9670,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8614,37 +9700,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8653,98 +9739,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8752,93 +9838,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +9975,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8880,26 +10069,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8907,28 +10096,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8936,26 +10125,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11871,23 +13060,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11895,7 +13091,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11903,64 +13099,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11968,28 +13164,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -11998,22 +13194,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12021,29 +13217,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12053,7 +13262,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12061,7 +13270,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12069,17 +13278,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12087,39 +13296,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12129,11 +13338,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12142,38 +13351,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12181,7 +13390,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12189,18 +13398,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12209,7 +13418,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12220,7 +13429,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12238,7 +13447,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12247,37 +13456,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12285,11 +13494,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12399,8 +13621,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12507,8 +13729,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13128,24 +14350,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13153,28 +14384,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13185,33 +14416,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13220,89 +14451,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13647,11 +14878,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13663,11 +14894,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13675,7 +14906,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13683,17 +14914,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13704,11 +14934,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13717,13 +14947,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13732,7 +14962,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13745,7 +14975,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13755,7 +14985,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13763,20 +14993,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13786,194 +15016,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13981,24 +15212,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14025,7 +15256,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14178,17 +15409,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14197,7 +15428,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14205,7 +15436,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14213,34 +15444,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14249,13 +15480,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14263,7 +15494,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14271,24 +15502,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14296,22 +15527,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14322,65 +15553,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14388,106 +15619,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15709,7 +16940,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15774,7 +17005,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16062,12 +17293,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16121,90 +17352,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16212,7 +17644,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16223,14 +17655,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16239,69 +17671,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16312,11 +17744,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16326,7 +17758,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16334,11 +17766,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16346,13 +17778,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16363,23 +17795,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16387,11 +17819,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16401,33 +17833,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16435,13 +17867,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16450,34 +17882,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16718,7 +18158,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16730,81 +18170,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16818,7 +18259,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16827,7 +18268,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16839,41 +18280,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16881,20 +18426,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16903,92 +18448,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16996,14 +18544,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17011,7 +18559,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17019,24 +18567,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17044,7 +18592,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17055,17 +18603,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17073,19 +18621,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17094,20 +18642,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17115,18 +18663,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17134,7 +18682,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17142,19 +18690,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17252,7 +18806,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17260,7 +18824,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17268,58 +18832,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17327,7 +18891,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17336,13 +18900,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17351,7 +18915,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17360,18 +18924,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17379,7 +18943,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17389,11 +18953,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17401,15 +18965,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17417,11 +18981,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17429,29 +18993,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17460,11 +19038,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17472,14 +19050,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17488,28 +19066,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17537,15 +19115,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17553,23 +19139,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17585,44 +19171,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17630,7 +19216,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17639,7 +19225,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17647,22 +19267,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17671,17 +19291,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17691,11 +19315,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17705,7 +19329,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17713,7 +19337,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17721,11 +19345,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17735,7 +19359,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17745,14 +19369,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17762,7 +19386,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17770,7 +19394,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17779,71 +19403,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17852,7 +19476,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17862,48 +19486,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17912,7 +19559,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17924,7 +19571,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17934,18 +19581,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17953,11 +19600,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17965,7 +19612,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17975,7 +19622,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17985,7 +19632,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17993,28 +19640,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18023,37 +19670,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18061,19 +19708,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18126,7 +19779,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18183,14 +19865,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18200,7 +19882,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18208,44 +19890,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18254,7 +19954,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18265,7 +19965,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18273,7 +20003,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18336,11 +20070,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18349,65 +20083,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18415,7 +20149,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18426,7 +20160,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18435,33 +20169,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18471,7 +20205,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18481,7 +20215,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18489,7 +20223,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18500,22 +20234,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18524,25 +20258,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18550,13 +20284,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18566,18 +20300,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18585,7 +20319,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18595,7 +20329,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18603,11 +20337,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18618,7 +20352,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18626,7 +20360,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18635,7 +20369,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18643,7 +20377,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18653,20 +20387,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18674,7 +20408,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18683,18 +20417,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18702,13 +20436,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18717,23 +20451,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18742,216 +20476,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18984,11 +20570,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18998,11 +20584,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19011,20 +20597,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19032,29 +20618,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19062,21 +20657,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19084,7 +20679,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19094,11 +20689,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19106,113 +20701,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21860,7 +23461,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22117,7 +23718,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22126,24 +23727,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22152,31 +23753,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22184,21 +23797,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22207,57 +23820,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22355,23 +23971,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22379,28 +23995,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22408,44 +24024,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Sinhala `, 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 " @@ -1888,7 +2586,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2682,49 +3380,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2733,7 +3473,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2741,7 +3481,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2749,32 +3489,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2784,21 +3524,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2807,31 +3547,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2841,48 +3581,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2890,11 +3630,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2903,11 +3643,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2915,49 +3655,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2966,21 +3726,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2989,11 +3749,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3001,15 +3761,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3017,21 +3777,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3183,7 +3943,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3540,7 +4300,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4228,7 +4988,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5908,6 +6668,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8560,13 +9645,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8574,11 +9660,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8588,29 +9674,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8618,37 +9704,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8657,98 +9743,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8756,93 +9842,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8851,31 +9979,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8884,26 +10073,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8911,28 +10100,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8940,26 +10129,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11875,23 +13064,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11899,7 +13095,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11907,64 +13103,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11972,28 +13168,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12002,22 +13198,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12025,29 +13221,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12057,7 +13266,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12065,7 +13274,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12073,17 +13282,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12091,39 +13300,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12133,11 +13342,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12146,38 +13355,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12185,7 +13394,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12193,18 +13402,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12213,7 +13422,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12224,7 +13433,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12242,7 +13451,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12251,37 +13460,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12289,11 +13498,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12403,8 +13625,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12511,8 +13733,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13132,24 +14354,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13157,28 +14388,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13189,33 +14420,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13224,89 +14455,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13651,11 +14882,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13667,11 +14898,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13679,7 +14910,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13687,17 +14918,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13708,11 +14938,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13721,13 +14951,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13736,7 +14966,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13749,7 +14979,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13759,7 +14989,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13767,20 +14997,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13790,194 +15020,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13985,24 +15216,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14029,7 +15260,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14182,17 +15413,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14201,7 +15432,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14209,7 +15440,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14217,34 +15448,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14253,13 +15484,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14267,7 +15498,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14275,24 +15506,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14300,22 +15531,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14326,65 +15557,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14392,106 +15623,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15713,7 +16944,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15778,7 +17009,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16066,12 +17297,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16125,90 +17356,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16216,7 +17648,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16227,14 +17659,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16243,69 +17675,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16316,11 +17748,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16330,7 +17762,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16338,11 +17770,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16350,13 +17782,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16367,23 +17799,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16391,11 +17823,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16405,33 +17837,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16439,13 +17871,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16454,34 +17886,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16722,7 +18162,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16734,81 +18174,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16822,7 +18263,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16831,7 +18272,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16843,41 +18284,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16885,20 +18430,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16907,92 +18452,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17000,14 +18548,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17015,7 +18563,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17023,24 +18571,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17048,7 +18596,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17059,17 +18607,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17077,19 +18625,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17098,20 +18646,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17119,18 +18667,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17138,7 +18686,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17146,19 +18694,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17256,7 +18810,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17264,7 +18828,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17272,58 +18836,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17331,7 +18895,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17340,13 +18904,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17355,7 +18919,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17364,18 +18928,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17383,7 +18947,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17393,11 +18957,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17405,15 +18969,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17421,11 +18985,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17433,29 +18997,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17464,11 +19042,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17476,14 +19054,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17492,28 +19070,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17541,15 +19119,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17557,23 +19143,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17589,44 +19175,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17634,7 +19220,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17643,7 +19229,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17651,22 +19271,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17675,17 +19295,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17695,11 +19319,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17709,7 +19333,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17717,7 +19341,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17725,11 +19349,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17739,7 +19363,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17749,14 +19373,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17766,7 +19390,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17774,7 +19398,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17783,71 +19407,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17856,7 +19480,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17866,48 +19490,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17916,7 +19563,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17928,7 +19575,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17938,18 +19585,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17957,11 +19604,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17969,7 +19616,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17979,7 +19626,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17989,7 +19636,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17997,28 +19644,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18027,37 +19674,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18065,19 +19712,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18130,7 +19783,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18187,14 +19869,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18204,7 +19886,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18212,44 +19894,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18258,7 +19958,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18269,7 +19969,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18277,7 +20007,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18340,11 +20074,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18353,65 +20087,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18419,7 +20153,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18430,7 +20164,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18439,33 +20173,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18475,7 +20209,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18485,7 +20219,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18493,7 +20227,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18504,22 +20238,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18528,25 +20262,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18554,13 +20288,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18570,18 +20304,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18589,7 +20323,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18599,7 +20333,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18607,11 +20341,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18622,7 +20356,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18630,7 +20364,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18639,7 +20373,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18647,7 +20381,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18657,20 +20391,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18678,7 +20412,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18687,18 +20421,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18706,13 +20440,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18721,23 +20455,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18746,216 +20480,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18988,11 +20574,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19002,11 +20588,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19015,20 +20601,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19036,29 +20622,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19066,21 +20661,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19088,7 +20683,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19098,11 +20693,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19110,113 +20705,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21864,7 +23465,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22121,7 +23722,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22130,24 +23731,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22156,31 +23757,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22188,21 +23801,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22211,57 +23824,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22359,23 +23975,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22383,28 +23999,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22412,44 +24028,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Slovak `, 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 " @@ -1998,7 +2696,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2794,49 +3492,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 #: ../source/guides/index-mirrors-and-caches.rst:52 msgid "Project" msgstr "Projekt" -#: ../source/glossary.rst:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2845,7 +3585,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2853,7 +3593,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2861,34 +3601,34 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy #| msgid "Project name" msgid "Project Root Directory" msgstr "Meno projektu" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2898,23 +3638,23 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata" msgstr "Meno projektu" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2923,33 +3663,33 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata Key" msgstr "Meno projektu" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2959,48 +3699,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -3008,11 +3748,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3021,11 +3761,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3033,49 +3773,71 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +#| msgid "Project name" +msgid "Root License Directory" +msgstr "Meno projektu" + +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3084,21 +3846,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3107,11 +3869,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3119,15 +3881,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3135,23 +3897,23 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy #| msgid "Project" msgid "Wheel Project" msgstr "Projekt" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3303,7 +4065,7 @@ msgstr "Poznámka" #: ../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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3660,7 +4422,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4354,7 +5116,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -6056,6 +6818,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8716,13 +9803,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8730,11 +9818,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8744,29 +9832,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8774,37 +9862,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8813,98 +9901,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8912,93 +10000,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -9007,31 +10137,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -9040,26 +10231,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9067,28 +10258,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9096,26 +10287,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -12031,23 +13222,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -12055,7 +13253,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -12063,64 +13261,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12128,28 +13326,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12158,22 +13356,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12181,29 +13379,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12213,7 +13424,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12221,7 +13432,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12229,17 +13440,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12247,39 +13458,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12289,11 +13500,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12302,38 +13513,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12341,7 +13552,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12349,18 +13560,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12369,7 +13580,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12380,7 +13591,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12398,7 +13609,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12407,37 +13618,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12445,11 +13656,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12559,8 +13783,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12667,8 +13891,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13288,24 +14512,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13313,28 +14546,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13345,33 +14578,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13380,89 +14613,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13809,11 +15042,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13825,11 +15058,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13837,7 +15070,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13845,17 +15078,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13866,11 +15098,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13879,13 +15111,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13894,7 +15126,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13907,7 +15139,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13917,7 +15149,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13925,20 +15157,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13948,194 +15180,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14143,24 +15376,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14187,7 +15420,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14340,17 +15573,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14359,7 +15592,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14367,7 +15600,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14375,34 +15608,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14411,13 +15644,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14425,7 +15658,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14433,24 +15666,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14458,22 +15691,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14484,65 +15717,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14550,106 +15783,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15875,7 +17108,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15940,7 +17173,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16228,12 +17461,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16287,90 +17520,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16378,7 +17812,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16389,14 +17823,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16405,69 +17839,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16478,11 +17912,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16492,7 +17926,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16500,11 +17934,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16512,13 +17946,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16529,23 +17963,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16553,11 +17987,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16567,33 +18001,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16601,13 +18035,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16616,34 +18050,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16884,7 +18326,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16896,81 +18338,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16984,7 +18427,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16993,7 +18436,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -17005,41 +18448,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -17047,20 +18594,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17069,92 +18616,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17162,14 +18712,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17177,7 +18727,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17185,24 +18735,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17210,7 +18760,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17221,17 +18771,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17239,19 +18789,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17260,20 +18810,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17281,18 +18831,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17300,7 +18850,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17308,19 +18858,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17418,7 +18974,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17426,7 +18992,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17434,58 +19000,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17493,7 +19059,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17502,13 +19068,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17517,7 +19083,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17526,18 +19092,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17545,7 +19111,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17555,11 +19121,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17567,15 +19133,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17583,11 +19149,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17595,29 +19161,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17626,11 +19206,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17638,14 +19218,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17654,28 +19234,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17703,15 +19283,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17719,23 +19307,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17751,44 +19339,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17796,7 +19384,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17805,7 +19393,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17813,22 +19435,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17837,17 +19459,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17857,11 +19483,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17871,7 +19497,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17879,7 +19505,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17887,13 +19513,13 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy #| msgid "Translations" msgid "Installers" msgstr "Preklady" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17903,7 +19529,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17913,14 +19539,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17930,7 +19556,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17938,7 +19564,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17947,71 +19573,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -18020,7 +19646,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -18030,48 +19656,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18080,7 +19729,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18092,7 +19741,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18102,18 +19751,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18121,11 +19770,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18133,7 +19782,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18143,7 +19792,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18153,7 +19802,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18161,28 +19810,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18191,37 +19840,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18229,19 +19878,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy #| msgid "Project" msgid "Project List" msgstr "Projekt" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18296,7 +19951,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18355,14 +20039,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18372,7 +20056,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18380,44 +20064,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18426,7 +20128,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18437,7 +20139,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18445,7 +20177,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18508,11 +20244,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18521,65 +20257,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18587,7 +20323,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18598,7 +20334,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18607,33 +20343,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18643,7 +20379,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18653,7 +20389,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18661,7 +20397,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18672,22 +20408,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18696,25 +20432,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18722,13 +20458,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18738,18 +20474,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18757,7 +20493,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18767,7 +20503,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18775,11 +20511,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18790,7 +20526,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18798,7 +20534,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18807,7 +20543,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18815,7 +20551,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18825,20 +20561,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18846,7 +20582,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18855,18 +20591,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18874,13 +20610,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18889,23 +20625,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18914,216 +20650,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19156,11 +20744,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19170,11 +20758,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19183,20 +20771,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19204,29 +20792,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19234,21 +20831,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19256,7 +20853,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19266,11 +20863,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19278,113 +20875,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -22036,7 +23639,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22293,7 +23896,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22302,24 +23905,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22328,31 +23931,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22360,21 +23975,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22383,57 +23998,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22531,23 +24149,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22555,28 +24173,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22584,44 +24202,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2024. +# தமிழ்நேரம் , 2025. +# WofWca , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-02-27 01:55+0000\n" +"Last-Translator: தமிழ்நேரம் \n" +"Language-Team: Tamil \n" "Language: ta\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.10.2-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" -msgstr "" +msgstr "இந்த வழிகாட்டிக்கு பங்களிக்கவும்" #: ../source/contribute.rst:7 msgid "" "The |PyPUG| welcomes contributors! There are lots of ways to help out, " "including:" -msgstr "" +msgstr "தி | பைபக் | பங்களிப்பாளர்களை வரவேற்கிறது! உட்பட உதவ நிறைய வழிகள் உள்ளன:" #: ../source/contribute.rst:10 msgid "Reading the guide and giving feedback" -msgstr "" +msgstr "வழிகாட்டியைப் படித்து கருத்துக்களை வழங்குதல்" #: ../source/contribute.rst:11 msgid "Reviewing new contributions" -msgstr "" +msgstr "புதிய பங்களிப்புகளை மதிப்பாய்வு செய்தல்" #: ../source/contribute.rst:12 msgid "Revising existing content" -msgstr "" +msgstr "இருக்கும் உள்ளடக்கத்தை திருத்துதல்" #: ../source/contribute.rst:13 msgid "Writing new content" -msgstr "" +msgstr "புதிய உள்ளடக்கத்தை எழுதுதல்" #: ../source/contribute.rst:14 msgid "Translate the guide" -msgstr "" +msgstr "வழிகாட்டியை மொழிபெயர்க்கவும்" #: ../source/contribute.rst:16 msgid "" @@ -52,16 +57,20 @@ msgid "" "`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 "" +msgstr "| பைபக் |" #: ../source/contribute.rst:32 msgid "Documentation types" -msgstr "" +msgstr "ஆவணப்படுத்தல் வகைகள்" #: ../source/contribute.rst:34 msgid "" @@ -70,11 +79,15 @@ msgid "" "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 "" +msgstr "பயிற்சிகள்" #: ../source/contribute.rst:44 msgid "" @@ -82,11 +95,14 @@ msgid "" "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 "" +msgstr "வழிகாட்டிகள்" #: ../source/contribute.rst:53 msgid "" @@ -97,10 +113,15 @@ msgid "" "accomplishing the task. :doc:`example guide-style document `." msgstr "" +"வழிகாட்டிகள் ஒரு குறிப்பிட்ட பணியை நிறைவேற்றுவதில் கவனம் செலுத்துகின்றன, மேலும் அவை " +"முன்நிபந்தனைக்கு முந்தைய அறிவை எடுத்துக் கொள்ளலாம். இவை பயிற்சிகளைப் போன்றவை, ஆனால் ஒரு " +"குறுகிய மற்றும் தெளிவான கவனம் செலுத்துகின்றன, மேலும் தேவைக்கேற்ப நிறைய எச்சரிக்கைகள் " +"மற்றும் கூடுதல் தகவல்களை வழங்க முடியும். பணியை நிறைவேற்றுவதற்கான பல அணுகுமுறைகளையும் " +"அவர்கள் விவாதிக்கலாம். ." #: ../source/contribute.rst:60 ../source/discussions/index.rst:2 msgid "Discussions" -msgstr "" +msgstr "விவாதங்கள்" #: ../source/contribute.rst:62 msgid "" @@ -108,10 +129,12 @@ msgid "" "specific topic without a specific goal in mind. :doc:`example discussion-" "style document `." msgstr "" +"புரிந்துகொள்ளுதல் மற்றும் தகவல்களில் விவாதங்கள் கவனம் செலுத்துகின்றன. இவை ஒரு குறிப்பிட்ட " +"இலக்கை மனதில் கொண்டு ஒரு குறிப்பிட்ட தலைப்பை ஆராய்கின்றன. ." #: ../source/contribute.rst:67 msgid "Specifications" -msgstr "" +msgstr "விவரக்குறிப்புகள்" #: ../source/contribute.rst:69 msgid "" @@ -120,31 +143,40 @@ msgid "" "tools. :doc:`example specification-style document `." msgstr "" +"விவரக்குறிப்புகள் என்பது பேக்கேசிங் கருவிகளுக்கு இடையில் இயங்குதலுக்காக ஒப்புக் கொள்ளப்பட்ட " +"இடைமுகத்தை விரிவாக ஆவணப்படுத்துவதில் கவனம் செலுத்தும் குறிப்பு ஆவணங்கள் ஆகும். : டாக்: " +"`எடுத்துக்காட்டு விவரக்குறிப்பு-பாணி ஆவணம் <விவரக்குறிப்புகள்/கோர்-மெட்டாடேட்டா>`." #: ../source/contribute.rst:75 msgid "Translations" -msgstr "" +msgstr "மொழிபெயர்ப்புகள்" #: ../source/contribute.rst:77 msgid "" "We use `Weblate`_ to manage translations of this project. Please visit the " "`packaging.python.org`_ project on Weblate to contribute." msgstr "" +"இந்த திட்டத்தின் மொழிபெயர்ப்புகளை நிர்வகிக்க `வெப்லேட்`_ ஐப் பயன்படுத்துகிறோம். பங்களிக்க " +"வெப்லேட்டில் உள்ள `பேக்கேசிங்.பிதான்.ஆர்ச்`_ திட்டத்தைப் பார்வையிடவும்." #: ../source/contribute.rst:80 msgid "" "If you are experiencing issues while you are working on translations, please " "open an issue on `GitHub`_." msgstr "" +"நீங்கள் மொழிபெயர்ப்புகளில் பணிபுரியும் போது சிக்கல்களைச் சந்திக்கிறீர்கள் என்றால், தயவுசெய்து " +"`github`_ இல் ஒரு சிக்கலைத் திறக்கவும்." #: ../source/contribute.rst:85 msgid "" "Any translations of this project should follow `reStructuredText syntax`_." msgstr "" +"இந்த திட்டத்தின் எந்த மொழிபெயர்ப்புகளும் `மறுசீரமைப்பு டெக்ச்ட் தொடரியல்`_ ஐப் பின்பற்ற " +"வேண்டும்." #: ../source/contribute.rst:93 msgid "Adding a language" -msgstr "" +msgstr "ஒரு மொழியைச் சேர்ப்பது" #: ../source/contribute.rst:95 msgid "" @@ -152,40 +184,46 @@ msgid "" "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 "" +msgstr "மறுசீரமைப்பின் தொடரியல் தொடரியல்" #: ../source/contribute.rst:102 msgid "" "If you are not familiar with reStructuredText (RST) syntax, please read " "`this guide`_ before translating on Weblate." msgstr "" +"மறுசீரமைப்பு (RST) தொடரியல் உங்களுக்கு தெரிந்திருக்கவில்லை என்றால், வெப்லேட்டில் " +"மொழிபெயர்ப்பதற்கு முன் `இந்த வழிகாட்டி`_ ஐப் படிக்கவும்." #: ../source/contribute.rst:105 msgid "**Do not translate the text in reference directly**" -msgstr "" +msgstr "** உரையை நேரடியாக மொழிபெயர்க்க வேண்டாம் **" #: ../source/contribute.rst:107 msgid "" "When translating the text in reference, please do not translate them " "directly." -msgstr "" +msgstr "உரையை குறிப்பில் மொழிபெயர்க்கும்போது, அவற்றை நேரடியாக மொழிபெயர்க்க வேண்டாம்." #: ../source/contribute.rst:0 msgid "Wrong: Translate the following text directly:" -msgstr "" +msgstr "தவறு: பின்வரும் உரையை நேரடியாக மொழிபெயர்க்கவும்:" #: ../source/contribute.rst:0 msgid "" "Right: Translate the following text with your own language and add the " "original reference:" msgstr "" +"வலது: பின்வரும் உரையை உங்கள் சொந்த மொழியுடன் மொழிபெயர்த்து அசல் குறிப்பைச் சேர்க்கவும்:" #: ../source/contribute.rst:124 msgid "Building the guide locally" -msgstr "" +msgstr "வழிகாட்டியை உள்நாட்டில் உருவாக்குதல்" #: ../source/contribute.rst:126 msgid "" @@ -193,10 +231,15 @@ msgid "" "locally in order to test your changes. In order to build this guide locally, " "you'll need:" msgstr "" +"பங்களிக்கத் தேவையில்லை என்றாலும், உங்கள் மாற்றங்களைச் சோதிக்க இந்த வழிகாட்டியை உள்நாட்டில் " +"உருவாக்குவது பயனுள்ளதாக இருக்கும். இந்த வழிகாட்டியை உள்ளூரில் உருவாக்க, உங்களுக்குத் " +"தேவை:" #: ../source/contribute.rst:130 msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" msgstr "" +": டாக்: `NOX `. `` பிப்`` ஐப் பயன்படுத்தி நீங்கள் NOX ஐ நிறுவலாம் அல்லது " +"மேம்படுத்தலாம்:" #: ../source/contribute.rst:137 msgid "" @@ -205,12 +248,16 @@ msgid "" "guide:starting/installation>` to install Python 3.11 on your operating " "system." msgstr "" +"பைதான் 3.11. எங்கள் உருவாக்க ச்கிரிப்ட்கள் பொதுவாக பைதான் 3.11 உடன் மட்டுமே " +"சோதிக்கப்படுகின்றன. பார்க்க: டாக்: `பைதான் நிறுவல் வழிமுறைகளுக்கான இட்சிகரின் வழிகாட்டி " +"<பைதான்-வழிகாட்டி: தொடக்க/நிறுவல்>` உங்கள் இயக்க முறைமையில் பைதான் 3.11 ஐ நிறுவ." #: ../source/contribute.rst:141 msgid "" "To build the guide, run the following shell command in the project's root " "folder:" msgstr "" +"வழிகாட்டியை உருவாக்க, திட்டத்தின் ரூட் கோப்புறையில் பின்வரும் செல் கட்டளையை இயக்கவும்:" #: ../source/contribute.rst:147 msgid "" @@ -219,20 +266,25 @@ msgid "" "guide in web browser, but it's recommended to serve the guide using an HTTP " "server." msgstr "" +"செயல்முறை முடிந்ததும் நீங்கள் உஉகுமொ வெளியீட்டை ``./பில்ட்/HTML`` கோப்பகத்தில் காணலாம். " +"வலை உலாவியில் வழிகாட்டியைக் காண நீங்கள் `` index.html`` கோப்பைத் திறக்கலாம், ஆனால் HTTP " +"சேவையகத்தைப் பயன்படுத்தி வழிகாட்டியை வழங்க பரிந்துரைக்கப்படுகிறது." #: ../source/contribute.rst:152 msgid "" "You can build the guide and serve it via an HTTP server using the following " "command:" msgstr "" +"நீங்கள் வழிகாட்டியை உருவாக்கி பின்வரும் கட்டளையைப் பயன்படுத்தி ஒரு HTTP சேவையகம் வழியாக " +"பணி செய்யலாம்:" #: ../source/contribute.rst:159 msgid "The guide will be browsable via http://localhost:8000." -msgstr "" +msgstr "வழிகாட்டி http: // localhost: 8000 வழியாக உலாவக்கூடியதாக இருக்கும்." #: ../source/contribute.rst:163 msgid "Where the guide is deployed" -msgstr "" +msgstr "வழிகாட்டி பயன்படுத்தப்படும் இடத்தில்" #: ../source/contribute.rst:165 msgid "" @@ -240,10 +292,13 @@ msgid "" "readthedocs.org/projects/python-packaging-user-guide/. It's served from a " "custom domain and fronted by Fast.ly." msgstr "" +"வழிகாட்டி ReadThedocs வழியாகவும், உள்ளமைவு https://readthedocs.org/projects/" +"python-packaging-user-guide/ இல் பயன்படுத்தப்படுகிறது. இது ஒரு தனிப்பயன் " +"களத்திலிருந்து வழங்கப்படுகிறது மற்றும் ஃபாச்ட்.லியின் முன்னால் உள்ளது." #: ../source/contribute.rst:171 msgid "Style guide" -msgstr "" +msgstr "நடை வழிகாட்டி" #: ../source/contribute.rst:173 msgid "" @@ -252,26 +307,34 @@ msgid "" "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:180 msgid "Purpose" -msgstr "" +msgstr "நோக்கம்" #: ../source/contribute.rst:182 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:187 msgid "Scope" -msgstr "" +msgstr "நோக்கம்" #: ../source/contribute.rst:189 msgid "" "The guide is meant to answer questions and solve problems with accurate and " "focused recommendations." msgstr "" +"வழிகாட்டி என்பது கேள்விகளுக்கு பதிலளிப்பதற்கும் துல்லியமான மற்றும் கவனம் செலுத்தும் " +"பரிந்துரைகளுடன் சிக்கல்களைத் தீர்ப்பதற்கும் ஆகும்." #: ../source/contribute.rst:192 msgid "" @@ -281,14 +344,19 @@ msgid "" "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:200 msgid "Audience" -msgstr "" +msgstr "பார்வையாளர்கள்" #: ../source/contribute.rst:202 msgid "The audience of this guide is anyone who uses Python with packages." -msgstr "" +msgstr "இந்த வழிகாட்டியின் பார்வையாளர்கள் பைத்தானை தொகுப்புகளுடன் பயன்படுத்தும் எவரும்." #: ../source/contribute.rst:204 msgid "" @@ -296,6 +364,9 @@ msgid "" "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:208 msgid "" @@ -303,16 +374,21 @@ msgid "" "themselves as programmers. The audience of this guide includes astronomers " "or painters or students as well as professional software developers." msgstr "" +"குறிப்பாக, பைத்தானைப் பயன்படுத்தும் அனைவரும் தங்களை புரோகிராமர்களாகப் பார்க்கவில்லை என்பதை " +"நினைவில் கொள்ளுங்கள். இந்த வழிகாட்டியின் பார்வையாளர்களில் வானியலாளர்கள் அல்லது ஓவியர்கள் " +"அல்லது மாணவர்கள் மற்றும் தொழில்முறை மென்பொருள் உருவாக்குநர்கள் உள்ளனர்." #: ../source/contribute.rst:214 msgid "Voice and tone" -msgstr "" +msgstr "குரல் மற்றும் தொனி" #: ../source/contribute.rst:216 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:219 msgid "" @@ -321,6 +397,11 @@ msgid "" "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:224 msgid "" @@ -331,6 +412,12 @@ msgid "" "hereby granted permission to end a sentence in a preposition, if that's what " "you want to end it with." msgstr "" +"இங்கே விரைவான சோதனை: உங்கள் எழுத்தின் குரல் மற்றும் தொனியைப் புரிந்துகொள்ள சத்தமாக படிக்க " +"முயற்சிக்கவும். இது நீங்கள் சொல்வதைப் போலத் தோன்றுகிறதா அல்லது நீங்கள் ஒரு பகுதியை " +"செயல்படுத்துவது அல்லது ஒரு உரையை வழங்குவது போல் தெரிகிறது? சுருக்கங்களைப் பயன்படுத்த " +"தயங்காதீர்கள், மேலும் கடுமையான இலக்கண விதிகளில் ஒட்டிக்கொள்வதைப் பற்றி கவலைப்பட வேண்டாம். " +"ஒரு வாக்கியத்தை ஒரு முன்மொழிவில் முடிக்க உங்களுக்கு இதன்மூலம் இசைவு வழங்கப்படுகிறது, " +"அதுதான் நீங்கள் அதை முடிக்க விரும்பினால்." #: ../source/contribute.rst:231 msgid "" @@ -339,36 +426,42 @@ msgid "" "joke, but if you're covering a sensitive security recommendation, you might " "want to avoid jokes altogether." msgstr "" +"வழிகாட்டியை எழுதும் போது, தலைப்பின் தீவிரத்தன்மைக்கும் சிரமத்திற்கும் உங்கள் தொனியை " +"சரிசெய்யவும். நீங்கள் ஒரு அறிமுக டுடோரியலை எழுதுகிறீர்கள் என்றால், ஒரு நகைச்சுவையை " +"உருவாக்குவது சரி, ஆனால் நீங்கள் ஒரு முக்கியமான பாதுகாப்பு பரிந்துரையை " +"உள்ளடக்கியிருந்தால், நீங்கள் நகைச்சுவைகளை முழுவதுமாக தவிர்க்க விரும்பலாம்." #: ../source/contribute.rst:238 msgid "Conventions and mechanics" -msgstr "" +msgstr "மாநாடுகள் மற்றும் இயக்கவியல்" #: ../source/contribute.rst:246 msgid "**Write to the reader**" -msgstr "" +msgstr "** வாசகருக்கு எழுதுங்கள் **" #: ../source/contribute.rst:241 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 "" +msgstr "தவறு: அதை நிறுவ, பயனர் இயங்குகிறார்…" #: ../source/contribute.rst:0 msgid "Right: You can install it by running…" -msgstr "" +msgstr "வலது: இயங்குவதன் மூலம் அதை நிறுவலாம்…" #: ../source/contribute.rst:0 msgid "Right: To install it, run…" -msgstr "" +msgstr "வலது: அதை நிறுவ, இயக்க…" #: ../source/contribute.rst:252 msgid "**State assumptions**" -msgstr "" +msgstr "** மாநில அனுமானங்கள் **" #: ../source/contribute.rst:249 msgid "" @@ -377,10 +470,13 @@ msgid "" "you're going to make assumptions, then say what assumptions that you're " "going to make." msgstr "" +"நிலையற்ற அனுமானங்களைச் செய்வதைத் தவிர்க்கவும். வலையில் படிப்பது என்பது வழிகாட்டியின் எந்தப் " +"பக்கமும் வாசகர் பார்க்கும் வழிகாட்டியின் முதல் பக்கமாக இருக்கலாம். நீங்கள் அனுமானங்களைச் " +"செய்யப் போகிறீர்கள் என்றால், நீங்கள் என்ன செய்யப் போகிறீர்கள் என்று சொல்லுங்கள்." #: ../source/contribute.rst:257 msgid "**Cross-reference generously**" -msgstr "" +msgstr "** குறுக்கு-குறிப்பு தாராளமாக **" #: ../source/contribute.rst:255 msgid "" @@ -388,36 +484,41 @@ msgid "" "that covers it, or link to a relevant document elsewhere. Save the reader a " "search." msgstr "" +"முதல் முறையாக நீங்கள் ஒரு கருவி அல்லது பயிற்சியைக் குறிப்பிடும்போது, அதை உள்ளடக்கிய " +"வழிகாட்டியின் ஒரு பகுதியுடன் இணைக்கவும் அல்லது வேறு இடங்களில் தொடர்புடைய ஆவணத்துடன் " +"இணைக்கவும். வாசகரை ஒரு தேடலைச் சேமிக்கவும்." #: ../source/contribute.rst:267 msgid "**Respect naming practices**" -msgstr "" +msgstr "** பெயரிடும் நடைமுறைகளை மதிக்கவும் **" #: ../source/contribute.rst:260 msgid "" "When naming tools, sites, people, and other proper nouns, use their " "preferred capitalization." msgstr "" +"கருவிகள், தளங்கள், நபர்கள் மற்றும் பிற சரியான பெயர்ச்சொற்களுக்கு பெயரிடும் போது, " +"தங்களுக்கு விருப்பமான மூலதனத்தைப் பயன்படுத்துங்கள்." #: ../source/contribute.rst:0 msgid "Wrong: Pip uses…" -msgstr "" +msgstr "தவறு: பிஐபி பயன்படுத்துகிறது…" #: ../source/contribute.rst:0 msgid "Right: pip uses…" -msgstr "" +msgstr "வலது: பிஐபி பயன்படுத்துகிறது…" #: ../source/contribute.rst:0 msgid "Wrong: …hosted on github." -msgstr "" +msgstr "தவறு:… கிட்அப்பில் புரவலன் செய்யப்பட்டது." #: ../source/contribute.rst:0 msgid "Right: …hosted on GitHub." -msgstr "" +msgstr "வலது:… கிட்அப்பில் புரவலன் செய்யப்பட்டது." #: ../source/contribute.rst:276 msgid "**Use a gender-neutral style**" -msgstr "" +msgstr "** பாலின-நடுநிலை பாணியைப் பயன்படுத்தவும் **" #: ../source/contribute.rst:270 msgid "" @@ -425,22 +526,25 @@ msgid "" "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 "" +msgstr "தவறு: ஒரு பராமரிப்பாளர் கோப்பை பதிவேற்றுகிறார். பின்னர் அவர்…" #: ../source/contribute.rst:0 msgid "Right: A maintainer uploads the file. Then they…" -msgstr "" +msgstr "வலது: ஒரு பராமரிப்பாளர் கோப்பை பதிவேற்றுகிறார். பின்னர் அவர்கள்…" #: ../source/contribute.rst:0 msgid "Right: A maintainer uploads the file. Then the maintainer…" -msgstr "" +msgstr "வலது: ஒரு பராமரிப்பாளர் கோப்பை பதிவேற்றுகிறார். பின்னர் பராமரிப்பாளர்…" #: ../source/contribute.rst:288 msgid "**Headings**" -msgstr "" +msgstr "** தலைப்புகள் **" #: ../source/contribute.rst:279 msgid "" @@ -449,36 +553,45 @@ msgid "" "reader might want to know *How do I install MyLibrary?* so a good heading " "might be *Install MyLibrary*." msgstr "" +"வாசகர் தேடும் சொற்களைப் பயன்படுத்தும் தலைப்புகளை எழுதுங்கள். இதைச் செய்வதற்கான ஒரு சிறந்த " +"வழி, உங்கள் தலைப்பு மறைமுகமான கேள்வியை முடிக்க வேண்டும். எடுத்துக்காட்டாக, ஒரு வாசகர் " +"தெரிந்து கொள்ள விரும்பலாம் *மைலிபரியை எவ்வாறு நிறுவுவது? *எனவே ஒரு நல்ல தலைப்பு " +"*மைலிபரியை நிறுவலாம் *." #: ../source/contribute.rst:284 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 "" +msgstr "தவறு: பைத்தானைப் பற்றி நீங்கள் தெரிந்து கொள்ள வேண்டிய விசயங்கள்" #: ../source/contribute.rst:0 msgid "Right: Things you should know about Python" -msgstr "" +msgstr "உரிமை: பைத்தானைப் பற்றி நீங்கள் தெரிந்து கொள்ள வேண்டிய விசயங்கள்" #: ../source/contribute.rst:291 msgid "**Numbers**" -msgstr "" +msgstr "** எண்கள் **" #: ../source/contribute.rst:291 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 "" +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 @@ -489,16 +602,17 @@ msgstr "" #: ../source/guides/supporting-multiple-python-versions.rst:0 #: ../source/guides/supporting-windows-using-appveyor.rst:0 msgid "Page Status" -msgstr "" +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 "" +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 @@ -507,25 +621,25 @@ msgstr "" #: ../source/guides/supporting-multiple-python-versions.rst:0 #: ../source/guides/supporting-windows-using-appveyor.rst:0 msgid "Last Reviewed" -msgstr "" +msgstr "கடைசியாக மதிப்பாய்வு செய்யப்பட்டது" #: ../source/discussions/deploying-python-applications.rst:7 msgid "2021-8-24" -msgstr "" +msgstr "2021-8-24" #: ../source/discussions/deploying-python-applications.rst:11 #: ../source/specifications/externally-managed-environments.rst:130 #: ../source/specifications/platform-compatibility-tags.rst:14 msgid "Overview" -msgstr "" +msgstr "கண்ணோட்டம்" #: ../source/discussions/deploying-python-applications.rst:15 msgid "Supporting multiple hardware platforms" -msgstr "" +msgstr "பல வன்பொருள் தளங்களை ஆதரிக்கிறது" #: ../source/discussions/deploying-python-applications.rst:37 msgid "OS packaging & installers" -msgstr "" +msgstr "OS பேக்கேசிங் மற்றும் நிறுவிகள்" #: ../source/discussions/deploying-python-applications.rst:49 #: ../source/discussions/deploying-python-applications.rst:86 @@ -545,6 +659,12 @@ msgid "" "tool downloads the specified Python-interpreter for Windows and packages it " "with all the dependencies in a single Windows-executable installer." msgstr "" +"`Pynsist ____ என்பது பைதான் நிரல்களை பைதான்-" +"இன்டர்ச்பிரெட்டருடன் NSIS ஐ அடிப்படையாகக் கொண்ட ஒற்றை நிறுவியில் தொகுக்கும் ஒரு " +"கருவியாகும். பெரும்பாலான சந்தர்ப்பங்களில், பேக்கேசிங் மட்டுமே பயனருக்கு பைதான்-" +"இன்டர்ச்பிரீட்டரின் பதிப்பைத் தேர்வுசெய்து நிரலின் சார்புகளை அறிவிக்க வேண்டும். கருவி " +"விண்டோசிற்கான குறிப்பிட்ட பைதான்-இடைக்காலத்தை பதிவிறக்கம் செய்து, விண்டோச்-" +"செயல்படுத்தக்கூடிய நிறுவியில் அனைத்து சார்புகளையும் தொகுப்பாக மாற்றுகிறது." #: ../source/discussions/deploying-python-applications.rst:67 msgid "" @@ -553,6 +673,9 @@ msgid "" "application directory, independent of any other Python installation on the " "computer." msgstr "" +"நிறுவப்பட்ட நிரலை தொடக்க-மெனுவில் நிறுவி சேர்க்கும் குறுக்குவழியில் இருந்து தொடங்கலாம். " +"இது கணினியில் வேறு எந்த பைதான் நிறுவலிலிருந்தும் சுயாதீனமாக, அதன் பயன்பாட்டு " +"கோப்பகத்தில் நிறுவப்பட்ட பைதான் மொழிபெயர்ப்பாளரைப் பயன்படுத்துகிறது." #: ../source/discussions/deploying-python-applications.rst:71 msgid "" @@ -561,10 +684,13 @@ msgid "" "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 "" +msgstr "பயன்பாட்டு மூட்டைகள்" #: ../source/discussions/deploying-python-applications.rst:89 msgid "py2exe" @@ -581,8 +707,17 @@ msgid "" "supported. The distutils extension is released under the MIT-licence and " "Mozilla Public License 2.0." msgstr "" +"`py2exe ____ என்பது ஒரு தொலைதூர நீட்டிப்பு " +"ஆகும், இது பைத்தான் ச்கிரிப்ட்களிலிருந்து முழுமையான சாளரங்கள் இயங்கக்கூடிய நிரல்களை (32-" +"பிட் மற்றும் 64-பிட்) உருவாக்க அனுமதிக்கிறது. உத்தியோகபூர்வ மேம்பாட்டு சுழற்சியில் " +"சேர்க்கப்பட்டுள்ள பைதான் பதிப்புகள் ஆதரிக்கப்படுகின்றன (பைதான் கிளைகளின் நிலையை` என்பதைக் " +"குறிக்கிறது). PY2EXE கன்சோல் இயங்கக்கூடிய மற்றும் சாளரங்கள் (GUI) இயங்கக்கூடியவற்றை " +"உருவாக்க முடியும். சாளரங்கள் சேவைகளை உருவாக்குதல், மற்றும் டி.எல்.எல்/எக்ச்இ காம் " +"சேவையகங்கள் வேலை செய்யக்கூடும், ஆனால் அது தீவிரமாக ஆதரிக்கப்படவில்லை. டிச்டிடில்ச் " +"நீட்டிப்பு எம்ஐடி-உரிமம் மற்றும் மொசில்லா பொது உரிமம் 2.0 இன் கீழ் வெளியிடப்படுகிறது." #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -598,15 +733,20 @@ msgid "" "applications, it cannot create Mac applications on other platforms. py2app " "is released under the MIT-license." msgstr "" +"`py2app ____ என்பது ஒரு பைதான் செட்டுப்டூல்ச் " +"கட்டளை, இது பைதான் ச்கிரிப்ட்களிலிருந்து முழுமையான மேகோச் பயன்பாட்டு மூட்டைகள் மற்றும் " +"செருகுநிரல்களை உருவாக்க உங்களை அனுமதிக்கும். பயன்பாடுகளை உருவாக்க மாகோ களில் PY2APP " +"பயன்படுத்தப்பட வேண்டும் என்பதை நினைவில் கொள்க, இது மற்ற தளங்களில் MAC பயன்பாடுகளை " +"உருவாக்க முடியாது. PY2APP MIT-LICENSE இன் கீழ் வெளியிடப்படுகிறது." #: ../source/discussions/deploying-python-applications.rst:115 msgid "Unix (including Linux and macOS)" -msgstr "" +msgstr "யூனிக்ச் (லினக்ச் மற்றும் மேகோச் உட்பட)" #: ../source/discussions/deploying-python-applications.rst:118 #: ../source/key_projects.rst:576 msgid "pex" -msgstr "" +msgstr "பெக்ச்" #: ../source/discussions/deploying-python-applications.rst:120 msgid "" @@ -618,14 +758,18 @@ msgid "" "meaning that a single pex file can be portable across Linux and macOS. pex " "is released under the Apache License 2.0." msgstr "" +". PEX என்பது கோடிட்டுக் காட்டப்பட்டுள்ள கருத்துக்களின் விரிவாக்கமாகும்: PEP: `441` மற்றும் " +"பைதான் பயன்பாடுகளை சிபி போல எளிமையாக பயன்படுத்துகிறது. PEX கோப்புகளில் பல இயங்குதள-" +"குறிப்பிட்ட பைதான் விநியோகங்கள் கூட இருக்கலாம், அதாவது லினக்ச் மற்றும் மேகோச் முழுவதும் " +"ஒற்றை PEX கோப்பு சிறியதாக இருக்கும். PEX அப்பாச்சி உரிமம் 2.0 இன் கீழ் வெளியிடப்பட்டது." #: ../source/discussions/deploying-python-applications.rst:129 msgid "Configuration management" -msgstr "" +msgstr "உள்ளமைவு மேலாண்மை" #: ../source/discussions/distribution-package-vs-import-package.rst:5 msgid "Distribution package vs. import package" -msgstr "" +msgstr "விநியோக தொகுப்பு எதிராக இறக்குமதி தொகுப்பு" #: ../source/discussions/distribution-package-vs-import-package.rst:7 msgid "" @@ -634,10 +778,14 @@ msgid "" "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 "" +msgstr "விநியோக தொகுப்பு என்றால் என்ன?" #: ../source/discussions/distribution-package-vs-import-package.rst:15 msgid "" @@ -650,6 +798,14 @@ msgid "" "Alternatively, the term \"distribution package\" can be used to refer to a " "specific file that contains a certain version of a project." msgstr "" +"விநியோக தொகுப்பு என்பது நீங்கள் நிறுவக்கூடிய மென்பொருளின் ஒரு பகுதி. பெரும்பாலான " +"நேரங்களில், இது \"திட்டத்திற்கு\" ஒத்ததாகும். நீங்கள் `` பிஐபி நிறுவவும் pkg`` அல்லது " +"உங்கள் `` pyproject.toml`` இல் `` சார்புகள் = [\"pkg\"] `` `` pkg`` ஒரு விநியோக " +"தொகுப்பின் பெயர். பைதான் நூலகங்கள் மற்றும் கருவிகளை நிறுவுவதற்கான மிகவும் பரவலாக " +"அறியப்பட்ட மையப்படுத்தப்பட்ட மூலமான PYPI_ ஐ நீங்கள் தேடும்போது அல்லது உலாவும்போது, நீங்கள் " +"பார்ப்பது விநியோக தொகுப்புகளின் பட்டியல். மாற்றாக, ஒரு திட்டத்தின் ஒரு குறிப்பிட்ட " +"பதிப்பைக் கொண்ட ஒரு குறிப்பிட்ட கோப்பைக் குறிக்க \"விநியோக தொகுப்பு\" என்ற சொல் " +"பயன்படுத்தப்படலாம்." #: ../source/discussions/distribution-package-vs-import-package.rst:24 msgid "" @@ -658,10 +814,13 @@ msgid "" "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 "" +msgstr "இறக்குமதி தொகுப்பு என்றால் என்ன?" #: ../source/discussions/distribution-package-vs-import-package.rst:33 msgid "" @@ -673,16 +832,23 @@ msgid "" "is a directory on the file system, containing modules as ``.py`` files and " "subpackages as subdirectories." msgstr "" +"இறக்குமதி தொகுப்பு ஒரு பைதான் தொகுதி. ஆகவே, உங்கள் பைதான் குறியீட்டில் பி.கே.சி " +"இறக்குமதி ஃபன்சி` இலிருந்து `` இறக்குமதி pkg`` அல்லது `` எழுதும்போது, `` pkg`` " +"என்பது இறக்குமதி தொகுப்பின் பெயர். இன்னும் துல்லியமாக, இறக்குமதி தொகுப்புகள் சிறப்பு " +"பைதான் தொகுதிகள் ஆகும், அவை சப்மோடூல்களைக் கொண்டிருக்கலாம். எடுத்துக்காட்டாக, `` Numpy`` " +"தொகுப்பில் `` numpy.linalg`` மற்றும் `` numpy.fft`` போன்ற தொகுதிகள் உள்ளன. வழக்கமாக, " +"ஒரு இறக்குமதி தொகுப்பு என்பது கோப்பு முறைமையில் ஒரு கோப்பகமாகும், இதில் `` .பீ`` " +"கோப்புகள் மற்றும் துணை பேக்கேச்கள் துணை அடைப்புகளாக தொகுதிகள் உள்ளன." #: ../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 "" +msgstr "இறக்குமதி தொகுப்பை நீங்கள் வழங்கும் விநியோக தொகுப்பை நிறுவியவுடன் பயன்படுத்தலாம்." #: ../source/discussions/distribution-package-vs-import-package.rst:47 msgid "What are the links between distribution packages and import packages?" -msgstr "" +msgstr "விநியோக தொகுப்புகள் மற்றும் இறக்குமதி தொகுப்புகளுக்கு இடையிலான இணைப்புகள் என்ன?" #: ../source/discussions/distribution-package-vs-import-package.rst:49 msgid "" @@ -690,6 +856,9 @@ msgid "" "(or non-package module), with a matching name. For example, ``pip install " "numpy`` lets you ``import numpy``." msgstr "" +"பெரும்பாலான நேரங்களில், ஒரு விநியோக தொகுப்பு ஒரு ஒற்றை இறக்குமதி தொகுப்பை (அல்லது " +"பேக்கேச் அல்லாத தொகுதி), பொருந்தக்கூடிய பெயருடன் வழங்குகிறது. எடுத்துக்காட்டாக, `` " +"பிஐபி நிறுவுதல் எண் `` உங்களை `` இறக்குமதி numpy`` உங்களை அனுமதிக்கிறது." #: ../source/discussions/distribution-package-vs-import-package.rst:53 msgid "" @@ -699,6 +868,9 @@ msgid "" "blindly install the PyPI package ``foo`` if you see ``import foo``; this may " "install an unintended, and potentially even malicious package.)" msgstr "" +"இருப்பினும், இது ஒரு மாநாடு மட்டுமே. PYPI மற்றும் பிற தொகுப்பு குறியீடுகள் * விநியோக " +"தொகுப்பின் பெயர் மற்றும் அது வழங்கும் இறக்குமதி தொகுப்புகளுக்கு இடையில் எந்த உறவையும் " +"செயல்படுத்த வேண்டாம். ." #: ../source/discussions/distribution-package-vs-import-package.rst:59 msgid "" @@ -711,6 +883,14 @@ msgid "" "generally, a fork of an existing library is a common reason for differing " "names between the distribution package and the import package." msgstr "" +"ஒரு விநியோக தொகுப்பு வேறு பெயருடன் இறக்குமதி தொகுப்பை வழங்க முடியும். பட " +"செயலாக்கத்திற்கான பிரபலமான தலையணை_ நூலகம் இதற்கு ஒரு எடுத்துக்காட்டு. அதன் விநியோக " +"தொகுப்பு பெயர் `` தலையணை``, ஆனால் இது இறக்குமதி தொகுப்பை `` pil`` வழங்குகிறது. இது " +"வரலாற்று காரணங்களுக்காக: தலையணை PIL நூலகத்தின் ஒரு முட்கரண்டியாகத் தொடங்கியது, இதனால் " +"இது இறக்குமதி பெயரை `` pil`` உடன் வைத்திருந்தது, இதனால் தற்போதுள்ள PIL பயனர்கள் சிறிய " +"முயற்சியுடன் தலையணைக்கு மாற முடியும். மிகவும் பொதுவாக, தற்போதுள்ள நூலகத்தின் முட்கரண்டி " +"விநியோக தொகுப்பு மற்றும் இறக்குமதி தொகுப்புக்கு இடையில் மாறுபட்ட பெயர்களுக்கு ஒரு " +"பொதுவான காரணம்." #: ../source/discussions/distribution-package-vs-import-package.rst:69 msgid "" @@ -719,6 +899,10 @@ msgid "" "packages with the same name can be provided by several distribution " "packages. Again, forks are a common reason for this." msgstr "" +"கொடுக்கப்பட்ட தொகுப்பு குறியீட்டில் (PYPI போன்றது), விநியோக தொகுப்பு பெயர்கள் " +"தனித்துவமாக இருக்க வேண்டும். மறுபுறம், இறக்குமதி தொகுப்புகளுக்கு அத்தகைய தேவை இல்லை. " +"அதே பெயருடன் இறக்குமதி தொகுப்புகளை பல விநியோக தொகுப்புகள் வழங்கலாம். மீண்டும், ஃபோர்க்ச் " +"இதற்கு ஒரு பொதுவான காரணம்." #: ../source/discussions/distribution-package-vs-import-package.rst:74 msgid "" @@ -727,10 +911,15 @@ msgid "" "which provides both an ``attrs`` import package with a newer API, and an " "``attr`` import package with an older but supported API." msgstr "" +"மாறாக, ஒரு விநியோக தொகுப்பு பல இறக்குமதி தொகுப்புகளை வழங்க முடியும், இருப்பினும் " +"இது குறைவாகவே காணப்படுகிறது. ஒரு எடுத்துக்காட்டு ATTRS_ விநியோக தொகுப்பு, இது ஒரு " +"புதிய பநிஇ உடன் `` attrs`` இறக்குமதி தொகுப்பு இரண்டையும் வழங்குகிறது, மேலும் பழைய " +"ஆனால் ஆதரிக்கப்பட்ட பநிஇ உடன் `` attr`` இறக்குமதி தொகுப்பு." #: ../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 "" @@ -739,6 +928,11 @@ msgid "" "[#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 "" @@ -750,6 +944,12 @@ msgid "" "``pip install awesome-package`` (the precise rules are given in the :ref:" "`name normalization specification `)." msgstr "" +"மறுபுறம், விநியோக தொகுப்புகள் ஐபன்களைப் பயன்படுத்தலாம் `` -`` அல்லது `` _`` ஐ " +"அடிக்கோடிட்டுக் காட்டலாம். அவை `` .`` புள்ளிகளையும் கொண்டிருக்கலாம், இது சில நேரங்களில் " +"ஒரு துணைப் பேக்கேசை பேக்கேசிங் செய்யப் பயன்படுகிறது: ref: `பெயர்வெளி தொகுப்பு " +"<பேக்கேசிங்-பெயர்ச்பேச்-பேக்கேச்கள்>`. பெரும்பாலான நோக்கங்களுக்காக, அவை வழக்குக்கு " +"உணர்ச்சியற்றவை மற்றும் `` -` எதிராக `` _`` வேறுபாடுகள், எ.கா. விதிகள் " +"கொடுக்கப்பட்டுள்ளன: ref: `பெயர் இயல்பாக்கம் விவரக்குறிப்பு <பெயர்-இயல்பாக்கம்>`)." #: ../source/discussions/distribution-package-vs-import-package.rst:101 msgid "" @@ -757,6 +957,709 @@ msgid "" "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 +#, fuzzy +#| msgid "Operating system packages" +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 +#, fuzzy +#| msgid "Python source distributions" +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 "" @@ -764,10 +1667,13 @@ msgid "" "specific topic. If you're just trying to get stuff done, see :doc:`/guides/" "index`." msgstr "" +"** கலந்துரையாடல்கள் ** ஒரு குறிப்பிட்ட தலைப்பைப் பற்றிய விரிவான தகவல்களை வழங்குவதில் " +"கவனம் செலுத்துகின்றன. நீங்கள் விசயங்களைச் செய்ய முயற்சிக்கிறீர்கள் என்றால், காண்க: DOC: `/" +"வழிகாட்டிகள்/குறியீட்டு`." #: ../source/discussions/install-requires-vs-requirements.rst:5 msgid "install_requires vs requirements files" -msgstr "" +msgstr "Install_requires vs தேவைகள் கோப்புகள்" #: ../source/discussions/install-requires-vs-requirements.rst:9 msgid "install_requires" @@ -780,23 +1686,32 @@ msgid "" "correctly. When the project is installed by :ref:`pip`, this is the " "specification that is used to install its dependencies." msgstr "" +"`` install_requires`` என்பது ஒரு: ref: `setuptools`: கோப்பு:` setup.py` முக்கிய " +"சொல் ஒரு திட்டம் ** குறைந்தபட்சமாக ** சரியாக இயங்க வேண்டும் என்பதைக் குறிப்பிட பயன்படுத்த " +"வேண்டும். திட்டத்தை நிறுவும் போது: ref: `பிப்`, இது அதன் சார்புகளை நிறுவ பயன்படும் " +"விவரக்குறிப்பு." #: ../source/discussions/install-requires-vs-requirements.rst:16 msgid "" "For example, if the project requires A and B, your ``install_requires`` " "would be like so:" msgstr "" +"எடுத்துக்காட்டாக, திட்டத்திற்கு A மற்றும் B தேவைப்பட்டால், உங்கள் `` install_requires`` " +"அவ்வாறு இருக்கும்:" #: ../source/discussions/install-requires-vs-requirements.rst:26 msgid "" "Additionally, it's best practice to indicate any known lower or upper bounds." msgstr "" +"கூடுதலாக, அறியப்பட்ட குறைந்த அல்லது மேல் எல்லைகளைக் குறிப்பது சிறந்த நடைமுறையாகும்." #: ../source/discussions/install-requires-vs-requirements.rst:28 msgid "" "For example, it may be known, that your project requires at least v1 of 'A', " "and v2 of 'B', so it would be like so:" msgstr "" +"எடுத்துக்காட்டாக, உங்கள் திட்டத்திற்கு குறைந்தது 'A' இன் V1 மற்றும் 'B' இன் V2 " +"தேவைப்படுகிறது, எனவே இது அப்படியே இருக்கும்:" #: ../source/discussions/install-requires-vs-requirements.rst:38 msgid "" @@ -804,6 +1719,9 @@ msgid "" "breaks the compatibility of your project with v2 of 'A' and later, so it " "makes sense to not allow v2:" msgstr "" +"'A' திட்டம் அதன் V2 இல் ஒரு மாற்றத்தை அறிமுகப்படுத்தியது, இது உங்கள் திட்டத்தின் " +"பொருந்தக்கூடிய தன்மையை 'A' இன் V2 மற்றும் அதற்குப் பிறகு உடைக்கிறது, எனவே V2 ஐ " +"அனுமதிக்காதது அர்த்தமுள்ளதாக இருக்கும்:" #: ../source/discussions/install-requires-vs-requirements.rst:49 msgid "" @@ -812,6 +1730,10 @@ msgid "" "dependencies of your dependencies). This is overly-restrictive, and " "prevents the user from gaining the benefit of dependency upgrades." msgstr "" +"குறிப்பிட்ட பதிப்புகளுக்கு சார்புகளை பின் செய்ய `` install_requires`` ஐப் " +"பயன்படுத்துவது அல்லது துணை சார்புநிலைகளைக் குறிப்பிடுவது சிறந்த நடைமுறையாக " +"கருதப்படவில்லை (அதாவது உங்கள் சார்புகளின் சார்புநிலைகள்). இது அதிகப்படியான " +"கட்டுப்பாடானது, மேலும் பயனர்கள் சார்பு மேம்பாடுகளின் நன்மையைப் பெறுவதைத் தடுக்கிறது." #: ../source/discussions/install-requires-vs-requirements.rst:54 msgid "" @@ -822,17 +1744,25 @@ msgid "" "\"Concrete\") is to be determined at install time using :ref:`pip` options. " "[1]_" msgstr "" +"கடைசியாக, `` Install_requires`` என்பது \"சுருக்கம்\" தேவைகளின் பட்டியல் என்பதை " +"புரிந்து கொள்ள வேண்டியது தேவை, அதாவது பெயர்கள் மற்றும் பதிப்பு கட்டுப்பாடுகள் " +"சார்புநிலைகள் எங்கிருந்து நிறைவு செய்யப்படும் என்பதை தீர்மானிக்காத (அதாவது எந்த குறியீட்டு " +"அல்லது மூலத்திலிருந்து). எங்கே (அதாவது அவை எவ்வாறு \"கான்கிரீட்\" செய்யப்பட வேண்டும்) " +"நிறுவும் நேரத்தில் தீர்மானிக்கப்பட வேண்டும்: குறிப்பு: `பிப்` விருப்பங்கள். [1] _" #: ../source/discussions/install-requires-vs-requirements.rst:62 #: ../source/tutorials/installing-packages.rst:464 msgid "Requirements files" -msgstr "" +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 "" +":ref:`Requirements கோப்புகள் ` described பெரும்பாலானவை " +"simply, அரே just a பட்டியல் of :ref:`pip:pip install` arguments placed into a " +"file." #: ../source/discussions/install-requires-vs-requirements.rst:67 msgid "" @@ -840,6 +1770,9 @@ msgid "" "ref:`Requirements Files ` are often used to define " "the requirements for a complete Python environment." msgstr "" +"அதேசமயம் `` Install_requires`` ஒரு திட்டத்திற்கான சார்புகளை வரையறுக்கிறது,: ref: " +"`தேவைகள் கோப்புகள் ` ஒரு முழுமையான பைதான் சூழலுக்கான தேவைகளை " +"வரையறுக்க பெரும்பாலும் பயன்படுத்தப்படுகின்றன." #: ../source/discussions/install-requires-vs-requirements.rst:71 msgid "" @@ -848,6 +1781,10 @@ msgid "" "achieving :ref:`repeatable installations ` of a complete " "environment." msgstr "" +"`` Install_requires`` தேவைகள் மிகக் குறைவு, தேவைகள் கோப்புகள் பெரும்பாலும் " +"அடைவதற்கான நோக்கத்திற்காக பின் செய்யப்பட்ட பதிப்புகளின் முழுமையான பட்டியலைக் " +"கொண்டிருக்கின்றன: குறிப்பு: `மீண்டும் மீண்டும் செய்யக்கூடிய நிறுவல்கள் ` ஒரு முழுமையான சூழலின்." #: ../source/discussions/install-requires-vs-requirements.rst:76 msgid "" @@ -857,6 +1794,10 @@ msgid "" "\"Concrete\", i.e. associated with a particular index or directory of " "packages. [1]_" msgstr "" +"`` Install_requires`` தேவைகள் \"சுருக்கம்\", அதாவது எந்தவொரு குறிப்பிட்ட " +"குறியீட்டுடனும் தொடர்புடையவை அல்ல, தேவைகள் கோப்புகளில் பெரும்பாலும் தேவைகள் `` --index-" +"URL`` அல்லது ``-FIND-LINKS`` போன்ற பிஐபி விருப்பங்கள் உள்ளன கான்கிரீட் \", அதாவது " +"தொகுப்புகளின் ஒரு குறிப்பிட்ட குறியீட்டு அல்லது கோப்பகத்துடன் தொடர்புடையது. [1] _" #: ../source/discussions/install-requires-vs-requirements.rst:82 msgid "" @@ -864,22 +1805,29 @@ msgid "" "during an install, requirements files are not, and only are used when a user " "specifically installs them using ``python -m pip install -r``." msgstr "" +"அதேசமயம் `` Install_requires`` ஒரு நிறுவலின் போது PIP ஆல் தானாகவே பகுப்பாய்வு " +"செய்யப்படுகிறது, தேவைகள் கோப்புகள் இல்லை, மேலும் ஒரு பயனர் குறிப்பாக `` பைதான் -எம் " +"பிஐபி நிறுவல் -r`` ஐப் பயன்படுத்தி அவற்றை நிறுவும்போது மட்டுமே பயன்படுத்தப்படுகிறது." #: ../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 "" +"\"சுருக்கம்\" Vs \"கான்கிரீட்\" தேவைகள் பற்றி மேலும் அறிய, https://caremad.io/" +"posts/2013/07/setup-vs-requirement/ ஐப் பார்க்கவும்." #: ../source/discussions/package-formats.rst:5 msgid "Package Formats" -msgstr "" +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 "" @@ -892,10 +1840,18 @@ msgid "" "publishing a package on PyPI (or elsewhere), you should always upload both " "an sdist and one or more wheel." msgstr "" +"PYPI_: ** மூல விநியோகங்கள் **, அல்லது ** Sdists ** போன்ற தொகுப்பு குறியீடுகளில் " +"இரண்டு வடிவங்களில் கோப்புகளை நீங்கள் காண்பீர்கள், மற்றும் ** பைனரி விநியோகங்கள் **, பொதுவாக " +"** சக்கரங்கள் ** என்று அழைக்கப்படுகின்றன. எடுத்துக்காட்டாக, பிஐபி 23.3.1 " +"`_ க்கான` பைபி பக்கம் இரண்டு கோப்புகளை பதிவிறக்கம் செய்ய அனுமதிக்கிறது, `` பிஐபி " +"-23.3.1.tar.gz`` மற்றும் `` PIP-23.3.1-NONE -any.whl``. முந்தையது ஒரு SDIST, " +"பிந்தையது ஒரு சக்கரம். கீழே விளக்கப்பட்டுள்ளபடி, இவை வெவ்வேறு நோக்கங்களுக்கு உதவுகின்றன. " +"பைபியில் (அல்லது வேறு இடங்களில்) ஒரு தொகுப்பை வெளியிடும்போது, நீங்கள் எப்போதும் ஒரு " +"SDIST மற்றும் ஒன்று அல்லது அதற்கு மேற்பட்ட சக்கரம் இரண்டையும் பதிவேற்ற வேண்டும்." #: ../source/discussions/package-formats.rst:21 msgid "What is a source distribution?" -msgstr "" +msgstr "மூல வழங்கல் என்றால் என்ன?" #: ../source/discussions/package-formats.rst:23 msgid "" @@ -907,6 +1863,13 @@ msgid "" "INFO`` file follows the format specified in :ref:`core-metadata` and is not " "intended to be written by hand [#core-metadata-format]_." msgstr "" +"கருத்தியல் ரீதியாக, ஒரு மூல வழங்கல் என்பது மூல வடிவத்தில் உள்ள மூலக் குறியீட்டின் " +"காப்பகமாகும். இணக்கமாக, ஒரு SDIST என்பது மூலக் குறியீட்டைக் கொண்ட `` .tar.gz`` " +"காப்பகமாகும், மேலும் திட்ட மெட்டாடேட்டாவை வைத்திருக்கும் `` pkg-info`` எனப்படும் கூடுதல் " +"சிறப்புக் கோப்பு. இந்த கோப்பின் இருப்பு மெட்டாடேட்டாவைக் கணக்கிடத் தேவையில்லை என்பதன் மூலம் " +"பேக்கேசிங் கருவிகளை மிகவும் திறமையாக இருக்க உதவுகிறது. `` பி.கே.சி-இன்ஃபோ`` கோப்பு " +"குறிப்பிடப்பட்ட வடிவமைப்பைப் பின்பற்றுகிறது: குறிப்பு: `கோர்-மெட்டாடேட்டா` மற்றும் கையால் " +"எழுதப்பட விரும்பவில்லை [#கோர்-மெட்டாடேட்டா-வடிவ] _." #: ../source/discussions/package-formats.rst:31 msgid "" @@ -915,6 +1878,10 @@ msgid "" "(like Linux and macOS), or :ref:`the command line interface of Python's " "tarfile module ` on any platform." msgstr "" +"யுனிக்ச் இயங்குதளங்களில் (லினக்ச் மற்றும் மேகோச் போன்றவை) `` கரிக்கீல் -xvf`` போன்ற தார் " +"காப்பகங்களுடன் பணிபுரிய நிலையான கருவிகளைப் பயன்படுத்தி ஒரு SDIST இன் உள்ளடக்கங்களை " +"நீங்கள் ஆய்வு செய்யலாம், OR: ref: `இன் கட்டளை வரி இடைமுகம் பைத்தானின் டார்ஃபைல் தொகுதி " +"<பைதான்: டார்ஃபைல்-கமாண்ட்லைன்> `எந்த தளத்திலும்." #: ../source/discussions/package-formats.rst:36 msgid "" @@ -926,28 +1893,41 @@ msgid "" "Homebrew and MacPorts on macOS, ...), who, for various reasons, may prefer " "them over, e.g., pulling from a Git repository." msgstr "" +"SDISTS பேக்கேசிங் சுற்றுச்சூழல் அமைப்பில் பல நோக்கங்களுக்காக பணி செய்கிறது. எப்போது: " +"ref: `பிப்`, நிலையான பைதான் தொகுப்பு நிறுவி, நிறுவ ஒரு சக்கரத்தைக் கண்டுபிடிக்க " +"முடியவில்லை, அது ஒரு மூல விநியோகத்தைப் பதிவிறக்குவது, அதிலிருந்து ஒரு சக்கரத்தை " +"தொகுத்தல் மற்றும் சக்கரத்தை நிறுவுதல் ஆகியவற்றில் மீண்டும் விழும். மேலும், SDISTS " +"பெரும்பாலும் கீழ்நிலை பேக்கேசர்களால் (லினக்ச் விநியோகங்கள், கான்டா, ஓம் ப்ரூ மற்றும் மேக்போர்ட் " +"போன்றவை, ...) தொகுப்பு மூலமாகப் பயன்படுத்தப்படுகின்றன, பல்வேறு காரணங்களுக்காக, அவற்றை " +"விரும்பலாம், எ.கா., ஒரு அறிவிலி களஞ்சியத்திலிருந்து இழுக்கலாம் ." #: ../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 "" +"ஒரு மூல வழங்கல் அதன் கோப்பு பெயரால் அங்கீகரிக்கப்பட்டுள்ளது, அதில் படிவம் உள்ளது: SAMP: " +"`{package_name}-{version} .tar.gz`, எ.கா." #: ../source/discussions/package-formats.rst:50 msgid "" "If you want technical details on the sdist format, read the :ref:`sdist " "specification `." msgstr "" +"SDIST வடிவத்தில் தொழில்நுட்ப விவரங்களை நீங்கள் விரும்பினால், அதைப் படியுங்கள்: Ref: " +"`SDIST விவரக்குறிப்பு <மூல-விநியோக வடிவங்கள்>`." #: ../source/discussions/package-formats.rst:55 msgid "What is a wheel?" -msgstr "" +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 "" @@ -958,6 +1938,12 @@ msgid "" "files) but compiled, executable code (like ``.so`` files on Linux or DLLs on " "Windows)." msgstr "" +"தொகுப்புகளுக்கான SDISTS மற்றும் சக்கரங்களுக்கு இடையே ஒரு பெரிய வேறுபாடு உள்ளது: கால: " +"`நீட்டிப்பு தொகுதிகள் <நீட்டிப்பு தொகுதி>`, சி, சி ++ மற்றும் ரச்ட் போன்ற தொகுக்கப்பட்ட " +"மொழிகளில் எழுதப்பட்டவை, அவை இயங்குதள சார்ந்த இயந்திரக் குறியீட்டில் தொகுக்கப்பட வேண்டும். " +"இந்த தொகுப்புகள் மூலம், சக்கரங்களில் மூலக் குறியீடு இல்லை (சி மூல கோப்புகள் போன்றவை) ஆனால் " +"தொகுக்கப்பட்ட, இயங்கக்கூடிய குறியீடு (`` .SO`` லினக்சில் கோப்புகள் அல்லது சாளரங்களில் டி." +"எல்.எல்)." #: ../source/discussions/package-formats.rst:66 msgid "" @@ -968,6 +1954,12 @@ msgid "" "Python interpreter (unless the :ref:`Python stable ABI ` " "is used)." msgstr "" +"மேலும், ஒரு திட்டத்தின் பதிப்பிற்கு ஒரே ஒரு SDIST மட்டுமே இருக்கும்போது, பல சக்கரங்கள் " +"இருக்கலாம். மீண்டும், நீட்டிப்பு தொகுதிகளின் சூழலில் இது மிகவும் பொருத்தமானது. ஒரு " +"நீட்டிப்பு தொகுதியின் தொகுக்கப்பட்ட குறியீடு ஒரு இயக்க முறைமை மற்றும் செயலி கட்டமைப்புடன் " +"பிணைக்கப்பட்டுள்ளது, மேலும் பெரும்பாலும் பைதான் மொழிபெயர்ப்பாளரின் பதிப்பிலும் " +"பிணைக்கப்பட்டுள்ளது (இல்லையென்றால்: குறிப்பு: `பைதான் நிலையான அபி ` பயன்படுத்தப்படுகிறது)." #: ../source/discussions/package-formats.rst:72 msgid "" @@ -976,6 +1968,10 @@ msgid "" "versions. Python is an interpreted language, which does not need ahead-of-" "time compilation, so wheels contain ``.py`` files just like sdists." msgstr "" +"தூய-பைதான் தொகுப்புகளுக்கு, Sdists மற்றும் சக்கரங்களுக்கு இடையிலான வேறுபாடு குறைவாகக் " +"குறிக்கப்பட்டுள்ளது. எல்லா தளங்களுக்கும் பைதான் பதிப்புகளுக்கும் பொதுவாக ஒரு ஒற்றை சக்கரம் " +"உள்ளது. பைதான் என்பது ஒரு விளக்கமளிக்கப்பட்ட மொழியாகும், இது நேரத்திற்கு முன்னதாகத் " +"தேவையில்லை, எனவே சக்கரங்களில் sdists போலவே `` .py`` கோப்புகள் உள்ளன." #: ../source/discussions/package-formats.rst:77 msgid "" @@ -985,6 +1981,11 @@ msgid "" "Python version instead of one single wheel. Instead, installers like :ref:" "`pip` generate them while installing the package." msgstr "" +"`` .பிசி`` பைட்கோட் கோப்புகளைப் பற்றி நீங்கள் யோசிக்கிறீர்கள் என்றால்: அவை சக்கரங்களில் " +"சேர்க்கப்படவில்லை, ஏனெனில் அவை உருவாக்க மலிவானவை, மேலும் அவை உட்பட ஒரு ஒற்றை ஒற்றை " +"பதிப்பிற்கு பதிலாக ஒரு சக்கரத்தை விநியோகிக்க ஏராளமான தொகுப்புகளை தேவையற்ற முறையில் " +"கட்டாயப்படுத்தும் சக்கரம். அதற்கு பதிலாக, நிறுவிகள்: ref: `PIP` தொகுப்பை நிறுவும் போது " +"அவற்றை உருவாக்கவும்." #: ../source/discussions/package-formats.rst:83 msgid "" @@ -997,6 +1998,14 @@ msgid "" "along with a hash of their content, as a safety check of the download's " "integrity." msgstr "" +"இவ்வாறு கூறப்படுவதால், தூய பைதான் திட்டங்களுக்கு கூட, SDISTS மற்றும் சக்கரங்களுக்கு " +"இடையில் இன்னும் முக்கியமான வேறுபாடுகள் உள்ளன. சக்கரங்கள் நிறுவப்பட வேண்டியவற்றைக் " +"கொண்டிருக்க வேண்டும், அதற்கு மேல் எதுவும் இல்லை. குறிப்பாக, சக்கரங்கள் ஒருபோதும் சோதனைகள் " +"மற்றும் ஆவணங்களை சேர்க்கக்கூடாது, அதே நேரத்தில் Sdists பொதுவாக செய்கின்றன. மேலும், சக்கர " +"வடிவம் SDIST ஐ விட மிகவும் சிக்கலானது. எடுத்துக்காட்டாக, இது ஒரு சிறப்புக் கோப்பை " +"உள்ளடக்கியது - `` பதிவு`` - இது சக்கரத்தில் உள்ள அனைத்து கோப்புகளையும் அவற்றின் " +"உள்ளடக்கத்தின் ஆசுடன் பட்டியலிடுகிறது, இது பதிவிறக்கத்தின் ஒருமைப்பாட்டின் பாதுகாப்பு " +"சோதனையாக." #: ../source/discussions/package-formats.rst:91 msgid "" @@ -1011,6 +2020,17 @@ msgid "" "for your users, since a wheel is directly installable. By only including " "files that must be installed, wheels also make for smaller downloads." msgstr "" +"ஒரு பார்வையில், \"வெற்று மற்றும் அடிப்படை\" தூய பைதான் திட்டங்களுக்கு சக்கரங்கள் உண்மையில் " +"தேவையா என்று நீங்கள் ஆச்சரியப்படலாம். SDIST களின் நெகிழ்வுத்தன்மை காரணமாக, PIP போன்ற " +"நிறுவிகள் SDISTS இலிருந்து நேரடியாக நிறுவ முடியாது என்பதை நினைவில் கொள்ளுங்கள் - " +"அவை முதலில் ஒரு சக்கரத்தை உருவாக்க வேண்டும், இதைச் செயல்படுத்துவதன் மூலம்: கால: " +"`பின்தளத்தில் உருவாக்குங்கள்` SDIST குறிப்பிடுகிறது (கட்டர் பின்தளத்தில் அனைத்தையும் " +"செய்யலாம் சி நீட்டிப்புகளை தொகுத்தல் போன்ற சக்கரத்தை உருவாக்கும் போது மாற்றங்கள்). இந்த " +"காரணத்திற்காக, தூய பைதான் திட்டத்திற்கு கூட, நீங்கள் எப்போதும் * ஒரு SDIST மற்றும் PYPI " +"அல்லது பிற தொகுப்பு குறியீடுகளுக்கு ஒரு சக்கரம் இரண்டையும் பதிவேற்ற வேண்டும். ஒரு சக்கரம் " +"நேரடியாக நிறுவக்கூடியதாக இருப்பதால், இது உங்கள் பயனர்களுக்கு நிறுவலை மிக வேகமாக " +"செய்கிறது. நிறுவப்பட வேண்டிய கோப்புகளை மட்டுமே சேர்ப்பதன் மூலம், சக்கரங்கள் சிறிய " +"பதிவிறக்கங்களையும் உருவாக்குகின்றன." #: ../source/discussions/package-formats.rst:102 msgid "" @@ -1021,6 +2041,11 @@ msgid "" "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 "" +"தொழில்நுட்ப மட்டத்தில், ஒரு சக்கரம் ஒரு சிப் காப்பகம் (தார் காப்பகங்கள் SDISTS போலல்லாமல்). " +"லினக்ச் மற்றும் மேகோச் போன்ற யூனிக்ச் இயங்குதளங்களில் `` அன்சிப்`` ஐப் பயன்படுத்தி, எ.கா. " +"பைத்தானின் சிப்ஃபைல் தொகுதியின் இடைமுகம் <பைதான்: சிப்ஃபைல்-கமாண்ட்லைன்> `. சக்கரம் " +"உங்களுக்குத் தேவையான அனைத்து கோப்புகளையும் உள்ளடக்கியுள்ளதா என்பதைச் சரிபார்க்க இது " +"மிகவும் பயனுள்ளதாக இருக்கும்." #: ../source/discussions/package-formats.rst:109 msgid "" @@ -1030,6 +2055,11 @@ msgid "" "equivalent of ``PKG-INFO`` in sdists, as well as ``RECORD``. This can be " "useful to ensure no files are missing from your wheels." msgstr "" +"ஒரு சக்கரத்தின் உள்ளே, நீங்கள் தொகுப்பின் கோப்புகளையும், கூடுதல் கோப்பகத்தையும் காணலாம்: " +"SAMP: `{package_name}-{version} .dist-info`. இந்த கோப்பகத்தில் `` மெட்டாடேட்டா`` " +"கோப்பு உள்ளிட்ட பல்வேறு கோப்புகள் உள்ளன, இது Sdists இல் `` pkg-info`` க்கு " +"சமமானதாகும், அத்துடன் `` பதிவு``. உங்கள் சக்கரங்களில் இருந்து கோப்புகள் எதுவும் இல்லை " +"என்பதை உறுதிப்படுத்த இது பயனுள்ளதாக இருக்கும்." #: ../source/discussions/package-formats.rst:115 msgid "" @@ -1039,6 +2069,11 @@ msgid "" "the wheel is compatible with. For example, the name ``pip-23.3.1-py3-none-" "any.whl`` means that:" msgstr "" +"ஒரு சக்கரத்தின் கோப்பு பெயர் (அரிதாகவே பயன்படுத்தப்படும் சில அம்சங்களை புறக்கணித்து) " +"இதுபோன்று தெரிகிறது :: SAMP: `{package_name}-{version}-{python_tag}-{abi_tag}-" +"{platform_tag} .whl`. இந்த பெயரிடும் மாநாடு எந்த தளங்கள் மற்றும் பைதான் பதிப்புகள் " +"சக்கரம் இணக்கமானது என்பதை அடையாளம் காட்டுகிறது. எடுத்துக்காட்டாக, `` பிஐபி -23.3.1-பய் " +"3-none-yn.whl`` என்ற பெயர் இதன் பொருள்:" #: ../source/discussions/package-formats.rst:121 msgid "" @@ -1046,30 +2081,37 @@ msgid "" "whether CPython, the most widely used Python implementation, or an " "alternative implementation like PyPy_;" msgstr "" +"(``py3``) This wheel can be installed on any implementation of பைதான் 3, " +"whether CPython, the பெரும்பாலானவை widely used பைதான் implementation, or an " +"alternative implementation like PyPy_;" #: ../source/discussions/package-formats.rst:124 msgid "(``none``) It does not depend on the Python version;" -msgstr "" +msgstr "(`` எதுவுமில்லை``) இது பைதான் பதிப்பைப் பொறுத்தது அல்ல;" #: ../source/discussions/package-formats.rst:125 msgid "(``any``) It does not depend on the platform." -msgstr "" +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 "" +"தூய பைதான் திட்டங்களுக்கு `` py3-none-any-`` முறை பொதுவானது. நீட்டிப்பு தொகுதிகள் " +"கொண்ட தொகுப்புகள் பொதுவாக பல சக்கரங்களை மிகவும் சிக்கலான குறிச்சொற்களுடன் அனுப்புகின்றன." #: ../source/discussions/package-formats.rst:130 msgid "" "All technical details on the wheel format can be found in the :ref:`wheel " "specification `." msgstr "" +"சக்கர வடிவத்தில் உள்ள அனைத்து தொழில்நுட்ப விவரங்களையும் இதில் காணலாம்: ref: `சக்கர " +"விவரக்குறிப்பு <பைனரி-டிச்ட்ரிபியூசன்-ஃபார்மாட்>`." #: ../source/discussions/package-formats.rst:138 msgid "What about eggs?" -msgstr "" +msgstr "முட்டைகள் பற்றி என்ன?" #: ../source/discussions/package-formats.rst:140 msgid "" @@ -1077,22 +2119,29 @@ msgid "" "format. It should not be used anymore. Since August 2023, PyPI `rejects egg " "uploads `_." msgstr "" +"\"முட்டை\" என்பது ஒரு பழைய தொகுப்பு வடிவமாகும், இது சக்கர வடிவத்துடன் " +"மாற்றப்பட்டுள்ளது. இதை இனி பயன்படுத்தக்கூடாது. ஆகச்ட் 2023 முதல், பைபி `முட்டை " +"பதிவேற்றங்களை நிராகரிக்கிறது <பைபி-எக்ச்-டி.இ.பி." #: ../source/discussions/package-formats.rst:144 msgid "Here's a breakdown of the important differences between wheel and egg." -msgstr "" +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 "" +"முட்டையின் வடிவம் அறிமுகப்படுத்தப்பட்டது: ref: `setuptools` 2004 இல், சக்கர வடிவம் " +"அறிமுகப்படுத்தப்பட்டது: PEP:` 427` 2012 இல்." #: ../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 "" @@ -1101,6 +2150,7 @@ msgid "" "and a runtime installation format (if left zipped), and was designed to be " "importable." msgstr "" +"சக்கரம் ஒரு: கால: `விநியோக <விநியோக தொகுப்பு>` வடிவம், அதாவது பேக்கேசிங் வடிவம். ." #: ../source/discussions/package-formats.rst:156 msgid "" @@ -1110,12 +2160,17 @@ msgid "" "\"universal\", similar to an :term:`sdist `." msgstr "" +"சக்கர காப்பகங்களில் `` .பிசி`` கோப்புகள் இல்லை. ஆகையால், விநியோகத்தில் பைதான் கோப்புகள் " +"மட்டுமே இருக்கும்போது (அதாவது தொகுக்கப்பட்ட நீட்டிப்புகள் இல்லை), மற்றும் பைத்தான் 2 மற்றும் " +"3 உடன் இணக்கமானது sdist \")>`." #: ../source/discussions/package-formats.rst:161 msgid "" "Wheel uses standard :ref:`.dist-info directories `. Egg used ``.egg-info``." msgstr "" +"வீல் தரநிலையைப் பயன்படுத்துகிறது: ref: `.டிச்ட்-இன்ஃபோ கோப்பகங்கள் <பதிவு-நிறுவப்பட்ட-" +"பேக்கேச்கள்>`. முட்டை `` .egg-info``." #: ../source/discussions/package-formats.rst:164 msgid "" @@ -1123,12 +2178,17 @@ msgid "" "single wheel archive can indicate its compatibility with a number of Python " "language versions and implementations, ABIs, and system architectures." msgstr "" +"சக்கரத்தில் ஒரு: குறிப்பு உள்ளது: `பணக்கார கோப்பு பெயரிடும் மாநாடு <சக்கர-கோப்பு-பெயர்-" +"ச்பெக்>`. ஒரு ஒற்றை சக்கர காப்பகம் பல பைதான் மொழி பதிப்புகள் மற்றும் செயலாக்கங்கள், ABIS " +"மற்றும் கணினி கட்டமைப்புகளுடன் அதன் பொருந்தக்கூடிய தன்மையைக் குறிக்கலாம்." #: ../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 "" @@ -1136,6 +2196,9 @@ msgid "" "org/2/library/sysconfig.html#installation-paths>`_, therefore making it " "easier to convert to other formats." msgstr "" +"வீல் `சிச்கான்ஃபிக் பாதை வகை _ _ ஆல் உள்நாட்டில் ஒழுங்கமைக்கப்பட்டுள்ளது, எனவே மற்ற " +"வடிவங்களுக்கு மாற்றுவதை எளிதாக்குகிறது." #: ../source/discussions/package-formats.rst:177 msgid "" @@ -1146,6 +2209,12 @@ msgid "" "backend, typically ``[project]`` in ``pyproject.toml``, and translated by " "the build backend into ``PKG-INFO``." msgstr "" +"இந்த வடிவம் மின்னஞ்சல் அடிப்படையிலானது. இது இன்று தேர்வு செய்யப்பட வாய்ப்பில்லை என்றாலும், " +"பின்னோக்கி பொருந்தக்கூடிய பரிசீலனைகள் நியமன வடிவமாக வைக்கப்படுவதற்கு வழிவகுக்கிறது. " +"பயனர் பார்வையில், இது பெரும்பாலும் கண்ணுக்கு தெரியாதது, ஏனெனில் மேனிலை தரவு பயனரால் " +"கட்டிய பின்தளத்தில் புரிந்து கொள்ளப்பட்ட விதத்தில் குறிப்பிடப்படுகிறது, பொதுவாக `` " +"[திட்டம்] `` `pyproject.toml`` இல், மற்றும் மொழிபெயர்க்கப்பட்டுள்ளது பின்தளத்தில் `` pkg-" +"info`` இல் உருவாக்குங்கள்." #: ../source/discussions/package-formats.rst:184 msgid "" @@ -1153,10 +2222,13 @@ msgid "" "format, although :ref:`this is not officially supported at this time `." msgstr "" +"சூழ்நிலை ரீதியாக, சில சந்தர்ப்பங்களில், சக்கரங்களை இறக்குமதி செய்யக்கூடிய இயக்க நேர " +"வடிவமாகப் பயன்படுத்தலாம், இருப்பினும்: ref: `இது அதிகாரப்பூர்வமாக இந்த நேரத்தில் " +"ஆதரிக்கப்படவில்லை <பைனரி-விநியோகத்தை உருவாக்கும்-இறக்குமதி-சக்கர>`." #: ../source/discussions/pip-vs-easy-install.rst:6 msgid "pip vs easy_install" -msgstr "" +msgstr "PIP vs Ease_install" #: ../source/discussions/pip-vs-easy-install.rst:9 msgid "" @@ -1166,6 +2238,9 @@ msgid "" "Index (PyPI)>` using requirement specifiers, and automatically installing " "dependencies." msgstr "" +". நிறுவும் நேரத்தில் இது குறிப்பிடத்தக்கதாக இருந்தது: கால: `தொகுப்புகள் <விநியோக " +"தொகுப்பு>` இருந்து: கால: `பைபி <பைதான் தொகுப்பு குறியீட்டு (PYPI)>` தேவை " +"குறிப்பான்களைப் பயன்படுத்துதல் மற்றும் தானாகவே சார்புகளை நிறுவுதல்." #: ../source/discussions/pip-vs-easy-install.rst:14 msgid "" @@ -1177,12 +2252,19 @@ msgid "" "introducing the idea of :ref:`Requirements Files `, " "which gave users the power to easily replicate environments." msgstr "" +". தொகுப்புகளை நிறுவாத நேரத்தில் இது குறிப்பிடத்தக்கதாக இருந்தது: கால: `முட்டை " +"<முட்டை>` அல்லது இருந்து: கால: `முட்டை <முட்டை>` (ஆனால் வெறுமனே 'தட்டையான' " +"தொகுப்புகளிலிருந்து: கால: `Sdists `), மற்றும் " +"யோசனையை அறிமுகப்படுத்துதல்: குறிப்பு:` தேவைகள் கோப்புகள் `, " +"இது பயனர்களுக்கு சூழல்களை எளிதில் நகலெடுக்க சக்தியைக் கொடுத்தது." #: ../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**" @@ -1194,7 +2276,7 @@ msgstr "" #: ../source/discussions/pip-vs-easy-install.rst:27 msgid "Installs from :term:`Wheels `" -msgstr "" +msgstr "இதிலிருந்து நிறுவுகிறது: கால: `சக்கரங்கள் `" #: ../source/discussions/pip-vs-easy-install.rst:27 #: ../source/discussions/pip-vs-easy-install.rst:38 @@ -1203,7 +2285,7 @@ msgstr "" #: ../source/discussions/pip-vs-easy-install.rst:54 #: ../source/discussions/pip-vs-easy-install.rst:57 msgid "Yes" -msgstr "" +msgstr "ஆம்" #: ../source/discussions/pip-vs-easy-install.rst:27 #: ../source/discussions/pip-vs-easy-install.rst:30 @@ -1216,83 +2298,83 @@ msgstr "" #: ../source/discussions/pip-vs-easy-install.rst:54 #: ../source/discussions/pip-vs-easy-install.rst:57 msgid "No" -msgstr "" +msgstr "இல்லை" #: ../source/discussions/pip-vs-easy-install.rst:30 msgid "Uninstall Packages" -msgstr "" +msgstr "தொகுப்புகளை நிறுவல் நீக்குதல்" #: ../source/discussions/pip-vs-easy-install.rst:30 msgid "Yes (``python -m pip uninstall``)" -msgstr "" +msgstr "ஆம் (`` பைதான் -எம் பிப் நிறுவல் நீக்குதல்``)" #: ../source/discussions/pip-vs-easy-install.rst:32 msgid "Dependency Overrides" -msgstr "" +msgstr "சார்பு மீறுகிறது" #: ../source/discussions/pip-vs-easy-install.rst:32 msgid "Yes (:ref:`Requirements Files `)" -msgstr "" +msgstr "ஆம் (: குறிப்பு: `தேவைகள் கோப்பு <பிப்: தேவைகள் கோப்பு>`)" #: ../source/discussions/pip-vs-easy-install.rst:35 msgid "List Installed Packages" -msgstr "" +msgstr "நிறுவப்பட்ட தொகுப்புகளை பட்டியலிடுங்கள்" #: ../source/discussions/pip-vs-easy-install.rst:35 msgid "Yes (``python -m pip list`` and ``python -m pip freeze``)" -msgstr "" +msgstr "ஆம் (`` பைதான் -எம் பிப் பட்டியல்`` மற்றும் `` பைதான் -எம் பிப் ஃப்ரீச்``)" #: ../source/discussions/pip-vs-easy-install.rst:38 msgid ":pep:`438` Support" -msgstr "" +msgstr ": PEP: `438` உதவி" #: ../source/discussions/pip-vs-easy-install.rst:41 msgid "Installation format" -msgstr "" +msgstr "நிறுவல் வடிவம்" #: ../source/discussions/pip-vs-easy-install.rst:41 msgid "'Flat' packages with :file:`egg-info` metadata." -msgstr "" +msgstr "'பிளாட்' தொகுப்புகள்: கோப்பு: `முட்டை-இன்ஃபோ` மேனிலை தரவு." #: ../source/discussions/pip-vs-easy-install.rst:41 msgid "Encapsulated Egg format" -msgstr "" +msgstr "இணைக்கப்பட்ட முட்டை வடிவம்" #: ../source/discussions/pip-vs-easy-install.rst:44 msgid "sys.path modification" -msgstr "" +msgstr "sys.path மாற்றம்" #: ../source/discussions/pip-vs-easy-install.rst:48 msgid "Installs from :term:`Eggs `" -msgstr "" +msgstr "இதிலிருந்து நிறுவுகிறது: கால: `முட்டை <முட்டை>`" #: ../source/discussions/pip-vs-easy-install.rst:51 msgid "`pylauncher support`_" -msgstr "" +msgstr "`பைலாஞ்சர் ஆதரவு`_" #: ../source/discussions/pip-vs-easy-install.rst:51 msgid "Yes [1]_" -msgstr "" +msgstr "ஆம் [1] _" #: ../source/discussions/pip-vs-easy-install.rst:54 msgid ":ref:`Multi-version Installs`" -msgstr "" +msgstr ": குறிப்பு: `மல்டி-பதிப்பு நிறுவல்கள்`" #: ../source/discussions/pip-vs-easy-install.rst:57 msgid "Exclude scripts during install" -msgstr "" +msgstr "நிறுவலின் போது ச்கிரிப்ட்களை விலக்கு" #: ../source/discussions/pip-vs-easy-install.rst:60 msgid "per project index" -msgstr "" +msgstr "திட்டக் குறியீட்டிற்கு" #: ../source/discussions/pip-vs-easy-install.rst:60 msgid "Only in virtualenv" -msgstr "" +msgstr "மெய்நிகர்இன்வியில் மட்டுமே" #: ../source/discussions/pip-vs-easy-install.rst:60 msgid "Yes, via setup.cfg" -msgstr "" +msgstr "ஆம், setup.cfg வழியாக" #: ../source/discussions/pip-vs-easy-install.rst:68 msgid "" @@ -1302,11 +2384,11 @@ msgstr "" #: ../source/discussions/setup-py-deprecated.rst:6 msgid "Is ``setup.py`` deprecated?" -msgstr "" +msgstr "`` Setup.py`` நீக்கப்பட்டதா?" #: ../source/discussions/setup-py-deprecated.rst:8 msgid "No, :term:`setup.py` and :ref:`setuptools` are not deprecated." -msgstr "" +msgstr "இல்லை,: கால: `setup.py` மற்றும்: ref:` setuptools` நீக்கப்படவில்லை." #: ../source/discussions/setup-py-deprecated.rst:10 msgid "" @@ -1316,69 +2398,77 @@ msgid "" "example (a similar practice is used by other tools like *nox* and its :file:" "`noxfile.py` configuration file, or *pytest* and :file:`conftest.py`)." msgstr "" +"Setuptools ஒரு: கால: `பின்தளத்தில் உருவாக்கு` பைதான் திட்டங்களை பேக்கேசிங் செய்வதற்கு " +"முற்றிலும் பயன்படுத்தக்கூடியது. மேலும்: கோப்பு: `setup.py` என்பது இதற்கான சரியான " +"உள்ளமைவு கோப்பு: குறிப்பு:` செட்டப்டூல்ச்` இது பைத்தானில் எழுதப்படுகிறது, " +"எடுத்துக்காட்டாக *டாம்ல் *க்கு பதிலாக (இதேபோன்ற நடைமுறை *Nox *போன்ற பிற கருவிகளால் " +"பயன்படுத்தப்படுகிறது மற்றும் அதன்: கோப்பு: `noxfile.py` உள்ளமைவு கோப்பு, அல்லது * " +"பைட்டெச்ட் * மற்றும்: கோப்பு:` conftest.py`)." #: ../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 "" +"இருப்பினும், `` பைதான் setup.py`` மற்றும் பயன்பாடு: கோப்பு: `setup.py` ஒரு கட்டளை " +"வரி கருவியாக நீக்கப்படும்." #: ../source/discussions/setup-py-deprecated.rst:21 msgid "" "This means that commands such as the following **MUST NOT** be run anymore:" -msgstr "" +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 "" +msgstr "`` பைதான் setup.py install``" #: ../source/discussions/setup-py-deprecated.rst:24 #: ../source/discussions/setup-py-deprecated.rst:37 #: ../source/guides/modernize-setup-py-project.rst:34 msgid "``python setup.py develop``" -msgstr "" +msgstr "`` பைதான் setup.py உருவாக்கு``" #: ../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 "" +msgstr "`` பைதான் setup.py sdist``" #: ../source/discussions/setup-py-deprecated.rst:26 #: ../source/discussions/setup-py-deprecated.rst:41 #: ../source/guides/modernize-setup-py-project.rst:38 msgid "``python setup.py bdist_wheel``" -msgstr "" +msgstr "`` பைதான் setup.py bdist_wheel``" #: ../source/discussions/setup-py-deprecated.rst:30 msgid "What commands should be used instead?" -msgstr "" +msgstr "அதற்கு பதிலாக என்ன கட்டளைகளைப் பயன்படுத்த வேண்டும்?" #: ../source/discussions/setup-py-deprecated.rst:33 #: ../source/guides/modernize-setup-py-project.rst:30 msgid "Deprecated" -msgstr "" +msgstr "மதிப்பிடப்பட்டது" #: ../source/discussions/setup-py-deprecated.rst:33 #: ../source/guides/modernize-setup-py-project.rst:30 msgid "Recommendation" -msgstr "" +msgstr "பரிந்துரை" #: ../source/discussions/setup-py-deprecated.rst:35 #: ../source/guides/modernize-setup-py-project.rst:32 msgid "``python -m pip install .``" -msgstr "" +msgstr "`` பைதான் -எம் பிஐபி நிறுவல் .``" #: ../source/discussions/setup-py-deprecated.rst:37 #: ../source/guides/modernize-setup-py-project.rst:34 msgid "``python -m pip install --editable .``" -msgstr "" +msgstr "`` பைதான் -எம் பிஐபி நிறுவல் -அடைக்கக்கூடியது .``" #: ../source/discussions/setup-py-deprecated.rst:39 msgid "``python -m build`` [#needs-build]_" -msgstr "" +msgstr "`` பைதான் -எம் பில்ட்`` [#தேவைகள் -கட்டுதல்] _" #: ../source/discussions/setup-py-deprecated.rst:45 msgid "" @@ -1387,6 +2477,10 @@ msgid "" "what ``python -m build`` does. If necessary the ``--sdist`` and ``--wheel`` " "options can be used to generate only one or the other." msgstr "" +"இதற்கு: ref: `உருவாக்கு` சார்பு தேவை. ஒரு திட்டத்தின் மூல வழங்கல் மற்றும் சக்கரம் " +"இரண்டையும் எப்போதும் உருவாக்கி வெளியிட பரிந்துரைக்கப்படுகிறது, இதுதான் `` பைதான் -எம் " +"பில்ட்`` செய்கிறது. தேவைப்பட்டால் ``--ச்டிச்ட்`` மற்றும் ``-வீல்`` விருப்பங்கள் ஒன்று அல்லது " +"மற்றொன்றை மட்டுமே உருவாக்க பயன்படுத்தப்படலாம்." #: ../source/discussions/setup-py-deprecated.rst:52 msgid "" @@ -1399,13 +2493,21 @@ msgid "" "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 "" +"செட்ப்டூல்ச் அடிப்படையிலான திட்டத்தை நிறுவுவதற்கு, இயங்குவது பொதுவானது: கோப்பு: `setup." +"py` இன்` `நிறுவு` கட்டளை போன்றவை:` `பைதான் அமைவு. இப்போதெல்லாம், பரிந்துரைக்கப்பட்ட " +"முறை பயன்படுத்த வேண்டும்: குறிப்பு: `பிஐபி` இது போன்ற ஒரு கட்டளையுடன் நேரடியாக:` " +"`பைதான் -எம் பிஐபி நிறுவல் .``. புள்ளி `` .`` உண்மையில் ஒரு கோப்பு முறைமை பாதை, இது " +"தற்போதைய கோப்பகத்திற்கான பாதை குறியீடாகும். உண்மையில், * பிப் * உள்ளக கோப்பு முறைமையில் " +"ஒரு திட்டத்தின் மூல மர கோப்பகத்திற்கான பாதையை அதன் `` நிறுவல்` துணை கட்டளைக்கு வாதமாக " +"ஏற்றுக்கொள்கிறது. எனவே இது செல்லுபடியாகும் கட்டளையாகவும் இருக்கும்: `` பைதான் -எம் " +"பிஐபி நிறுவல் பாதை/முதல்/திட்டம்``." #: ../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 "" +msgstr "* `` பைதான் அமைவு. -M PIP நிறுவல் --diable .``." #: ../source/discussions/setup-py-deprecated.rst:70 msgid "" @@ -1417,50 +2519,56 @@ msgid "" "generate only one or the other. Note that the build tool needs to be " "installed separately." msgstr "" +"ஒரு பரிந்துரைக்கப்பட்ட, எளிமையான மற்றும் நேரடியான கட்டிடம்: கால: `மூல வழங்கல் <மூல " +"வழங்கல் (அல்லது\" SDIST \")>` மற்றும்: கால: `சக்கரங்கள் ` பயன்படுத்த வேண்டும்: " +"ref: `உருவாக்கு` கருவி a `` பைதான் -எம் பில்ட்` போன்ற கட்டளை இரண்டு விநியோக " +"வடிவங்களின் தலைமுறையையும் தூண்டுகிறது. தேவைப்பட்டால் ``--ச்டிச்ட்`` மற்றும் ``-வீல்`` " +"விருப்பங்கள் ஒன்று அல்லது மற்றொன்றை மட்டுமே உருவாக்க பயன்படுத்தப்படலாம். உருவாக்க கருவி " +"தனித்தனியாக நிறுவப்பட வேண்டும் என்பதை நினைவில் கொள்க." #: ../source/discussions/setup-py-deprecated.rst:80 msgid "" "The command ``python setup.py install`` was deprecated in setuptools version " "*58.3.0*." -msgstr "" +msgstr "`` பைதான் அமைவு." #: ../source/discussions/setup-py-deprecated.rst:85 msgid "What about other commands?" -msgstr "" +msgstr "மற்ற கட்டளைகளைப் பற்றி என்ன?" #: ../source/discussions/setup-py-deprecated.rst:87 msgid "What are some replacements for the other ``python setup.py`` commands?" -msgstr "" +msgstr "மற்ற `` பைதான் அமைவு.பை`` கட்டளைகளுக்கு சில மாற்றீடுகள் யாவை?" #: ../source/discussions/setup-py-deprecated.rst:91 msgid "``python setup.py test``" -msgstr "" +msgstr "`` பைதான் setup.py test``" #: ../source/discussions/setup-py-deprecated.rst:93 msgid "The recommendation is to use a test runner such as pytest_." -msgstr "" +msgstr "Pytest_ போன்ற சோதனை ரன்னரைப் பயன்படுத்த வேண்டும் என்று பரிந்துரை." #: ../source/discussions/setup-py-deprecated.rst:99 msgid "" "``python setup.py check``, ``python setup.py register``, and ``python setup." "py upload``" -msgstr "" +msgstr "`` பைதான் அமைவு." #: ../source/discussions/setup-py-deprecated.rst:101 msgid "A trusted replacement is :ref:`twine`:" -msgstr "" +msgstr "நம்பகமான மாற்றீடு: ref: `ட்வைன்`:" #: ../source/discussions/setup-py-deprecated.rst:103 msgid "``python -m twine check --strict dist/*``" -msgstr "" +msgstr "`` பைதான் -எம் கயிறு காசோலை - -ச்ட்ரிக்ட் டிச்ட்/*``" #: ../source/discussions/setup-py-deprecated.rst:104 msgid "``python -m twine register dist/*.whl`` [#not-pypi]_" -msgstr "" +msgstr "`` பைதான் -எம் ட்வைன் பதிவு Dist/*." #: ../source/discussions/setup-py-deprecated.rst:105 msgid "``python -m twine upload dist/*``" -msgstr "" +msgstr "`` பைதான் -எம் கயிறு பதிவேற்றியது dist/*``" #: ../source/discussions/setup-py-deprecated.rst:107 msgid "" @@ -1468,129 +2576,132 @@ msgid "" "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 "" +msgstr "`` பைதான் setup.py --version``" #: ../source/discussions/setup-py-deprecated.rst:114 msgid "" "A possible replacement solution (among others) is to rely on setuptools-scm_:" -msgstr "" +msgstr "சாத்தியமான மாற்று தீர்வு (மற்றவற்றுடன்) Setuptools-SCM_ ஐ நம்புவதாகும்:" #: ../source/discussions/setup-py-deprecated.rst:116 msgid "``python -m setuptools_scm``" -msgstr "" +msgstr "`` பைதான் -எம் செட்டப்டூல்ச்_எச்சிஎம்``" #: ../source/discussions/setup-py-deprecated.rst:122 msgid "Remaining commands" -msgstr "" +msgstr "மீதமுள்ள கட்டளைகள்" #: ../source/discussions/setup-py-deprecated.rst:124 msgid "" "This guide does not make suggestions of replacement solutions for those " "commands:" -msgstr "" +msgstr "இந்த வழிகாட்டி அந்த கட்டளைகளுக்கு மாற்று தீர்வுகளின் பரிந்துரைகளை வழங்காது:" #: ../source/discussions/setup-py-deprecated.rst:129 msgid "``alias``" -msgstr "" +msgstr "`` மாற்றுப்பெயர்``" #: ../source/discussions/setup-py-deprecated.rst:130 msgid "``bdist``" -msgstr "" +msgstr "`` bdist``" #: ../source/discussions/setup-py-deprecated.rst:131 msgid "``bdist_dumb``" -msgstr "" +msgstr "`` bdist_dumb``" #: ../source/discussions/setup-py-deprecated.rst:132 msgid "``bdist_egg``" -msgstr "" +msgstr "`` bdist_egg``" #: ../source/discussions/setup-py-deprecated.rst:133 msgid "``bdist_rpm``" -msgstr "" +msgstr "`` bdist_rpm``" #: ../source/discussions/setup-py-deprecated.rst:134 msgid "``build``" -msgstr "" +msgstr "`` பில்ட்``" #: ../source/discussions/setup-py-deprecated.rst:135 msgid "``build_clib``" -msgstr "" +msgstr "`Build_clib``" #: ../source/discussions/setup-py-deprecated.rst:136 msgid "``build_ext``" -msgstr "" +msgstr "`` build_ext``" #: ../source/discussions/setup-py-deprecated.rst:137 msgid "``build_py``" -msgstr "" +msgstr "`` build_py``" #: ../source/discussions/setup-py-deprecated.rst:138 msgid "``build_scripts``" -msgstr "" +msgstr "`` build_scripts``" #: ../source/discussions/setup-py-deprecated.rst:139 msgid "``clean``" -msgstr "" +msgstr "`` சுத்தம்`" #: ../source/discussions/setup-py-deprecated.rst:140 msgid "``dist_info``" -msgstr "" +msgstr "`` dist_info``" #: ../source/discussions/setup-py-deprecated.rst:141 msgid "``easy_install``" -msgstr "" +msgstr "`` ஈசி_இன்ச்டால்``" #: ../source/discussions/setup-py-deprecated.rst:142 msgid "``editable_wheel``" -msgstr "" +msgstr "`` எடிபிள்_வீல்``" #: ../source/discussions/setup-py-deprecated.rst:143 msgid "``egg_info``" -msgstr "" +msgstr "`` முட்டை_இன்ஃபோ``" #: ../source/discussions/setup-py-deprecated.rst:144 msgid "``install_data``" -msgstr "" +msgstr "`` install_data``" #: ../source/discussions/setup-py-deprecated.rst:145 msgid "``install_egg_info``" -msgstr "" +msgstr "`` install_egg_info``" #: ../source/discussions/setup-py-deprecated.rst:146 msgid "``install_headers``" -msgstr "" +msgstr "`` install_headers``" #: ../source/discussions/setup-py-deprecated.rst:147 msgid "``install_lib``" -msgstr "" +msgstr "`` install_lib``" #: ../source/discussions/setup-py-deprecated.rst:148 msgid "``install_scripts``" -msgstr "" +msgstr "`` install_scripts``" #: ../source/discussions/setup-py-deprecated.rst:149 msgid "``rotate``" -msgstr "" +msgstr "`` சுழற்றுங்கள்``" #: ../source/discussions/setup-py-deprecated.rst:150 msgid "``saveopts``" -msgstr "" +msgstr "`` சேமிஆப்ச்``" #: ../source/discussions/setup-py-deprecated.rst:151 msgid "``setopt``" -msgstr "" +msgstr "`` Setoptt \"`" #: ../source/discussions/setup-py-deprecated.rst:152 msgid "``upload_docs``" -msgstr "" +msgstr "`` பதிவேற்றம்_டாக்ச்``" #: ../source/discussions/setup-py-deprecated.rst:156 msgid "What about custom commands?" -msgstr "" +msgstr "தனிப்பயன் கட்டளைகள் பற்றி என்ன?" #: ../source/discussions/setup-py-deprecated.rst:158 msgid "" @@ -1599,10 +2710,14 @@ msgid "" "any other similar tool. Some examples of such tools are: chuy, make, nox or " "tox, pydoit, pyinvoke, taskipy, and thx." msgstr "" +"அதேபோல், தனிப்பயன்: கோப்பு: `setup.py` கட்டளைகள் நீக்கப்படுகின்றன. அந்த தனிப்பயன் " +"கட்டளைகளை ஒரு பணி ரன்னர் கருவி அல்லது வேறு எந்த இதே போன்ற கருவிக்கு மாற்றுவதே " +"பரிந்துரை. அத்தகைய கருவிகளின் சில எடுத்துக்காட்டுகள்: சூய், மேக், நோக்ச் அல்லது டாக்ச், " +"பைடோயிட், பைன்வோக், டாச்கிபி மற்றும் Thx." #: ../source/discussions/setup-py-deprecated.rst:166 msgid "What about custom build steps?" -msgstr "" +msgstr "தனிப்பயன் உருவாக்க படிகள் பற்றி என்ன?" #: ../source/discussions/setup-py-deprecated.rst:168 msgid "" @@ -1610,11 +2725,14 @@ msgid "" "``build_py``, ``build_ext``, and ``bdist_wheel`` or add new build steps are " "not deprecated. Those will be automatically called as expected." msgstr "" +"தனிப்பயன் உருவாக்க படிகள் எடுத்துக்காட்டாக, `` `பில்ட்_பி``,` `பில்ட்_எக்ச்ட்``, மற்றும்` " +"`bdist_wheel`` போன்ற படிகளை மேலெழுதும் அல்லது புதிய உருவாக்க படிகளைச் சேர்க்காது. " +"அவை தானாகவே எதிர்பார்த்தபடி அழைக்கப்படும்." #: ../source/discussions/setup-py-deprecated.rst:175 #: ../source/guides/modernize-setup-py-project.rst:21 msgid "Should ``setup.py`` be deleted?" -msgstr "" +msgstr "`` Setup.py`` நீக்கப்பட வேண்டுமா?" #: ../source/discussions/setup-py-deprecated.rst:177 msgid "" @@ -1622,10 +2740,13 @@ msgid "" "deprecated, its usage as a configuration file for setuptools is absolutely " "fine. There is likely no modification needed in :file:`setup.py`." msgstr "" +"இதன் பயன்பாடு: கோப்பு: `setup.py` ஒரு இயங்கக்கூடிய ச்கிரிப்டாக நீக்கப்பட்டாலும், " +"செட்டுப்டூல்களுக்கான உள்ளமைவு கோப்பாக அதன் பயன்பாடு முற்றிலும் நன்றாக உள்ளது. இதில் எந்த " +"மாற்றமும் தேவையில்லை: கோப்பு: `setup.py`." #: ../source/discussions/setup-py-deprecated.rst:183 msgid "Is ``pyproject.toml`` mandatory?" -msgstr "" +msgstr "`` Pyproject.toml`` கட்டாயமா?" #: ../source/discussions/setup-py-deprecated.rst:185 msgid "" @@ -1633,11 +2754,15 @@ msgid "" "for a project to have a :file:`pyproject.toml` file at the root of its " "source tree with a content like this:" msgstr "" +"இது தொழில்நுட்ப ரீதியாக இன்னும் அவசியமில்லை என்றாலும், ஒரு திட்டத்தை ஒரு திட்டத்தை " +"வைத்திருப்பது ** ** ** ** ஒரு: கோப்பு: `pyproject.toml` கோப்பு அதன் மூல மரத்தின் " +"மூலத்தில் இது போன்ற உள்ளடக்கத்துடன்:" #: ../source/discussions/setup-py-deprecated.rst:196 msgid "" "The guide :ref:`modernize-setup-py-project` has more details about this." msgstr "" +"வழிகாட்டி: ref: `நவீனமயமாக்கல்-செட்டப்-ப்-திட்டத்தை 'இது குறித்த கூடுதல் விவரங்கள் உள்ளன." #: ../source/discussions/setup-py-deprecated.rst:198 msgid "" @@ -1646,43 +2771,51 @@ msgid "" "table is to assume that the :term:`build backend ` is " "setuptools." msgstr "" +"ஒரு: காலத்திற்கான நிலையான குறைவடையும் நடத்தை: `பில்ட் ஃபிரான்டென்ட் <பில்ட் " +"ஃபிரான்டெண்ட்>` ஒரு: கோப்பு: `pyproject.toml` கோப்பு மற்றும் அதன்` `[பில்ட்-சிச்டம்]` " +"`அட்டவணை என்று கருதுவது: காலமானது : `பின்தளத்தில் உருவாக்கு <பின்தளத்தில் உருவாக்கு>` " +"என்பது setuptools." #: ../source/discussions/setup-py-deprecated.rst:204 msgid "Why? What does it all mean?" -msgstr "" +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 "" +msgstr "இதைப் பற்றி மேலும் படிக்க எங்கே?" #: ../source/discussions/setup-py-deprecated.rst:213 msgid "" "`Why you shouldn't invoke setup.py directly `__ by Paul Ganssle" msgstr "" +"`நீங்கள் ஏன் setup.py ஐ நேரடியாக அழைக்கக்கூடாது ` __ பால் கன்ச்லே" #: ../source/discussions/setup-py-deprecated.rst:215 msgid ":doc:`setuptools:deprecated/commands`" -msgstr "" +msgstr ": டாக்: `செட்ப்டூல்ச்: நீக்கப்பட்ட/கட்டளைகள்`" #: ../source/discussions/single-source-version.rst:5 msgid "Single-sourcing the Project Version" -msgstr "" +msgstr "திட்ட பதிப்பில் ஒற்றை-மூல" #: ../source/discussions/single-source-version.rst:7 msgid "Complete" -msgstr "" +msgstr "முழுமையானது" #: ../source/discussions/single-source-version.rst:8 msgid "2024-10-07" -msgstr "" +msgstr "2024-10-07" #: ../source/discussions/single-source-version.rst:10 msgid "" @@ -1692,6 +2825,11 @@ msgid "" "same version specifier as :func:`importlib.metadata.version` reports for the " "distribution package (as described in :ref:`runtime-version-access`)." msgstr "" +"பல பைதான்: கால: `விநியோக தொகுப்புகள் <விநியோக தொகுப்பு>` ஒரு பைதானை வெளியிடுங்கள்: " +"கால: `இறக்குமதி தொகுப்பு <இறக்குமதி தொகுப்பு>` அங்கு இயக்க நேரம் `__ வழிமுறை__`` " +"இறக்குமதி தொகுப்பில் பண்புக்கூறு அதே பதிப்பு விவரக்குறிப்பை அறிக்கையிட வேண்டும் AS: " +"func: `importlib.metadata.version` விநியோக தொகுப்புக்கான அறிக்கைகள் " +"(விவரிக்கப்பட்டுள்ளபடி: குறிப்பு:` இயக்க நேர-பதிப்பு-அணுகல்`)." #: ../source/discussions/single-source-version.rst:16 msgid "" @@ -1699,34 +2837,45 @@ msgid "" "a version control system *tag* (such as ``v1.2.3``) rather than being " "manually updated in the source code." msgstr "" +"மூலக் குறியீட்டில் கைமுறையாக புதுப்பிக்கப்படுவதை விட இந்த பதிப்பு செய்தி பதிப்பு " +"கட்டுப்பாட்டு அமைப்பு * குறிச்சொல் * (`` v1.2.3`` போன்றவை) இலிருந்து பெறப்பட வேண்டும் " +"என்பதும் அடிக்கடி விரும்பப்படுகிறது." #: ../source/discussions/single-source-version.rst:20 msgid "" "Some projects may choose to simply live with the data entry duplication, and " "rely on automated testing to ensure the different values do not diverge." msgstr "" +"சில திட்டங்கள் தரவு நுழைவு நகலுடன் வாழ தேர்வு செய்யலாம், மேலும் வெவ்வேறு மதிப்புகள் " +"வேறுபடுவதில்லை என்பதை உறுதிப்படுத்த தானியங்கு சோதனையை நம்பியிருக்கலாம்." #: ../source/discussions/single-source-version.rst:23 msgid "" "Alternatively, a project's chosen build system may offer a way to define a " "single source of truth for the version number." msgstr "" +"மாற்றாக, ஒரு திட்டத்தின் தேர்ந்தெடுக்கப்பட்ட உருவாக்க அமைப்பு பதிப்பு எண்ணுக்கு உண்மையின் " +"ஒரு மூலத்தை வரையறுக்க ஒரு வழியை வழங்கக்கூடும்." #: ../source/discussions/single-source-version.rst:26 msgid "In general, the options are:" -msgstr "" +msgstr "பொதுவாக, விருப்பங்கள்:" #: ../source/discussions/single-source-version.rst:28 msgid "" "If the code is in a version control system (VCS), such as Git, then the " "version can be extracted from the VCS." msgstr "" +"குறியீடு ஒரு பதிப்பு கட்டுப்பாட்டு அமைப்பில் (VCS), அதாவது git போன்றவை என்றால், பதிப்பை " +"பகஅ இலிருந்து பிரித்தெடுக்க முடியும்." #: ../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 "" +"பதிப்பை: கோப்பு: `pyproject.toml` கோப்பில் கடினமாக குறியிடப்படலாம்-மேலும் கட்டட " +"அமைப்பு அதை தேவைப்படக்கூடிய பிற இடங்களுக்கு நகலெடுக்க முடியும்." #: ../source/discussions/single-source-version.rst:33 msgid "" @@ -1736,10 +2885,15 @@ msgid "" "attribute in a particular module, such as :file:`__init__.py`. The build " "system can then extract it from the runtime location at build time." msgstr "" +"பதிப்பு சரம் மூலக் குறியீட்டில் கடினமாக குறியிடப்படலாம்-ஒரு சிறப்பு நோக்கக் கோப்பில், " +"போன்றவை: கோப்பு: `_version.txt` (பின்னர் திட்டத்தின் மூல விநியோக தொகுப்பின் ஒரு " +"பகுதியாக அனுப்பப்பட வேண்டும்), அல்லது ஒரு ஒரு குறிப்பிட்ட தொகுதியில் பண்புக்கூறு, " +"போன்றவை: கோப்பு: `__init __. py`. பில்ட் சிச்டம் பின்னர் அதை உருவாக்கும் நேரத்தில் இயக்க " +"நேர இடத்திலிருந்து பிரித்தெடுக்க முடியும்." #: ../source/discussions/single-source-version.rst:38 msgid "Consult your build system's documentation for their recommended method." -msgstr "" +msgstr "அவற்றின் பரிந்துரைக்கப்பட்ட முறைக்கு உங்கள் உருவாக்க அமைப்பின் ஆவணங்களை அணுகவும்." #: ../source/discussions/single-source-version.rst:40 msgid "" @@ -1749,43 +2903,53 @@ msgid "" "``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 "" +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 "" +msgstr "`ஃபிளிட் ` _" #: ../source/discussions/single-source-version.rst:56 msgid "`Hatchling `_" -msgstr "" +msgstr "`அட்ச்லிங் ` _" #: ../source/discussions/single-source-version.rst:58 msgid "" "`PDM `_" msgstr "" +"`Pdm ` _" #: ../source/discussions/single-source-version.rst:60 msgid "" "`Setuptools `_" msgstr "" +"`Setuptools ` _" #: ../source/discussions/single-source-version.rst:62 msgid "`setuptools_scm `_" -msgstr "" +msgstr "`setuptools_scm ` _" #: ../source/discussions/src-layout-vs-flat-layout.rst:5 msgid "src layout vs flat layout" -msgstr "" +msgstr "எச்.ஆர்.சி தளவமைப்பு vs பிளாட் தளவமைப்பு" #: ../source/discussions/src-layout-vs-flat-layout.rst:7 msgid "" @@ -1793,6 +2957,9 @@ msgid "" "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 "" @@ -1801,18 +2968,27 @@ msgid "" "term:`import packages `) into a subdirectory. This " "subdirectory is typically named ``src/``, hence \"src layout\"." msgstr "" +"\"எச்.ஆர்.சி தளவமைப்பு\" இறக்குமதி செய்யக்கூடிய குறியீட்டை நகர்த்துவதன் மூலம் தட்டையான " +"தளவமைப்பிலிருந்து விலகிச் செல்கிறது (அதாவது `` `இறக்குமதி அற்புதமான_பேக்கேச்`, மேலும் " +"இது அழைக்கப்படுகிறது: கால:` இறக்குமதி தொகுப்புகள் <இறக்குமதி தொகுப்பு> `) ஒரு துணை " +"அடைவில். இந்த துணை அடைவு பொதுவாக `` SRC/`` என்று பெயரிடப்பட்டுள்ளது, எனவே \"SRC " +"தளவமைப்பு\"." #: ../source/discussions/src-layout-vs-flat-layout.rst:45 msgid "" "Here's a breakdown of the important behaviour differences between the src " "layout and the flat layout:" msgstr "" +"எச்.ஆர்.சி தளவமைப்பு மற்றும் தட்டையான தளவமைப்புக்கு இடையிலான முக்கியமான நடத்தை " +"வேறுபாடுகளின் முறிவு இங்கே:" #: ../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 "" @@ -1821,12 +2997,18 @@ msgid "" "` 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 "" @@ -1838,6 +3020,12 @@ msgid "" "packaging tooling, which could result in files not being included in a " "distribution." msgstr "" +"பைதான் மொழிபெயர்ப்பாளர் இறக்குமதி பாதையில் முதல் உருப்படியாக தற்போதைய பணி கோப்பகத்தை " +"உள்ளடக்கியிருப்பதால் இது பொருத்தமானது. இதன் பொருள், நிறுவப்பட்ட இறக்குமதி தொகுப்பின் அதே " +"பெயருடன் தற்போதைய பணி கோப்பகத்தில் இறக்குமதி தொகுப்பு இருந்தால், தற்போதைய பணி " +"கோப்பகத்திலிருந்து மாறுபாடு பயன்படுத்தப்படும். இது திட்டத்தின் பேக்கேசிங் கருவியின் " +"நுட்பமான தவறான கட்டமைப்பிற்கு வழிவகுக்கும், இதன் விளைவாக கோப்புகள் விநியோகத்தில் " +"சேர்க்கப்படாது." #: ../source/discussions/src-layout-vs-flat-layout.rst:66 msgid "" @@ -1845,6 +3033,8 @@ msgid "" "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 "" @@ -1852,6 +3042,9 @@ msgid "" "userguide/development_mode>` is only able to import files that were meant to " "be importable." msgstr "" +"எச்.ஆர்.சி தளவமைப்பு ஒரு: டாக்: `திருத்தக்கூடிய நிறுவல் <செட்டப்டூல்ச்: யூசர்சூட்/" +"டெவலப்மென்ட்_மோட்>` இறக்குமதி செய்யக்கூடிய கோப்புகளை மட்டுமே இறக்குமதி செய்ய முடியும் " +"என்பதை செயல்படுத்த உதவுகிறது." #: ../source/discussions/src-layout-vs-flat-layout.rst:74 msgid "" @@ -1859,6 +3052,9 @@ msgid "" "using a `path configuration file `_ that adds the directory to the import path." msgstr "" +"`பாதை உள்ளமைவு கோப்பைப் பயன்படுத்தி திருத்தக்கூடிய நிறுவல் செயல்படுத்தப்படும்போது இது " +"மிகவும் பொருத்தமானது _ _ " +"இது கோப்பகத்தை இறக்குமதி பாதையில் சேர்க்கிறது." #: ../source/discussions/src-layout-vs-flat-layout.rst:78 msgid "" @@ -1867,10 +3063,13 @@ msgid "" "``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 "" +msgstr "எச்.ஆர்.சி-லேஅவுட்டுடன் மூலத்திலிருந்து கட்டளை-வரி இடைமுகத்தை இயக்குகிறது" #: ../source/discussions/src-layout-vs-flat-layout.rst:88 msgid "" @@ -1882,19 +3081,26 @@ msgid "" "the package folder to Python's :py:data:`sys.path` when called via its :" "file:`__main__.py` file:" msgstr "" +"எச்.ஆர்.சி தளவமைப்பின் முதன்முதலில் குறிப்பிடப்பட்ட சிறப்பு காரணமாக, ஒரு கட்டளை-வரி " +"இடைமுகத்தை நேரடியாக இயக்க முடியாது: கால: `மூல மரம் <திட்ட மூல மரம்>`, ஆனால் " +"தொகுப்பை நிறுவ வேண்டும்: டாக்: `மேம்பாட்டு முறை < setuptools: USERGUIDE/" +"Development_mode> `சோதனை நோக்கங்களுக்காக. சில சூழ்நிலைகளில் இது நடைமுறைக்கு " +"மாறானதாக இருப்பதால், தொகுப்பு கோப்புறையை பைத்தானுக்கு தயார்படுத்துவது ஒரு " +"பணித்தொகுப்பு: py: data: `sys.path` அதன் வழியாக அழைக்கப்படும்போது: கோப்பு:` __main " +"__. பை` கோப்பு:" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" -msgstr "" +msgstr "பதிப்பு" #: ../source/discussions/versioning.rst:8 msgid "This discussion covers all aspects of versioning Python packages." -msgstr "" +msgstr "இந்த விவாதம் பைதான் தொகுப்புகளை பதிப்பதன் அனைத்து அம்சங்களையும் உள்ளடக்கியது." #: ../source/discussions/versioning.rst:12 msgid "Valid version numbers" -msgstr "" +msgstr "செல்லுபடியாகும் பதிப்பு எண்கள்" #: ../source/discussions/versioning.rst:14 msgid "" @@ -1905,48 +3111,56 @@ msgid "" "`specification of version specifiers `. Here are some " "examples of version numbers [#version-examples]_:" msgstr "" +"வெவ்வேறு பைதான் திட்டங்கள் அந்த குறிப்பிட்ட திட்டத்தின் தேவைகளின் அடிப்படையில் வெவ்வேறு " +"பதிப்பு திட்டங்களைப் பயன்படுத்தலாம், ஆனால் போன்ற கருவிகளுடன் இணக்கமாக இருக்க, ref: " +"`பிப்`, அவை அனைத்தும் பதிப்பு அடையாளங்காட்டிகளுக்கு நெகிழ்வான வடிவத்துடன் இணங்க வேண்டும், " +"அதற்காக அதிகாரப்பூர்வ குறிப்பு: ref: `பதிப்பு விவரக்குறிப்புகளின் விவரக்குறிப்பு " +"<பதிப்பு-விவரக்குறிப்புகள்>`. பதிப்பு எண்களின் சில எடுத்துக்காட்டுகள் இங்கே [#பதிப்பு-" +"எடுத்துக்காட்டுகள்] _:" #: ../source/discussions/versioning.rst:21 msgid "A simple version (final release): ``1.2.0``" -msgstr "" +msgstr "ஒரு எளிய பதிப்பு (இறுதி வெளியீடு): `` 1.2.0``" #: ../source/discussions/versioning.rst:22 msgid "A development release: ``1.2.0.dev1``" -msgstr "" +msgstr "ஒரு மேம்பாட்டு வெளியீடு: `` 1.2.0.dev1``" #: ../source/discussions/versioning.rst:23 msgid "An alpha release: ``1.2.0a1``" -msgstr "" +msgstr "ஆல்பா வெளியீடு: `` 1.2.0a1``" #: ../source/discussions/versioning.rst:24 msgid "A beta release: ``1.2.0b1``" -msgstr "" +msgstr "ஒரு பீட்டா வெளியீடு: `` 1.2.0b1``" #: ../source/discussions/versioning.rst:25 msgid "A release candidate: ``1.2.0rc1``" -msgstr "" +msgstr "ஒரு வெளியீட்டு வேட்பாளர்: `` 1.2.0rc1``" #: ../source/discussions/versioning.rst:26 msgid "A post-release: ``1.2.0.post1``" -msgstr "" +msgstr "ஒரு வெளியீட்டுக்கு பிந்தைய: `` 1.2.0.post1``" #: ../source/discussions/versioning.rst:27 msgid "" "A post-release of an alpha release (possible, but discouraged): ``1.2.0a1." "post1``" msgstr "" +"ஆல்பா வெளியீட்டின் பிந்தைய வெளியீட்டை (சாத்தியம், ஆனால் ஊக்கமளித்தது): `` 1.2.0a1." +"post1```" #: ../source/discussions/versioning.rst:28 msgid "A simple version with only two components: ``23.12``" -msgstr "" +msgstr "இரண்டு கூறுகள் மட்டுமே கொண்ட எளிய பதிப்பு: `` 23.12``" #: ../source/discussions/versioning.rst:29 msgid "A simple version with just one component: ``42``" -msgstr "" +msgstr "ஒரு கூறு கொண்ட எளிய பதிப்பு: `` 42``" #: ../source/discussions/versioning.rst:30 msgid "A version with an epoch: ``1!1.0``" -msgstr "" +msgstr "ஒரு சகாப்தத்துடன் ஒரு பதிப்பு: `` 1! 1.0``" #: ../source/discussions/versioning.rst:32 msgid "" @@ -1957,6 +3171,10 @@ msgid "" "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 "" @@ -1964,6 +3182,9 @@ msgid "" "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 "" @@ -1973,6 +3194,11 @@ msgid "" "with a new final release (e.g., incrementing the third component when using " "semantic versioning)." msgstr "" +"வெளியீட்டுக் குறிப்புகளில் பிழையை சரிசெய்வது போன்ற விநியோகிக்கப்பட்ட மென்பொருளை " +"பாதிக்காத இறுதி வெளியீட்டில் சிறிய பிழைகளை நிவர்த்தி செய்ய பிந்தைய உறவுகள் " +"பயன்படுத்தப்படுகின்றன. பிழை திருத்தங்களுக்கு அவை பயன்படுத்தப்படக்கூடாது; இவை புதிய " +"இறுதி வெளியீட்டில் செய்யப்பட வேண்டும் (எ.கா., சொற்பொருள் பதிப்பைப் பயன்படுத்தும் போது " +"மூன்றாவது கூறுகளை அதிகரிக்கும்)." #: ../source/discussions/versioning.rst:49 msgid "" @@ -1984,10 +3210,17 @@ msgid "" "epoch, as in \"1!1.0\", in order to be treated as more recent than the old " "version numbers." msgstr "" +"இறுதியாக, பதிப்புத் திட்டத்தை மாற்றும்போது வரிசையாக்க வரிசையை சரிசெய்ய, அரிதாகப் " +"பயன்படுத்தப்படும் அம்சமான சகாப்தங்கள். எடுத்துக்காட்டாக, ஒரு திட்டம் 23.12 போன்ற " +"பதிப்புகளுடன் காலெண்டர் பதிப்பைப் பயன்படுத்தினால், மற்றும் சொற்பொருள் பதிப்பிற்கு மாறினால், " +"1.0 போன்ற பதிப்புகளுடன், 1.0 மற்றும் 23.12 க்கு இடையிலான ஒப்பீடு தவறான வழியில் " +"செல்லும். இதை சரிசெய்ய, பழைய பதிப்பு எண்களை விட மிக சமீபத்தியதாக கருதப்படுவதற்கு, " +"\"1! 1.0\" இல் உள்ளதைப் போல புதிய பதிப்பு எண்கள் வெளிப்படையான சகாப்தத்தைக் கொண்டிருக்க " +"வேண்டும்." #: ../source/discussions/versioning.rst:59 msgid "Semantic versioning vs. calendar versioning" -msgstr "" +msgstr "சொற்பொருள் பதிப்பு எதிராக காலண்டர் பதிப்பு" #: ../source/discussions/versioning.rst:61 msgid "" @@ -1996,6 +3229,10 @@ msgid "" "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 "" @@ -2004,6 +3241,10 @@ msgid "" "That view may differ from the end-users' perception of what said formalized " "versioning scheme promises them." msgstr "" +"எந்த பதிப்பு எண் தேர்வு செய்ய வேண்டும் என்பது ஒரு திட்டத்தின் பராமரிப்பாளர் வரை. பதிப்பு " +"புடைப்புகள் பராமரிப்பாளரின் பார்வையை பிரதிபலிக்கின்றன என்பதே இதன் பொருள். " +"முறைப்படுத்தப்பட்ட பதிப்பு திட்டம் அவர்களுக்கு உறுதியளிக்கிறது என்ற இறுதி பயனர்களின் " +"பார்வையில் இருந்து அந்த பார்வை வேறுபடலாம்." #: ../source/discussions/versioning.rst:74 msgid "" @@ -2013,30 +3254,37 @@ msgid "" "when 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:723 msgid "Semantic versioning" -msgstr "" +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 "" +"*சொற்பொருள் பதிப்பு *(அல்லது செம்வர்) இன் சிந்தனை 3-பகுதி பதிப்பு எண்களைப் " +"பயன்படுத்துவதாகும், *mater.minor.patch *, அங்கு திட்ட ஆசிரியர் அதிகரிக்கும்:" #: ../source/discussions/versioning.rst:89 msgid "*major* when they make incompatible API changes," -msgstr "" +msgstr "* மேசர்* அவர்கள் பொருந்தாத பநிஇ மாற்றங்களைச் செய்யும்போது," #: ../source/discussions/versioning.rst:90 msgid "" "*minor* when they add functionality in a backwards-compatible manner, and" -msgstr "" +msgstr "* சிறிய* அவை பின்னோக்கி-இணக்கமான முறையில் செயல்பாட்டைச் சேர்க்கும்போது, மற்றும்" #: ../source/discussions/versioning.rst:91 msgid "*patch*, when they make backwards-compatible bug fixes." -msgstr "" +msgstr "*பேட்ச்*, அவை பின்னோக்கி-இணக்கமான பிழை திருத்தங்களைச் செய்யும்போது." #: ../source/discussions/versioning.rst:93 msgid "" @@ -2049,6 +3297,14 @@ msgid "" "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 "" @@ -2061,12 +3317,22 @@ msgid "" "equivalent to ``name >= X.Y.Z, == X.Y.*``, i.e., it requires at least X.Y.Z " "and allows a later release with same X and Y but higher Z." msgstr "" +"கண்டிப்பான சொற்பொருள் பதிப்பைப் பயன்படுத்தும் அந்த திட்டங்களுக்கு, இந்த அணுகுமுறை பயனர்களை " +"பயன்படுத்த அனுமதிக்கிறது: Ref: `இணக்கமான வெளியீட்டு பதிப்பு விவரக்குறிப்புகள் <பதிப்பு-" +"விவரக்குறிப்புகள்-இணக்கமான-வெளியீட்டு>`, `~ ~ =` `ஆபரேட்டருடன். எடுத்துக்காட்டாக, `` " +"பெயர் ~ = X.Y`` தோராயமாக `` பெயர்> = x.y, == x.*``, அதாவது, இதற்கு குறைந்தபட்சம் " +"வெளியீடு X.y க்கு தேவைப்படுகிறது, மேலும் எந்தவொரு பின்னர் வெளியீட்டை அதிக ஒய் உடன் " +"அனுமதிக்கிறது ஃச் ஒன்றே. அதேபோல், `` பெயர் ~ = x.y.z`` தோராயமாக `` பெயர்> = x.y.z, " +"== x.y.*``, அதாவது, அதற்கு குறைந்தபட்சம் x.y.z தேவைப்படுகிறது மற்றும் அதே ஃச் மற்றும் " +"ஒய் உடன் பின்னர் வெளியீட்டை அனுமதிக்கிறது." #: ../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 "" +"சொற்பொருள் பதிப்பைப் பின்பற்றும் பைதான் திட்டங்கள் `சொற்பொருள் பதிப்பு 2.0.0 விவரக்குறிப்பு " +"<செம்வர்_>` _ `_ ஆகியவற்றின் 1-8 உட்பிரிவுகளுக்கு கட்டுப்பட வேண்டும்." #: ../source/discussions/versioning.rst:115 msgid "" @@ -2078,10 +3344,17 @@ msgid "" "contain backwards-incompatible API changes (:doc:`NumPy versioning policy " "`)." msgstr "" +"பிரபலமான: டிஓசி: `ச்பின்க்ச் <ச்பின்க்ச்: இன்டெக்ச்>` ஆவணப்படுத்தல் செனரேட்டர் என்பது " +"கடுமையான சொற்பொருள் பதிப்பைப் பயன்படுத்தும் ஒரு எடுத்துக்காட்டு திட்டமாகும் (: டாக்: " +"`ச்பிங்க்ச் பதிப்பு கொள்கை <ச்பிங்க்ச்: இன்டர்ன்ச்/வெளியீட்டு-செயல்முறை>`). புகழ்பெற்ற: டிஓசி: " +"`நம்பி <நம்பி: இன்டெக்ச்>` அறிவியல் கணினி தொகுப்பு வெளிப்படையாக \"தளர்வான\" சொற்பொருள் " +"பதிப்பைப் பயன்படுத்துகிறது, அங்கு சிறிய பதிப்பை அதிகரிக்கும் வெளியீடுகள் பின்னோக்கி-" +"இணக்கமான பநிஇ மாற்றங்களைக் கொண்டிருக்கலாம் (: டாக்: `நம்பி பதிப்பு கொள்கை <நம்பி: தேவ்/ " +"_ON_NUMPY> `)." #: ../source/discussions/versioning.rst:124 msgid "Calendar versioning" -msgstr "" +msgstr "காலண்டர் பதிப்பு" #: ../source/discussions/versioning.rst:126 msgid "" @@ -2089,6 +3362,9 @@ msgid "" "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 "" @@ -2096,22 +3372,29 @@ msgid "" "`_ (CalVer), is that it is straightforward to tell how old the base " "feature set of a particular release is given just the version number." msgstr "" +"தேதி அடிப்படையிலான பதிப்பின் முக்கிய நன்மை, அல்லது `காலண்டர் பதிப்பு <கால்வர்_>` _ " +"(கால்வர்), ஒரு குறிப்பிட்ட வெளியீட்டின் அடிப்படை அம்சத் தொகுப்பிற்கு பதிப்பு எண்ணை எவ்வளவு " +"பழையதாகக் கூறுவது நேரடியானது." #: ../source/discussions/versioning.rst:134 msgid "" "Calendar version numbers typically take the form *year.month* (for example, " "23.12 for December 2023)." msgstr "" +"காலண்டர் பதிப்பு எண்கள் பொதுவாக * year.month * படிவத்தை எடுக்கும் (எடுத்துக்காட்டாக, " +"டிசம்பர் 2023 க்கு 23.12)." #: ../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 "" +msgstr "பிற திட்டங்கள்" #: ../source/discussions/versioning.rst:144 msgid "" @@ -2121,6 +3404,11 @@ msgid "" "as an end user, as serial version numbers convey little or no information " "regarding API backwards compatibility." msgstr "" +"சீரியல் பதிப்பு என்பது எளிமையான சாத்தியமான பதிப்பு திட்டத்தைக் குறிக்கிறது, இது ஒவ்வொரு " +"வெளியீட்டையும் அதிகரிக்கும் ஒற்றை எண்ணைக் கொண்டுள்ளது. சீரியல் பதிப்பு ஒரு டெவலப்பராக " +"நிர்வகிக்க மிகவும் எளிதானது என்றாலும், இறுதி பயனராக கண்காணிப்பது கடினம், ஏனெனில் தொடர் " +"பதிப்பு எண்கள் பநிஇ பின்னோக்கி பொருந்தக்கூடிய தன்மை குறித்து சிறிய அல்லது எந்த தகவலையும் " +"தெரிவிக்கின்றன." #: ../source/discussions/versioning.rst:150 msgid "" @@ -2130,11 +3418,15 @@ msgid "" "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 "" +msgstr "உள்ளக பதிப்பு அடையாளங்காட்டிகள்" #: ../source/discussions/versioning.rst:159 msgid "" @@ -2144,6 +3436,11 @@ msgid "" "which can be used to identify local development builds not intended for " "publication, or modified variants of a release maintained by a redistributor." msgstr "" +"பொது பதிப்பு அடையாளங்காட்டிகள் விநியோகத்தை ஆதரிக்க வடிவமைக்கப்பட்டுள்ளன: கால: `பைபி " +"<பைதான் தொகுப்பு குறியீட்டு (PYPI)>`. பைதான் பேக்கேசிங் கருவிகள் A: ref: `உள்ளூர் " +"பதிப்பு அடையாளங்காட்டி <உள்ளூர்-பதிப்பு-அடையாளங்காட்டிகள்>` என்ற கருத்தையும் ஆதரிக்கின்றன, " +"இது வெளியீட்டிற்காக அல்ல, அல்லது மறுவிநியோகத்தால் பராமரிக்கப்படும் வெளியீட்டின் " +"மாற்றியமைக்கப்பட்ட மாறுபாடுகளை அடையாளம் காண பயன்படுத்தலாம்." #: ../source/discussions/versioning.rst:165 msgid "" @@ -2156,10 +3453,18 @@ msgid "" "dev1+gd00980f\", or if the repository has untracked changes, like \"0.5." "dev1+gd00980f.d20231217\"." msgstr "" +"உள்ளக பதிப்பு அடையாளங்காட்டி பொது பதிப்பு அடையாளங்காட்டியின் வடிவத்தை எடுக்கிறது, அதைத் " +"தொடர்ந்து \"+\" மற்றும் உள்ளக பதிப்பு சிட்டை. எடுத்துக்காட்டாக, ஃபெடோரா-குறிப்பிட்ட " +"திட்டுகள் பயன்படுத்தப்படும் ஒரு தொகுப்பில் \"1.2.1+ஃபெடோரா 4\" பதிப்பைக் கொண்டிருக்கலாம். " +"மற்றொரு எடுத்துக்காட்டு, செட்ப்டூல்ச்-எச்.சி.எம்_ ஆல் கணக்கிடப்பட்ட பதிப்புகள், செடுப்டூல்ச் " +"சொருகி, இது அறிவிலி தரவிலிருந்து பதிப்பைப் படிக்கிறது. அண்மைக் கால வெளியீட்டிலிருந்து " +"சில கமிட்டுகளுடன் கூடிய ஒரு சிஐடி களஞ்சியத்தில், செடுப்டூல்ச்-எச்.சி.எம் \"0.5." +"DEV1+GD00980F\" போன்ற ஒரு பதிப்பை உருவாக்குகிறது, அல்லது களஞ்சியத்தில் \"0.5." +"DEV1+GD00980F.D2021217\" போன்ற மாற்றங்கள் கட்டுப்படுத்தப்படாத மாற்றங்களைக் கொண்டிருந்தால்." #: ../source/discussions/versioning.rst:177 msgid "Accessing version information at runtime" -msgstr "" +msgstr "இயக்க நேரத்தில் பதிப்பு தகவல்களை அணுகும்" #: ../source/discussions/versioning.rst:179 msgid "" @@ -2168,12 +3473,18 @@ msgid "" "obtained at runtime using the standard library's :func:`importlib.metadata." "version` function::" msgstr "" +"அனைவருக்கும் பதிப்பு தகவல்: கால: `விநியோக தொகுப்புகள் <விநியோக தொகுப்பு>` தற்போதைய " +"சூழலில் உள்ளூரில் கிடைக்கக்கூடியவை நிலையான நூலகத்தைப் பயன்படுத்தி இயக்க நேரத்தில் " +"பெறலாம்: FUNC: `importlib.metadata.version` செயல்பாடு ::" #: ../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 "" +"பல திட்டங்கள் அவற்றின் உயர் மட்டத்தை பதிப்பதற்கும் தேர்வு செய்கின்றன: கால: `இறக்குமதி " +"தொகுப்புகளை <இறக்குமதி தொகுப்பு>` ஒரு தொகுப்பு நிலையை வழங்குவதன் மூலம் " +"`__version__`` பண்புக்கூறு ::" #: ../source/discussions/versioning.rst:194 msgid "" @@ -2181,6 +3492,9 @@ msgid "" "to ensure that version query invocations (such as ``pip -V``) run as quickly " "as possible." msgstr "" +"சி.எல்.ஐ பயன்பாடுகளுக்கு இந்த நுட்பம் குறிப்பாக மதிப்புமிக்கதாக இருக்கும், இது பதிப்பு " +"வினவல் அழைப்பிதழ்கள் (`` பிப் -வி`` போன்றவை) முடிந்தவரை விரைவாக இயங்குவதை உறுதிசெய்ய " +"விரும்புகின்றன." #: ../source/discussions/versioning.rst:198 msgid "" @@ -2188,6 +3502,10 @@ msgid "" "import package versions are consistent with each other can review the :ref:" "`single-source-version` discussion for potential approaches to doing so." msgstr "" +"தங்கள் அறிக்கையிடப்பட்ட விநியோக தொகுப்பு மற்றும் இறக்குமதி தொகுப்பு பதிப்புகள் " +"ஒருவருக்கொருவர் ஒத்துப்போகின்றன என்பதை உறுதிப்படுத்த விரும்பும் தொகுப்பு வெளியீட்டாளர்கள் " +"மறுபரிசீலனை செய்யலாம்: Ref: `ஒற்றை-மூல-பதிப்பு` அவ்வாறு செய்வதற்கான சாத்தியமான " +"அணுகுமுறைகளுக்கு விவாதம்." #: ../source/discussions/versioning.rst:202 msgid "" @@ -2199,6 +3517,11 @@ msgid "" "querying code should be designed to handle the case where the attribute is " "missing [#fallback-to-dist-version]_." msgstr "" +"இயக்க நேர பதிப்பு தகவல்களை இந்த வழியில் வெளியிட இறக்குமதி தொகுப்புகள் மற்றும் தொகுதிகள் " +"* தேவையில்லை * (திரும்பப் பெறப்பட்ட திட்டத்தைப் பார்க்கவும்: PEP: `PEP 396 <396>`) அவை " +"வழங்குவதாக அறியப்படுகிறது (அதன் சொந்த பதிப்பை வினவுவது அல்லது அதன் நேரடி சார்புகளில் " +"ஒன்றின் பதிப்பு போன்றவை), இல்லையெனில் வினவல் குறியீடு பண்புக்கூறு காணாமல் போன வழக்கைக் " +"கையாள வடிவமைக்கப்பட வேண்டும் [#குறைவுக்கு-தூரத்திற்கு -்வெர்சன்] _." #: ../source/discussions/versioning.rst:210 msgid "" @@ -2208,12 +3531,19 @@ msgid "" "For example, the standard library's :mod:`ssl` module offers multiple ways " "to access the underlying OpenSSL library version::" msgstr "" +"சில திட்டங்கள் தொகுதியின் பதிப்பாக இல்லாத வெளிப்புற பநிஇ களுக்கான பதிப்பு தகவல்களை " +"வெளியிட வேண்டியிருக்கலாம். இத்தகைய திட்டங்கள் இயக்க நேரத்தில் தொடர்புடைய தகவல்களைப் " +"பெறுவதற்கான தங்கள் சொந்த திட்ட-குறிப்பிட்ட வழிகளை வரையறுக்க வேண்டும். எடுத்துக்காட்டாக, " +"நிலையான நூலகத்தின்: MOD: `SSL` தொகுதி அடிப்படை OpenSSL நூலக பதிப்பை அணுக பல " +"வழிகளை வழங்குகிறது ::" #: ../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 "" @@ -2222,6 +3552,10 @@ msgid "" "stufft_>`_, `by Bernát Gábor `_, `by Brett Cannon " "`_. For a humoristic take, read about ZeroVer_." msgstr "" +"இந்த இதழில் சில தனிப்பட்ட கண்ணோட்டங்களுக்கு, இந்த வலைப்பதிவு இடுகைகளைப் பார்க்கவும்: `ஐனெக் " +"ச்க்லவாக் <செம்வர்-ஐனெக்-ச்லாவாக்_>` _, `டொனால்ட் ச்டஃப் <செம்வர்-டொனால்ட்-ச்டஃப்ட்_>` _, " +"`பெர்னட் கோபர் <செம்வெர்-வெர்னட்- gabor_> `_,` பிரட் கேனன் `_. " +"நகைச்சுவையான எடுத்துக்கொள்ள, Zerover_ பற்றி படியுங்கள்." #: ../source/discussions/versioning.rst:234 msgid "" @@ -2235,10 +3569,18 @@ msgid "" "and modules added via means other than Python package installation would " "fail to have version information reported in that case." msgstr "" +"அந்த இறக்குமதி தொகுப்புகள் மற்றும் தொகுதிகளை வழங்கும் விநியோக தொகுப்புகளுக்கு " +"இறக்குமதிக்கு கிடைக்கக்கூடிய உயர் மட்ட பெயர்களை மேப்பிங் செய்யும் முழு பட்டியல் நிலையான " +"நூலகத்தின் மூலம் பெறப்படலாம்: func: `importlib.metadata.packages_distributions` " +"செயல்பாடு. இதன் பொருள் என்னவென்றால், இறக்குமதி செய்யக்கூடிய அனைத்து உயர்மட்ட பெயர்களுக்கும் " +"புகாரளிக்க ஒரு பதிப்பை ஊகிக்க முயற்சிக்கும் குறியீடு கூட `__ பதிப்பு__`` பண்புக்கூறு " +"வரையறுக்கப்பட்டால், விநியோக பதிப்பு தகவல்களைப் புகாரளிக்கத் திரும்புவதற்கான வழிமுறைகள் " +"உள்ளன. நிலையான நூலக தொகுதிகள் மற்றும் பைதான் தொகுப்பு நிறுவலைத் தவிர வேறு வழிகளில் " +"சேர்க்கப்பட்ட தொகுதிகள் மட்டுமே அந்த விசயத்தில் பதிப்பு தகவல்களைப் பெறத் தவறும்." #: ../source/flow.rst:3 msgid "The Packaging Flow" -msgstr "" +msgstr "பேக்கேசிங் ஓட்டம்" #: ../source/flow.rst:5 msgid "" @@ -2247,6 +3589,10 @@ msgid "" "Package Index (PyPI)`_. It is written for package publishers, who are " "assumed to be the package author." msgstr "" +"ஒரு: காலத்தை வெளியிட/விநியோகிப்பதில் ஈடுபடும் ஓட்டத்தை கோடிட்டுக் காட்டுவதை ஆவணம் " +"நோக்கமாகக் கொண்டுள்ளது: கால: `விநியோக தொகுப்பு <விநியோக தொகுப்பு>`, வழக்கமாக `பைதான் " +"தொகுப்பு குறியீட்டு (PYPI)` _ க்கு. தொகுப்பு வெளியீட்டாளர்களுக்காக இது எழுதப்பட்டுள்ளது, " +"அவர்கள் தொகுப்பு எழுத்தாளராக கருதப்படுகிறார்கள்." #: ../source/flow.rst:12 msgid "" @@ -2254,18 +3600,25 @@ msgid "" "process of preparing a simple package for release, it does not fully " "enumerate what steps and files are required, and for what purpose." msgstr "" +"TOP: `டுடோரியல் <டுடோரியல்கள்/பேக்கேசிங்-திட்டங்கள்>` வெளியீட்டிற்கு ஒரு எளிய தொகுப்பைத் " +"தயாரிக்கும் செயல்முறையின் மூலம் நடந்து செல்லும்போது, என்ன படிகள் மற்றும் கோப்புகள் தேவை, " +"எந்த நோக்கத்திற்காக அது முழுமையாகக் கணக்கிடாது." #: ../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 "" @@ -2274,6 +3627,10 @@ msgid "" "will be a :file:`pyproject.toml` file, maintained manually in the source " "tree." msgstr "" +"தொகுப்பு மேனிலை தரவு (பெயர், பதிப்பு மற்றும் பல) மற்றும் உருவாக்க கலைப்பொருட்களை " +"எவ்வாறு உருவாக்குவது என்பதை விவரிக்கும் உள்ளமைவு கோப்பைத் தயாரிக்கவும். பெரும்பாலான " +"தொகுப்புகளுக்கு, இது ஒரு: கோப்பு: `pyproject.toml` கோப்பு, மூல மரத்தில் கைமுறையாக " +"பராமரிக்கப்படுகிறது." #: ../source/flow.rst:27 msgid "" @@ -2284,22 +3641,32 @@ msgid "" "build tool using the configuration file from the previous step. Often there " "is just one generic wheel for a pure Python package." msgstr "" +"தொகுப்பு விநியோக சேவைக்கு (பொதுவாக PYPI) அனுப்பப்பட வேண்டிய கட்டமைப்புகளை " +"உருவாக்குங்கள்; இவை பொதுவாக ஒரு: காலமாக இருக்கும்: `மூல வழங்கல் (\" SDIST \") <மூல " +"வழங்கல் (அல்லது\" SDIST \")>` மற்றும் ஒன்று அல்லது அதற்கு மேற்பட்டவை: சொல்: `கட்டப்பட்ட " +"விநியோகங்கள் (\" சக்கரங்கள் \") <கட்டப்பட்ட விநியோகம்>`. முந்தைய படியிலிருந்து உள்ளமைவு " +"கோப்பைப் பயன்படுத்தி ஒரு உருவாக்க கருவியால் இவை செய்யப்படுகின்றன. பெரும்பாலும் தூய " +"பைதான் தொகுப்புக்கு ஒரு பொதுவான சக்கரம் மட்டுமே உள்ளது." #: ../source/flow.rst:35 msgid "Upload the build artifacts to the package distribution service." -msgstr "" +msgstr "தொகுப்பு விநியோக சேவையில் உருவாக்க கலைப்பொருட்களை பதிவேற்றவும்." #: ../source/flow.rst:37 msgid "" "At that point, the package is present on the package distribution service. " "To use the package, end users must:" msgstr "" +"அந்த நேரத்தில், தொகுப்பு விநியோக சேவையில் தொகுப்பு உள்ளது. தொகுப்பைப் பயன்படுத்த, இறுதி " +"பயனர்கள் வேண்டும்:" #: ../source/flow.rst:40 msgid "" "Download one of the package's build artifacts from the package distribution " "service." msgstr "" +"தொகுப்பு விநியோக சேவையிலிருந்து தொகுப்பின் உருவாக்க கலைப்பொருட்களில் ஒன்றைப் " +"பதிவிறக்கவும்." #: ../source/flow.rst:43 msgid "" @@ -2307,20 +3674,25 @@ msgid "" "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 "" +"இந்த கடைசி 2 படிகள் பொதுவாக நிகழ்த்தப்படுகின்றன: குறிப்பு: `பிப்` ஒரு இறுதி பயனர் " +"இயங்கும்போது` `பிஐபி நிறுவல்``." #: ../source/flow.rst:50 msgid "The steps above are described in more detail below." -msgstr "" +msgstr "மேலே உள்ள படிகள் கீழே விரிவாக விவரிக்கப்பட்டுள்ளன." #: ../source/flow.rst:53 msgid "The source tree" -msgstr "" +msgstr "மூல மரம்" #: ../source/flow.rst:55 msgid "" @@ -2328,10 +3700,14 @@ msgid "" "VCS. The particular version of the code used to create the build artifacts " "will typically be a checkout based on a tag associated with the version." msgstr "" +"மூல மரத்தில் தொகுப்பு மூலக் குறியீடு உள்ளது, பொதுவாக ஒரு வி.சி.எச்சிலிருந்து ஒரு " +"புதுப்பிப்பு. உருவாக்க கலைப்பொருட்களை உருவாக்கப் பயன்படுத்தப்படும் குறியீட்டின் குறிப்பிட்ட " +"பதிப்பு பொதுவாக பதிப்போடு தொடர்புடைய குறிச்சொல்லின் அடிப்படையில் ஒரு புதுப்பித்தலாக " +"இருக்கும்." #: ../source/flow.rst:60 msgid "The configuration file" -msgstr "" +msgstr "உள்ளமைவு கோப்பு" #: ../source/flow.rst:62 msgid "" @@ -2339,6 +3715,8 @@ msgid "" "artifacts. The standard practice is to use a :file:`pyproject.toml` file in " "the `TOML format`_." msgstr "" +"உள்ளமைவு கோப்பு உருவாக்க கலைப்பொருட்களை உருவாக்கப் பயன்படுத்தப்படும் கருவியைப் பொறுத்தது. " +"`டாம்ல் வடிவத்தில்`_ இல்` pyproject.toml` கோப்பைப் பயன்படுத்துவது நிலையான நடைமுறை." #: ../source/flow.rst:68 msgid "" @@ -2348,10 +3726,15 @@ msgid "" "`poetry`, :ref:`setuptools`, `trampolim`_, and `whey`_. Each tool's " "documentation will show what to put in the ``[build-system]`` table." msgstr "" +"குறைந்தபட்சம், தி: கோப்பு: `pyproject.toml` கோப்புக்கு` `[பில்ட்-சிச்டம்]` `உங்கள் " +"உருவாக்க கருவியைக் குறிப்பிடும் அட்டவணை தேவை. இதில் பல கட்டமைப்புக் கருவிகள் உள்ளன, " +"அவற்றில் மட்டுப்படுத்தப்படவில்லை: ref: `flit`,: ref:` அட்ச்`,: ref: `pdm`,: ref:` " +"கவிதை`,: ref: `setuptools`,` trampolim` _, மற்றும் `மோர்`_. ஒவ்வொரு கருவியின் " +"ஆவணங்களும் `` [பில்ட்-சிச்டம்] `` அட்டவணையில் எதை வைக்க வேண்டும் என்பதைக் காண்பிக்கும்." #: ../source/flow.rst:77 msgid "For example, here is a table for using :ref:`hatch`:" -msgstr "" +msgstr "எடுத்துக்காட்டாக, பயன்படுத்த ஒரு அட்டவணை இங்கே: ref: `அட்ச்`:" #: ../source/flow.rst:85 msgid "" @@ -2362,36 +3745,48 @@ msgid "" "`pip` also acts as a frontend when it runs your build tool's backend to " "install from a source distribution." msgstr "" +"அத்தகைய அட்டவணையுடன்: கோப்பு: `pyproject.toml` கோப்பு, ஒரு\": கால: `ஃபிரான்டென்ட் " +"<பில்ட் ஃபிரான்டென்ட்>` \"கருவி போன்ற: ref:` பில்ட்` நீங்கள் தேர்ந்தெடுத்த பில்ட் கருவியை " +"இயக்க முடியும் \": கால:` பின்தளத்தில் < உருவாக்க கலைப்பொருட்களை உருவாக்க பின்தளத்தில்> " +"`\" உருவாக்குங்கள். உங்கள் உருவாக்க கருவி அதன் சொந்த முன்பக்கத்தையும் வழங்கக்கூடும். ஒரு " +"நிறுவும் கருவி: ref: `பிப்` ஒரு மூல விநியோகத்திலிருந்து நிறுவ உங்கள் உருவாக்க " +"கருவியின் பின்தளத்தில் இயக்கும்போது ஒரு முன்பக்கமாகவும் செயல்படுகிறது." #: ../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 "" +"நீங்கள் தேர்வுசெய்த குறிப்பிட்ட உருவாக்க கருவி: கோப்பு: `pyproject.toml` கோப்பில் என்ன " +"கூடுதல் செய்தி தேவை என்பதைக் குறிக்கிறது. எடுத்துக்காட்டாக, நீங்கள் குறிப்பிடலாம்:" #: ../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 "" +msgstr "கருவி-குறிப்பிட்ட உள்ளமைவு விருப்பங்களைக் கொண்ட ஒரு `` [கருவி] `` அட்டவணை." #: ../source/flow.rst:103 msgid "" "Refer to the :ref:`pyproject.toml guide ` for a " "complete guide to ``pyproject.toml`` configuration." msgstr "" +"`` Pyproject.toml`` உள்ளமைவுக்கான முழுமையான வழிகாட்டிக்கு `pyproject.toml " +"வழிகாட்டி <எழுதுதல்-pyproject-toml>` ஐப் பார்க்கவும்." #: ../source/flow.rst:108 msgid "Build artifacts" -msgstr "" +msgstr "கலைப்பொருட்களை உருவாக்குங்கள்" #: ../source/flow.rst:111 msgid "The source distribution (sdist)" -msgstr "" +msgstr "மூல வழங்கல் (SDIST)" #: ../source/flow.rst:113 msgid "" @@ -2401,21 +3796,30 @@ msgid "" "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 "" +"The: ref: `பில்ட்` தொகுப்புக்கு இவற்றில் ஒன்றை உருவாக்க உங்கள் உருவாக்க கருவியை எவ்வாறு " +"செயல்படுத்துவது என்பது தெரியும்:" #: ../source/flow.rst:126 msgid "" "Or, your build tool may provide its own interface for creating an sdist." msgstr "" +"அல்லது, உங்கள் உருவாக்க கருவி ஒரு SDIST ஐ உருவாக்குவதற்கான அதன் சொந்த இடைமுகத்தை " +"வழங்கக்கூடும்." #: ../source/flow.rst:130 msgid "The built distributions (wheels)" -msgstr "" +msgstr "கட்டப்பட்ட விநியோகங்கள் (சக்கரங்கள்)" #: ../source/flow.rst:132 msgid "" @@ -2424,6 +3828,10 @@ msgid "" "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 "" @@ -2433,10 +3841,17 @@ msgid "" "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 "" @@ -2444,24 +3859,30 @@ msgid "" "from the source in the current directory; the above examples are " "deliberately specific." msgstr "" +"இதன் இயல்புநிலை நடத்தை: ref: `` பில்ட்` என்பது தற்போதைய கோப்பகத்தில் மூலத்திலிருந்து ஒரு " +"SDIST மற்றும் சக்கரம் இரண்டையும் உருவாக்குவதாகும்; மேலே உள்ள எடுத்துக்காட்டுகள் " +"வேண்டுமென்றே குறிப்பிட்டவை." #: ../source/flow.rst:159 msgid "Upload to the package distribution service" -msgstr "" +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 "" +msgstr "பதிவிறக்கம் செய்து நிறுவவும்" #: ../source/flow.rst:173 msgid "" @@ -2469,30 +3890,37 @@ msgid "" "package into their Python environment. Typically this is done with :ref:" "`pip`, using a command like:" msgstr "" +"இப்போது தொகுப்பு வெளியிடப்பட்டுள்ளதால், இறுதி பயனர்கள் தங்கள் பைதான் சூழலில் தொகுப்பை " +"பதிவிறக்கம் செய்து நிறுவலாம். பொதுவாக இது செய்யப்படுகிறது: ref: `பிப்`, போன்ற " +"கட்டளையைப் பயன்படுத்துதல்:" #: ../source/flow.rst:181 msgid "" "End users may also use other tools like :ref:`pipenv`, :ref:`poetry`, or :" "ref:`pdm`." msgstr "" +"இறுதி பயனர்கள் போன்ற பிற கருவிகளையும் பயன்படுத்தலாம்: ref: `pipenv`,: ref:` கவிதை`, " +"அல்லது: ref: `PDM`." #: ../source/glossary.rst:3 msgid "Glossary" -msgstr "" +msgstr "சொற்களஞ்சியம்" #: ../source/glossary.rst:8 msgid "Binary Distribution" -msgstr "" +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 "" +msgstr "பின்தளத்தில் உருவாக்குங்கள்" #: ../source/glossary.rst:17 msgid "" @@ -2501,6 +3929,10 @@ msgid "" "Distribution>` from it. The build is delegated to the backend by a :term:" "`frontend `. All backends offer a standardized interface." msgstr "" +"ஒரு மூல மரத்தை எடுத்து ஒரு நூலகம் ஒரு: காலத்தை உருவாக்குகிறது: `மூல வழங்கல் <மூல " +"வழங்கல் (அல்லது\" SDIST \")>` அல்லது: கால: `கட்டப்பட்ட வழங்கல் <கட்டப்பட்ட விநியோகம்>` " +"அதிலிருந்து. கட்டமைப்பானது பின்தளத்தில் வழங்கப்படுகிறது: கால: `ஃபிரான்டென்ட் <பில்ட் " +"ஃபிரான்டெண்ட்>`. அனைத்து பின்தளத்தில் ஒரு தரப்படுத்தப்பட்ட இடைமுகத்தை வழங்குகிறது." #: ../source/glossary.rst:24 msgid "" @@ -2508,10 +3940,13 @@ msgid "" "hatchling `, :ref:`maturin`, :ref:`meson-python`, :ref:`scikit-build-" "core`, and :ref:`setuptools`." msgstr "" +"பின்தளத்தில் கட்டுவதற்கான எடுத்துக்காட்டுகள்: `ஃபிளிட்ச் ஃபிளிட்-கோர் `,: ref: `அட்ச் " +"அட்ச் அட்ச்லிங் <அட்ச்>`,: குறிப்பு: `மேட்டூரின்`,: குறிப்பு:` மீசன்-பைதான்`,: `ச்கிகிட் -" +"பில்ட்-கோர்`, மற்றும்: குறிப்பு: `செட்ப்டூல்ச்`." #: ../source/glossary.rst:32 msgid "Build Frontend" -msgstr "" +msgstr "முன்பக்கத்தை உருவாக்குங்கள்" #: ../source/glossary.rst:35 msgid "" @@ -2521,14 +3956,18 @@ msgid "" "building is delegated to each source tree's :term:`build backend `." msgstr "" +"தன்னிச்சையான மூல மரங்களை எடுக்கும் பயனர்கள் இயக்கக்கூடிய ஒரு கருவி அல்லது: கால: `மூல " +"வழங்கல் <மூல வழங்கல் (அல்லது\" SDIST \")>` மற்றும் மூல விநியோகங்களை உருவாக்குகிறது " +"அல்லது: கால: `சக்கரங்கள் ` அவர்களிடமிருந்து. உண்மையான கட்டிடம் ஒவ்வொரு மூல " +"மரத்திற்கும் வழங்கப்படுகிறது: சொல்: `பின்தளத்தில் உருவாக்கு <பின்தளத்தில் உருவாக்கு>`." #: ../source/glossary.rst:42 msgid "Examples of build frontends are :ref:`pip` and :ref:`build`." -msgstr "" +msgstr "கட்டிய முன்பக்கங்களின் எடுத்துக்காட்டுகள்: ref: `pip` மற்றும்: ref:` build`." #: ../source/glossary.rst:44 msgid "Built Distribution" -msgstr "" +msgstr "கட்டப்பட்ட வழங்கல்" #: ../source/glossary.rst:47 msgid "" @@ -2541,10 +3980,15 @@ msgid "" "does not include compiled Python files). See :ref:`package-formats` for more " "information." msgstr "" +"ப: கால: `விநியோக <விநியோக தொகுப்பு>` கோப்புகள் மற்றும் மெட்டாடேட்டாவைக் கொண்ட வடிவம், " +"இலக்கு கணினியில் சரியான இடத்திற்கு மட்டுமே நகர்த்தப்பட வேண்டும், நிறுவப்பட வேண்டும். . " +"இந்த வடிவம் பைதான் கோப்புகளை முன்கூட்டியே எண்ண வேண்டும் என்பதை குறிக்கவில்லை (: கால: " +"`சக்கரம்` வேண்டுமென்றே தொகுக்கப்பட்ட பைதான் கோப்புகளை சேர்க்கவில்லை). காண்க: குறிப்பு: " +"மேலும் தகவலுக்கு `தொகுப்பு வடிவங்கள்." #: ../source/glossary.rst:56 msgid "Built Metadata" -msgstr "" +msgstr "மேனிலை தரவு கட்டப்பட்டது" #: ../source/glossary.rst:59 msgid "" @@ -2553,10 +3997,14 @@ msgid "" "Archive` (``PKG-INFO`` in a :term:`Sdist ` and ``METADATA`` in a :term:`Wheel`)." msgstr "" +"கான்கிரீட் படிவம்: கால: `கோர் மெட்டாடேட்டா` ஒரு நிறுவப்பட்ட: கால:` திட்டம்` (`` " +"மெட்டாடேட்டா`` கோப்பு) அல்லது ஒரு: கால: கால: `விநியோக காப்பகம்` (` `பி.கே.சி-" +"இன்ஃபோ`` ஒரு: கால: `Sdist <மூல வழங்கல் (அல்லது\" Sdist \")>` மற்றும் `` " +"மெட்டாடேட்டா`` ஒரு: கால: `சக்கரம்`)." #: ../source/glossary.rst:66 msgid "Core Metadata" -msgstr "" +msgstr "கோர் மேனிலை தரவு" #: ../source/glossary.rst:69 msgid "" @@ -2564,10 +4012,13 @@ msgid "" "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 "" +msgstr "கோர் மேனிலை தரவு புலம்" #: ../source/glossary.rst:77 msgid "" @@ -2576,20 +4027,26 @@ msgid "" "the :term:`Built Metadata`. Notably, distinct from a :term:`Pyproject " "Metadata Key`." msgstr "" +"ஒற்றை விசை-மதிப்பு இணை (அல்லது ஒரே பெயருடன், பல பயன்பாட்டு புலங்களுக்கு) " +"வரையறுக்கப்பட்டுள்ளது: கால: `கோர் மெட்டாடேட்டா` ச்பெக் மற்றும் இல் சேமிக்கப்படுகிறது: கால:" +"` கட்டப்பட்ட மெட்டாடேட்டா`. குறிப்பிடத்தக்க வகையில், A இலிருந்து வேறுபட்டது: கால: " +"`பைபிரெக்ட் மேனிலை தரவு கீ`." #: ../source/glossary.rst:83 msgid "Distribution Archive" -msgstr "" +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 "" +msgstr "விநியோக தொகுப்பு" #: ../source/glossary.rst:92 msgid "" @@ -2598,6 +4055,10 @@ msgid "" "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 "" @@ -2610,20 +4071,29 @@ msgid "" "\"distribution\". See :ref:`distribution-package-vs-import-package` for a " "breakdown of the differences." msgstr "" +"ஒரு விநியோக தொகுப்பு பொதுவாக \"தொகுப்பு\" அல்லது \"வழங்கல்\" என்ற ஒற்றை சொற்களுடன் " +"குறிப்பிடப்படுகிறது, ஆனால் குழப்பத்தைத் தடுக்க கூடுதல் தெளிவு தேவைப்படும்போது இந்த " +"வழிகாட்டி விரிவாக்கப்பட்ட காலத்தைப் பயன்படுத்தலாம்: `இறக்குமதி தொகுப்பு` (இது " +"பொதுவாகவும் பொதுவாகவும் \"தொகுப்பு\" என்று அழைக்கப்படுகிறது) அல்லது மற்றொரு வகையான " +"வழங்கல் (எ.கா. ஒரு லினக்ச் வழங்கல் அல்லது பைதான் மொழி விநியோகம்), அவை பெரும்பாலும் " +"\"வழங்கல்\" என்ற ஒற்றை வார்த்தையுடன் குறிப்பிடப்படுகின்றன. காண்க: குறிப்பு: வேறுபாடுகளின் " +"முறிவுக்கு `விநியோக-பேக்கேச்-விஎச்-பிரசங்க-பேக்கேச்`." #: ../source/glossary.rst:105 msgid "Egg" -msgstr "" +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 "" +"ப: கால: `கட்டப்பட்ட விநியோகம்` வடிவம் அறிமுகப்படுத்தியவர்: குறிப்பு:` செட்டப்டூல்ச்`, இது " +"மாற்றப்பட்டது: கால: `சக்கரம்`. விவரங்களுக்கு, காண்க: ref: `முட்டை வடிவம்`." #: ../source/glossary.rst:111 msgid "Extension Module" -msgstr "" +msgstr "நீட்டிப்பு தொகுதி" #: ../source/glossary.rst:114 msgid "" @@ -2633,16 +4103,23 @@ msgid "" "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 "" +"ப: கால: `தொகுதி` பைதான் அமலாக்கத்தின் குறைந்த அளவிலான மொழியில் எழுதப்பட்டது: " +"பைத்தானுக்கு சி/சி ++, சிதானுக்கு சாவா. பொதுவாக ஒற்றை மாறும் ஏற்றக்கூடிய முன்-" +"தொகுக்கப்பட்ட கோப்பில் உள்ளது, எ.கா. யுனிக்ச் இல் பைதான் நீட்டிப்புகளுக்கான பகிரப்பட்ட பொருள் " +"(.SO) கோப்பு, சாளரங்களில் பைத்தான் நீட்டிப்புகளுக்கான டி.எல்.எல் (.பிடி நீட்டிப்பு " +"கொடுக்கப்பட்டுள்ளது) அல்லது சைத்தான் நீட்டிப்புகளுக்கான சாவா வகுப்பு கோப்பு." #: ../source/glossary.rst:121 msgid "Import Package" -msgstr "" +msgstr "இறக்குமதி தொகுப்பு" #: ../source/glossary.rst:124 msgid "" "A Python module which can contain other modules or recursively, other " "packages." msgstr "" +"ஒரு பைதான் தொகுதி மற்ற தொகுதிகள் அல்லது மீண்டும் மீண்டும், பிற தொகுப்புகளைக் " +"கொண்டிருக்கலாம்." #: ../source/glossary.rst:127 msgid "" @@ -2652,10 +4129,15 @@ msgid "" "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 "" +msgstr "நிறுவப்பட்ட திட்டம்" #: ../source/glossary.rst:136 msgid "" @@ -2663,10 +4145,13 @@ msgid "" "term:`Virtual Environment`, as described in the specicifcation :ref:" "`recording-installed-packages`." msgstr "" +"ஒரு: கால: `திட்டம்` இது ஒரு பைதான் மொழிபெயர்ப்பாளருடன் பயன்படுத்த நிறுவப்பட்டுள்ளது " +"அல்லது: கால:` மெய்நிகர் சூழல்`, விவரக்குறிப்பில் விவரிக்கப்பட்டுள்ளபடி: குறிப்பு: `பதிவு-" +"நிறுவப்பட்ட-தொகுப்புகள்`." #: ../source/glossary.rst:140 msgid "Known Good Set (KGS)" -msgstr "" +msgstr "அறியப்பட்ட நல்ல தொகுப்பு (கிலோ)" #: ../source/glossary.rst:143 msgid "" @@ -2676,51 +4161,120 @@ msgid "" "used by frameworks and toolkits which are comprised of multiple individual " "distributions." msgstr "" +"ஒருவருக்கொருவர் இணக்கமான குறிப்பிட்ட பதிப்புகளில் விநியோகங்களின் தொகுப்பு. பொதுவாக ஒரு " +"சோதனை தொகுப்பு இயக்கப்படும், இது ஒரு குறிப்பிட்ட தொகுப்புகள் அறியப்பட்ட நல்ல தொகுப்பாக " +"அறிவிக்கப்படுவதற்கு முன்பு அனைத்து சோதனைகளையும் கடந்து செல்லும். இந்த சொல் பொதுவாக பல " +"தனிப்பட்ட விநியோகங்களைக் கொண்ட கட்டமைப்புகள் மற்றும் கருவித்தொகுப்புகளால் " +"பயன்படுத்தப்படுகிறது." #: ../source/glossary.rst:149 -msgid "Module" -msgstr "" +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 "" +"ஒரு பைபி ட்ரோவ் வகைப்படுத்தி (AS: Ref: `விவரிக்கப்பட்ட <கோர்-மெட்டாடேட்டா-" +"கிளாசிஃபையர்>` இல்: கால: `கோர் மெட்டாடேட்டா` விவரக்குறிப்பு)` `உரிமம் ::` `உடன் " +"தொடங்குகிறது." + +#: ../source/glossary.rst:157 +msgid "License Expression" +msgstr "உரிம வெளிப்பாடு" + +#: ../source/glossary.rst:158 +msgid "SPDX Expression" +msgstr "SPDX வெளிப்பாடு" + +#: ../source/glossary.rst:161 +msgid "" +"A string with valid SPDX license expression syntax, including one or more " +"SPDX :term:`License Identifier`\\(s), which describes a :term:`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 "" +"ஒன்று அல்லது அதற்கு மேற்பட்ட SPDX உள்ளிட்ட செல்லுபடியாகும் SPDX உரிம வெளிப்பாடு " +"தொடரியல் கொண்ட ஒரு சரம்: சொல்: `உரிம அடையாளங்காட்டி` \\ (கள்), இது ஒரு: காலத்தை " +"விவரிக்கிறது:` திட்டத்தின் உரிமம் (கள்) மற்றும் அவை எவ்வாறு தொடர்புபடுத்தப்படுகின்றன. " +"எடுத்துக்காட்டுகள்: `` gpl-3.0 அல்லது-later``, `` MIT மற்றும் (APACHE-2.0 அல்லது " +"BSD-2-confase) ``" + +#: ../source/glossary.rst:169 +msgid "License Identifier" +msgstr "உரிம அடையாளங்காட்டி" + +#: ../source/glossary.rst:170 +msgid "SPDX Identifier" +msgstr "SPDX அடையாளம் காணவும்" + +#: ../source/glossary.rst:173 +msgid "" +"A valid SPDX short-form license identifier, originally specified in :pep:" +"`639`. This includes all valid SPDX identifiers and the custom ``LicenseRef-" +"[idstring]`` strings conforming to the SPDX specification. Examples: " +"``MIT``, ``GPL-3.0-only``, ``LicenseRef-My-Custom-License``" +msgstr "" +"செல்லுபடியாகும் SPDX குறுகிய வடிவ உரிம அடையாளங்காட்டி, முதலில் குறிப்பிடப்பட்டுள்ளது: " +"PEP: `639`. இதில் அனைத்து செல்லுபடியாகும் SPDX அடையாளங்காட்டிகள் மற்றும் தனிப்பயன் `` " +"LicuenSeref- [idstring] `` SPDX விவரக்குறிப்புக்கு இணங்க சரங்கள் ஆகியவை அடங்கும். " +"எடுத்துக்காட்டுகள்: `` mit``, `` gpl -3.0-lonly``, `` licenseref-my-custom-" +"license``" + +#: ../source/glossary.rst:183 +msgid "Module" +msgstr "தொகுதி" + +#: ../source/glossary.rst:186 +msgid "" "The basic unit of code reusability in Python, existing in one of two types: :" "term:`Pure Module`, or :term:`Extension Module`." msgstr "" +"பைத்தானில் குறியீடு மறுபயன்பாட்டின் அடிப்படை அலகு, இரண்டு வகைகளில் ஒன்றில் உள்ளது :: " +"கால: `தூய தொகுதி`, அல்லது: கால:` நீட்டிப்பு தொகுதி`." -#: ../source/glossary.rst:155 +#: ../source/glossary.rst:189 msgid "Package Index" -msgstr "" +msgstr "தொகுப்பு அட்டவணை" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" +"தானியங்குபடுத்த ஒரு வலை இடைமுகத்துடன் விநியோகங்களின் களஞ்சியம்: சொல்: `தொகுப்பு " +"<விநியோக தொகுப்பு>` கண்டுபிடிப்பு மற்றும் நுகர்வு." -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" -msgstr "" +msgstr "திட்டக் குறியீட்டிற்கு" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../source/glossary.rst:202 ../source/guides/hosting-your-own-index.rst:62 #: ../source/guides/index-mirrors-and-caches.rst:52 msgid "Project" -msgstr "" +msgstr "திட்டம்" -#: ../source/glossary.rst:171 +#: ../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 "" +"ஒரு நூலகம், கட்டமைப்பு, ச்கிரிப்ட், சொருகி, பயன்பாடு அல்லது தரவு அல்லது பிற வளங்களின் " +"சேகரிப்பு அல்லது அதன் சில கலவையானது A: கால: `விநியோக <விநியோக தொகுப்பு>` இல் " +"தொகுக்கப்பட வேண்டும்." -#: ../source/glossary.rst:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2728,49 +4282,67 @@ msgid "" "something that contains a :term:`pyproject.toml`, :term:`setup.py`, or :term:" "`setup.cfg` file at the root of the project source directory." msgstr "" +"பெரும்பாலான திட்டங்கள் உருவாகின்றன: கால: `விநியோகம் <விநியோக தொகுப்பு>` ஒன்றைப் " +"பயன்படுத்துதல்: PEP: `518`` `` பில்ட்-சிச்டம்``,: குறிப்பு: `தொலைதூரங்கள்` அல்லது: ref:" +"` setuptools`, திட்டங்களை வரையறுக்க மற்றொரு நடைமுறை வழி தற்போது ஒரு: கால: " +"`pyproject.toml`,: கால:` setup.py`, அல்லது: கால: `setup.cfg` கோப்பு திட்ட மூல " +"கோப்பகத்தில் உள்ள ஒன்று." -#: ../source/glossary.rst:181 +#: ../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:186 +#: ../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:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" -msgstr "" +msgstr "திட்ட ரூட் அடைவு" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" +"கோப்பு முறைமை அடைவு இதில் A: கால: `திட்டம்` கள்: கால:` மூல மரம் <திட்ட மூல மரம்> " +"`அமைந்துள்ளது." -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" -msgstr "" +msgstr "திட்ட மூல மரம்" -#: ../source/glossary.rst:201 +#: ../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 "" +"A இன் ஆன்-வட்டு வடிவம்: கால: `திட்டம்` அபிவிருத்திக்குப் பயன்படுத்தப்படுகிறது, அதன் மூல " +"மூலக் குறியீட்டைக் கொண்டிருப்பதற்கு முன்பு அதன் மூல மூலக் குறியீட்டைக் கொண்டுள்ளது: கால:` " +"மூல வழங்கல் <மூல வழங்கல் (அல்லது \"SDIST\")> `அல்லது: கால:` கட்டப்பட்டது விநியோகம்`." -#: ../source/glossary.rst:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" -msgstr "" +msgstr "திட்ட மூல மேனிலை தரவு" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2779,22 +4351,29 @@ msgid "" "in a tool-specific format (under the ``[tool]`` table in ``pyproject.toml``, " "or in a tool's own configuration file)." msgstr "" +"ஒரு: கால: `திட்டம்` கள்: கால:` மூல மரம் <திட்ட மூல மரம்> `, மாற்றப்பட வேண்டும்: கால: " +"கால:` கோர் மேனிலை தரவு புலம்` \\ கள்: `கட்டப்பட்டவை திட்டத்தின் மூலம் மெட்டாடேட்டா: கால: " +"`பின்தளத்தில் உருவாக்கு <பின்தளத்தில் உருவாக்கு>`. இவ்வாறு எழுதலாம்: கால: `பைபிரெக்ட் " +"மெட்டாடேட்டா`, அல்லது கருவி-குறிப்பிட்ட வடிவத்தில் (` `[கருவி]` `` pyproject.toml`` " +"அல்லது ஒரு கருவியின் சொந்த உள்ளமைவு கோப்பில்) `` அட்டவணையின் கீழ்)." -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" -msgstr "" +msgstr "தூய தொகுதி" -#: ../source/glossary.rst:223 +#: ../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 "" +"ஒரு: கால: `தொகுதி` பைத்தானில் எழுதப்பட்டு ஒற்றை` .py`` கோப்பில் (மற்றும் தொடர்புடைய " +"`` .பிசி`` மற்றும்/அல்லது `` .பியோ` கோப்புகள்) உள்ளன." -#: ../source/glossary.rst:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" -msgstr "" +msgstr "Pyproject மேனிலை தரவு" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2802,32 +4381,42 @@ msgid "" "a :term:`pyproject.toml` file. Notably, *not* a tool-specific source " "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" +"தி: கால: `திட்ட மூல மெட்டாடேட்டா` வடிவம் வரையறுக்கப்பட்டுள்ளது: ref:` அறிவித்தல்-திட்ட-" +"மெட்டாடேட்டா` விவரக்குறிப்பை அறிவித்தல் மற்றும் முதலில் அறிமுகப்படுத்தப்பட்டது: PEP: " +"`621`, இவ்வாறு சேமிக்கப்படுகிறது:` பைபிரெக்ட் மேனிலை தரவு கீ` \\ கள் `கீழ் `[திட்டம்]` " +"`ஒரு அட்டவணை: கால:` pyproject.toml` கோப்பு. குறிப்பிடத்தக்க வகையில், `` pyproject." +"toml`` இல் `` [கருவி] `` அட்டவணையின் கீழ் ஒரு கருவி-குறிப்பிட்ட மூல மேனிலை தரவு " +"வடிவமைப்பை * அல்ல." -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" -msgstr "" +msgstr "Pyproject Metadata key" -#: ../source/glossary.rst:240 +#: ../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 "" +"`` திட்ட] `` `` pyproject.toml`` இல் ஒரு உயர்மட்ட டாம்ல் விசை; இதன் ஒரு பகுதி: கால: " +"`பைபிரொசெக்ட் மெட்டாடேட்டா`. குறிப்பிடத்தக்க வகையில், A இலிருந்து வேறுபட்டது: கால: " +"`கோர் மேனிலை தரவு புலம்`." -#: ../source/glossary.rst:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" -msgstr "" +msgstr "Pyproject மேனிலை தரவு சப்ச்கி" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" +"அட்டவணை மதிப்பீட்டின் கீழ் இரண்டாவது நிலை டாம்ல் விசை: கால: `பைபிரெக்ட் மேனிலை தரவு கீ`." -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" -msgstr "" +msgstr "பைதான் பேக்கேசிங் ஆணையம் (பைபா)" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2836,61 +4425,79 @@ msgid "" "`_ and " "`the Python Discourse forum `__." msgstr "" +"பைபா என்பது பைதான் பேக்கேசிங்கில் தொடர்புடைய பல திட்டங்களை பராமரிக்கும் ஒரு பணிக்குழு " +"ஆகும். அவர்கள் ஒரு தளத்தை பராமரிக்கின்றனர்: doc: `pypa.io `, `github " +"` _ மற்றும் `பிட்பக்கெட் " +"`_, மற்றும்` டிச்டிடில்ச்-சிக் அஞ்சல் பட்டியலில் உள்ள சிக்கல்களைப் பற்றி விவாதிக்கவும் //" +"discuss.python.org/c/packaging>`__." -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" -msgstr "" +msgstr "பைதான் தொகுப்பு அட்டவணை (PYPI)" -#: ../source/glossary.rst:265 +#: ../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 "" +"`Pypi ` _ என்பது இயல்புநிலை: சொல்: பைதான் சமூகத்திற்கான `தொகுப்பு " +"குறியீடு`. அனைத்து பைதான் டெவலப்பர்களுக்கும் அவர்களின் விநியோகங்களை உட்கொள்வதற்கும் " +"விநியோகிப்பதற்கும் இது திறந்திருக்கும்." -#: ../source/glossary.rst:268 +#: ../source/glossary.rst:302 msgid "pypi.org" -msgstr "" +msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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 "" +"`pypi.org ` _ என்பது டொமைன் பெயர்: கால: `பைதான் தொகுப்பு அட்டவணை " +"(PYPI)`. இது 2017 ஆம் ஆண்டில் மரபு குறியீட்டு டொமைன் பெயரை மாற்றியது, `` pypi." +"python.org``. இது இயக்கப்படுகிறது: ref: `கிடங்கு`." -#: ../source/glossary.rst:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" -msgstr "" +msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" +"கருவி-அம்போச்டிக்: கால: `திட்டம்` விவரக்குறிப்பு கோப்பு. வரையறுக்கப்பட்டுள்ளது: PEP: " +"`518`." -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" -msgstr "" +msgstr "வெளியீடு" -#: ../source/glossary.rst:283 +#: ../source/glossary.rst:317 msgid "" "A snapshot of a :term:`Project` at a particular point in time, denoted by a " "version identifier." msgstr "" +"A இன் ச்னாப்சாட்: கால: `திட்டம்` ஒரு குறிப்பிட்ட கட்டத்தில், பதிப்பு அடையாளங்காட்டியால் " +"குறிக்கப்படுகிறது." -#: ../source/glossary.rst:286 +#: ../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 "" +"வெளியீட்டை உருவாக்குவது பல: கால: `விநியோகம் <விநியோக தொகுப்பு>` வெளியீட்டைக் " +"கொண்டிருக்கலாம். எடுத்துக்காட்டாக, ஒரு திட்டத்தின் பதிப்பு 1.0 வெளியிடப்பட்டால், அது ஒரு " +"மூல விநியோக வடிவம் மற்றும் சாளரங்கள் நிறுவி விநியோக வடிவத்தில் கிடைக்கக்கூடும்." -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" -msgstr "" +msgstr "தேவை" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2898,62 +4505,104 @@ msgid "" "considered a \"requirement\". For more information, see the :ref:`pip:pip " "install` reference." msgstr "" +"ஒரு விவரக்குறிப்பு ஒரு: கால: `தொகுப்பு <விநியோக தொகுப்பு>` நிறுவப்பட வேண்டும். . " +"மேலும் தகவலுக்கு, பார்க்க: ref: `PIP: PIP INSTALL` குறிப்பு." -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" -msgstr "" +msgstr "தேவை விவரக்குறிப்பு" -#: ../source/glossary.rst:303 +#: ../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 "" +"பயன்படுத்திய ஒரு வடிவம்: ref: `பிப்` ஒரு: கால:` தொகுப்பு குறியீட்டு` இலிருந்து " +"தொகுப்புகளை நிறுவ. வடிவமைப்பின் ஈபிஎன்எஃப் வரைபடத்திற்கு, காண்க: குறிப்பு: `சார்பு-" +"விவரக்குறிப்புகள்`. எடுத்துக்காட்டாக, \"FOO> = 1.3\" என்பது ஒரு தேவை " +"விவரக்குறிப்பாகும், அங்கு \"FOO\" என்பது திட்ட பெயர், மற்றும் \"> = 1.3\" பகுதி: கால: " +"`பதிப்பு விவரக்குறிப்பு`" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" -msgstr "" +msgstr "தேவைகள் கோப்பு" -#: ../source/glossary.rst:311 +#: ../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:315 +"ஒரு பட்டியலைக் கொண்ட ஒரு கோப்பு: கால: `தேவைகள் <தேவை>` அதைப் பயன்படுத்தி நிறுவலாம்: " +"குறிப்பு: `பிப்`. மேலும் தகவலுக்கு, பார்க்க: ref: `பிப்` டாக்ச் ஆன்: குறிப்பு:` பிப்: " +"தேவைகள் கோப்புகள்`." + +#: ../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 "" +"எந்த உரிமக் கோப்புகள் ஒரு: கால: `திட்ட மூல மரம்`,: கால:` விநியோக காப்பகம்` அல்லது: " +"கால: `நிறுவப்பட்ட திட்டம்` என்ற கோப்பகத்தின் கீழ் உள்ள அடைவு. ஒரு: கால: `திட்ட மூல மரம்` " +"அல்லது: கால:` மூல வழங்கல் (அல்லது \"SDIST\") `, இது: கால:` திட்ட ரூட் அடைவு`. ஒரு: " +"காலத்திற்கு: `கட்டப்பட்ட விநியோகம்` அல்லது: கால:` நிறுவப்பட்ட திட்டம்`, இது: கோப்பு: `." +"டிச்ட்-இன்ஃபோ/உரிமங்கள்/முறையே சக்கர காப்பகம் அல்லது திட்ட கோப்புறையின் அடைவு. மேலும், `` " +"உரிம-கோப்பு``: கால: `கோர் மேனிலை தரவு புலம்` இல் பதிவு செய்யப்பட்ட பாதைகள் " +"தொடர்புடையவை." + +#: ../source/glossary.rst:366 #: ../source/guides/distributing-packages-using-setuptools.rst:59 msgid "setup.py" -msgstr "" +msgstr "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" -msgstr "" +msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" +"இதற்கான திட்ட விவரக்குறிப்பு கோப்புகள்: ref: `distutils` மற்றும்: ref:` setuptools`. " +"மேலும் காண்க: கால: `pyproject.toml`." -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" -msgstr "" +msgstr "மூல காப்பகம்" -#: ../source/glossary.rst:325 +#: ../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 "" +"A: காலத்திற்கான மூல மூலக் குறியீட்டைக் கொண்ட ஒரு காப்பகம்: `வெளியீடு`, ஒரு " +"உருவாக்குவதற்கு முன்: கால:` மூல வழங்கல் <மூல வழங்கல் (அல்லது \"SDIST\")> `அல்லது: கால:" +"` கட்டப்பட்ட விநியோகம்`." -#: ../source/glossary.rst:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" -msgstr "" +msgstr "மூல வழங்கல் (அல்லது \"SDIST\")" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2961,22 +4610,29 @@ msgid "" "generating a :term:`Built Distribution`. See :ref:`package-formats` for more " "information." msgstr "" +"ப: கால: `விநியோகம் <விநியோக காப்பகம்>` வடிவம் (வழக்கமாக `` பைதான் -எம் பில்ட் - -" +"ச்டிச்ட்`` ஐப் பயன்படுத்தி உருவாக்கப்படுகிறது) இது மெட்டாடேட்டாவையும் ஒரு கருவியால் " +"நிறுவ தேவையான அத்தியாவசிய மூல கோப்புகளையும் வழங்குகிறது: re: `பிப்`, அல்லது " +"உருவாக்க ஒரு: கால: `கட்டப்பட்ட விநியோகம்`. காண்க: குறிப்பு: மேலும் தகவலுக்கு `தொகுப்பு " +"வடிவங்கள்." -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" -msgstr "" +msgstr "கணினி தொகுப்பு" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." msgstr "" +"இயக்க முறைமைக்கு சொந்தமான வடிவத்தில் வழங்கப்பட்ட ஒரு தொகுப்பு, எ.கா. ஒரு RPM அல்லது " +"DPKG கோப்பு." -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" -msgstr "" +msgstr "பதிப்பு விவரக்குறிப்பு" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2984,60 +4640,76 @@ msgid "" "that Python packaging currently supports. Support for this specification " "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" +"A இன் பதிப்பு கூறு: கால: `தேவை விவரக்குறிப்பு`. எடுத்துக்காட்டாக, \"FOO> = 1.3\" இன் " +"\"> = 1.3\" பகுதி. படிக்கவும்: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-" +"விவரக்குறிப்புகள்>` பைதான் பேக்கேசிங் தற்போது ஆதரிக்கும் குறிப்பிட்ட விவரக்குறிப்பாளர்களின் " +"முழு விளக்கத்திற்கு. இந்த விவரக்குறிப்பிற்கான உதவி இதில் செயல்படுத்தப்பட்டது: குறிப்பு: " +"`setuptools` v8.0 மற்றும்: Ref:` Pip` v6.0." -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" -msgstr "" +msgstr "மெய்நிகர் சூழல்" -#: ../source/glossary.rst:355 +#: ../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 "" +"கணினி அகலமாக நிறுவப்படுவதை விட, ஒரு குறிப்பிட்ட பயன்பாட்டால் பயன்படுத்த தொகுப்புகளை " +"நிறுவ அனுமதிக்கும் ஒரு தனிமைப்படுத்தப்பட்ட பைதான் சூழல். மேலும் தகவலுக்கு, பகுதியைப் " +"பார்க்கவும்: ref: `மெய்நிகர் சூழல்களை உருவாக்குதல் மற்றும் பயன்படுத்துதல்`." -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" -msgstr "" +msgstr "சக்கர வடிவம்" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" -msgstr "" +msgstr "சக்கரம்" -#: ../source/glossary.rst:364 +#: ../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 "" +"தரநிலை: சொல்: `கட்டப்பட்ட விநியோகம்` வடிவம் முதலில் அறிமுகப்படுத்தப்பட்டது: PEP:` 427` " +"மற்றும் வரையறுக்கப்பட்டுள்ளது: ref: `பைனரி-விநியோக வடிவ விவரங்கள்` விவரக்குறிப்பு. " +"காண்க: குறிப்பு: மேலும் தகவலுக்கு `தொகுப்பு வடிவங்கள். அதன் குறிப்பு செயல்படுத்தலுடன் " +"குழப்பமடையக்கூடாது, தி: கால: `சக்கர திட்டம்`." -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" -msgstr "" +msgstr "சக்கர திட்டம்" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" +"பைபா குறிப்பு செயல்படுத்தல்: கால: `சக்கர வடிவமைப்பு`; காண்க: குறிப்பு: `சக்கரம்`." -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" -msgstr "" +msgstr "வேலை தொகுப்பு" -#: ../source/glossary.rst:379 +#: ../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 "" +"ஒரு தொகுப்பு: கால: `விநியோகம் <விநியோக தொகுப்பு>` இறக்குமதி செய்ய கிடைக்கிறது. " +"`Sys.path` மாறியில் இருக்கும் விநியோகங்கள் இவை. அதிகபட்சம், ஒன்று: சொல்: `விநியோக " +"<விநியோக தொகுப்பு>` ஒரு திட்டத்திற்கு வேலை செய்யும் தொகுப்பில் சாத்தியமாகும்." #: ../source/guides/analyzing-pypi-package-downloads.rst:5 msgid "Analyzing PyPI package downloads" -msgstr "" +msgstr "PYPI தொகுப்பு பதிவிறக்கங்களை பகுப்பாய்வு செய்தல்" #: ../source/guides/analyzing-pypi-package-downloads.rst:7 msgid "" @@ -3046,15 +4718,19 @@ msgid "" "example, you can use it to discover the distribution of Python versions used " "to download a package." msgstr "" +"PYPI இல் புரவலன் செய்யப்பட்ட ஒரு தொகுப்பின் (அல்லது தொகுப்புகள்) பதிவிறக்கங்களைப் பற்றி " +"மேலும் அறிய பொது PYPI பதிவிறக்க புள்ளிவிவர தரவுத்தொகுப்பை எவ்வாறு பயன்படுத்துவது " +"என்பதை இந்த பிரிவு உள்ளடக்கியது. எடுத்துக்காட்டாக, ஒரு தொகுப்பைப் பதிவிறக்குவதற்குப் " +"பயன்படுத்தப்படும் பைதான் பதிப்புகளின் விநியோகத்தைக் கண்டறிய இதைப் பயன்படுத்தலாம்." #: ../source/guides/analyzing-pypi-package-downloads.rst:14 #: ../source/guides/supporting-windows-using-appveyor.rst:17 msgid "Background" -msgstr "" +msgstr "பின்னணி" #: ../source/guides/analyzing-pypi-package-downloads.rst:16 msgid "PyPI does not display download statistics for a number of reasons: [#]_" -msgstr "" +msgstr "பல காரணங்களுக்காக பதிவிறக்க புள்ளிவிவரங்களை PYPI காட்டாது: [#] _" #: ../source/guides/analyzing-pypi-package-downloads.rst:18 msgid "" @@ -3063,35 +4739,45 @@ msgid "" "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 "" +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 "" +msgstr "PYPI இல் புரவலன் செய்யப்படாத தொகுப்புகள் (ஒப்பீடுகளுக்காக)" #: ../source/guides/analyzing-pypi-package-downloads.rst:29 msgid "" "Unofficial scripts or attempts at download count inflation (raises download " "counts)" msgstr "" +"அதிகாரப்பூர்வமற்ற ச்கிரிப்ட்கள் அல்லது பதிவிறக்க எண்ணிக்கையிலான பணவீக்கத்திற்கான முயற்சிகள் " +"(பதிவிறக்க எண்ணிக்கையை உயர்த்தும்)" #: ../source/guides/analyzing-pypi-package-downloads.rst:31 msgid "Known historical data quality issues (lowers download counts)" -msgstr "" +msgstr "அறியப்பட்ட வரலாற்று தரவு தர சிக்கல்கள் (பதிவிறக்க எண்ணிக்கையை குறைக்கிறது)" #: ../source/guides/analyzing-pypi-package-downloads.rst:33 msgid "" @@ -3099,6 +4785,9 @@ msgid "" "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 "" @@ -3106,10 +4795,13 @@ msgid "" "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 "" +msgstr "பொது தரவுத்தொகுப்பு" #: ../source/guides/analyzing-pypi-package-downloads.rst:44 msgid "" @@ -3117,10 +4809,13 @@ msgid "" "cloud-function/>`__ 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 "" +msgstr "அமைக்கப்படுகிறது" #: ../source/guides/analyzing-pypi-package-downloads.rst:51 msgid "" @@ -3131,20 +4826,27 @@ msgid "" "`__" msgstr "" +"`பொது PYPI பதிவிறக்க புள்ளிவிவரங்கள் தரவுத்தொகுப்பு`_ ஐ வினவ` Google bigquery`_ ஐப் " +"பயன்படுத்த, உங்களுக்கு Google கணக்கு தேவை மற்றும் Google முகில் இயங்குதள திட்டத்தில் " +"பெரிய பநிஇ ஐ இயக்க வேண்டும். கடன் அட்டை இல்லாமல் பிக்வரி இலவச அடுக்கைப் பயன்படுத்தி " +"மாதத்திற்கு 1TB வினவல்கள் வரை இயக்கலாம் `__" #: ../source/guides/analyzing-pypi-package-downloads.rst:57 msgid "Navigate to the `BigQuery web UI`_." -msgstr "" +msgstr "`பெரிய வலை UI`_ க்கு செல்லவும்." #: ../source/guides/analyzing-pypi-package-downloads.rst:58 msgid "Create a new project." -msgstr "" +msgstr "புதிய திட்டத்தை உருவாக்கவும்." #: ../source/guides/analyzing-pypi-package-downloads.rst:59 msgid "" "Enable the `BigQuery API `__." msgstr "" +"`BigQuery பநிஇ __." #: ../source/guides/analyzing-pypi-package-downloads.rst:62 msgid "" @@ -3152,10 +4854,13 @@ msgid "" "out the `BigQuery quickstart guide `__." msgstr "" +"பிக்வெரியுடன் எவ்வாறு தொடங்குவது என்பது குறித்த விரிவான வழிமுறைகளுக்கு, `பிக்வெரி " +"குயிக்ச்டார்ட் வழிகாட்டி ____." #: ../source/guides/analyzing-pypi-package-downloads.rst:68 msgid "Data schema" -msgstr "" +msgstr "தரவுத் திட்டம்" #: ../source/guides/analyzing-pypi-package-downloads.rst:70 msgid "" @@ -3165,24 +4870,30 @@ msgid "" "schema `__ include:" msgstr "" +"ஒவ்வொரு பதிவிறக்கத்திற்கும் `` BigQuery-public-data.pypi.file_downloads`` " +"அட்டவணையில் ஒரு பதிவை லைன்ஆல் எழுதுகிறார். எந்த கோப்பு பதிவிறக்கம் செய்யப்பட்டது, அது " +"எவ்வாறு பதிவிறக்கம் செய்யப்பட்டது என்பது பற்றிய தகவல்கள் அட்டவணையில் உள்ளன. `அட்டவணை ச்கீமா " +" __ இல் இருந்து சில பயனுள்ள நெடுவரிசைகள்:" +"` __" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 msgid "Column" -msgstr "" +msgstr "நெடுவரிசை" #: ../source/guides/analyzing-pypi-package-downloads.rst:77 #: ../source/specifications/core-metadata.rst:194 #: ../source/specifications/well-known-project-urls.rst:106 msgid "Description" -msgstr "" +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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" -msgstr "" +msgstr "எடுத்துக்காட்டுகள்" #: ../source/guides/analyzing-pypi-package-downloads.rst:79 msgid "timestamp" @@ -3190,7 +4901,7 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:79 msgid "Date and time" -msgstr "" +msgstr "தேதி மற்றும் நேரம்" #: ../source/guides/analyzing-pypi-package-downloads.rst:79 msgid "``2020-03-09 00:33:03 UTC``" @@ -3202,7 +4913,7 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:81 msgid "Project name" -msgstr "" +msgstr "திட்ட பெயர்" #: ../source/guides/analyzing-pypi-package-downloads.rst:81 msgid "``pipenv``, ``nose``" @@ -3214,7 +4925,7 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:83 msgid "Package version" -msgstr "" +msgstr "தொகுப்பு பதிப்பு" #: ../source/guides/analyzing-pypi-package-downloads.rst:83 msgid "``0.1.6``, ``1.4.2``" @@ -3226,11 +4937,11 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:85 msgid "Installer" -msgstr "" +msgstr "நிறுவி" #: ../source/guides/analyzing-pypi-package-downloads.rst:85 msgid "pip, :ref:`bandersnatch`" -msgstr "" +msgstr "பிப்,: ref: `bandersnatch`" #: ../source/guides/analyzing-pypi-package-downloads.rst:87 msgid "details.python" @@ -3238,7 +4949,7 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:87 msgid "Python version" -msgstr "" +msgstr "பைதான் பதிப்பு" #: ../source/guides/analyzing-pypi-package-downloads.rst:87 msgid "``2.7.12``, ``3.6.4``" @@ -3246,13 +4957,14 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:92 msgid "Useful queries" -msgstr "" +msgstr "பயனுள்ள வினவல்கள்" #: ../source/guides/analyzing-pypi-package-downloads.rst:94 msgid "" "Run queries in the `BigQuery web UI`_ by clicking the \"Compose query\" " "button." msgstr "" +"\"வினவல்\" பொத்தானைக் சொடுக்கு செய்வதன் மூலம் `பிக்வெரி வலை UI`_ இல் வினவல்களை இயக்கவும்." #: ../source/guides/analyzing-pypi-package-downloads.rst:96 msgid "" @@ -3260,16 +4972,22 @@ msgid "" "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 "" +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 @@ -3287,6 +5005,8 @@ msgid "" "To count downloads from pip only, filter on the ``details.installer.name`` " "column." msgstr "" +"PIP இலிருந்து பதிவிறக்கங்களை மட்டும் எண்ணுவதற்கு, `` விவரங்கள்.இன்ச்டாலர்.நாம்`` " +"நெடுவரிசையில் வடிகட்டவும்." #: ../source/guides/analyzing-pypi-package-downloads.rst:141 msgid "24334215" @@ -3294,13 +5014,15 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:145 msgid "Package downloads over time" -msgstr "" +msgstr "தொகுப்பு காலப்போக்கில் பதிவிறக்குகிறது" #: ../source/guides/analyzing-pypi-package-downloads.rst:147 msgid "" "To group by monthly downloads, use the ``TIMESTAMP_TRUNC`` function. Also " "filtering by this column reduces corresponding costs." msgstr "" +"மாதாந்திர பதிவிறக்கங்கள் மூலம் குழுவாக, `` TimeStamp_Trunc`` செயல்பாட்டைப் " +"பயன்படுத்தவும். இந்த நெடுவரிசை மூலம் வடிகட்டுவது தொடர்புடைய செலவுகளைக் குறைக்கிறது." #: ../source/guides/analyzing-pypi-package-downloads.rst:167 msgid "month" @@ -3308,7 +5030,7 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:169 msgid "1956741" -msgstr "" +msgstr "1956741" #: ../source/guides/analyzing-pypi-package-downloads.rst:169 msgid "2018-01-01" @@ -3316,89 +5038,91 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:171 msgid "2344692" -msgstr "" +msgstr "2344692" #: ../source/guides/analyzing-pypi-package-downloads.rst:171 msgid "2017-12-01" -msgstr "" +msgstr "2017-12-01" #: ../source/guides/analyzing-pypi-package-downloads.rst:173 msgid "1730398" -msgstr "" +msgstr "1730398" #: ../source/guides/analyzing-pypi-package-downloads.rst:173 msgid "2017-11-01" -msgstr "" +msgstr "2017-11-01" #: ../source/guides/analyzing-pypi-package-downloads.rst:175 msgid "2047310" -msgstr "" +msgstr "2047310" #: ../source/guides/analyzing-pypi-package-downloads.rst:175 msgid "2017-10-01" -msgstr "" +msgstr "2017-10-01" #: ../source/guides/analyzing-pypi-package-downloads.rst:177 msgid "1744443" -msgstr "" +msgstr "1744443" #: ../source/guides/analyzing-pypi-package-downloads.rst:177 msgid "2017-09-01" -msgstr "" +msgstr "2017-09-01" #: ../source/guides/analyzing-pypi-package-downloads.rst:179 msgid "1916952" -msgstr "" +msgstr "1916952" #: ../source/guides/analyzing-pypi-package-downloads.rst:179 msgid "2017-08-01" -msgstr "" +msgstr "2017-08-01" #: ../source/guides/analyzing-pypi-package-downloads.rst:183 msgid "Python versions over time" -msgstr "" +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 "" +"`` விவரங்கள் .பிதான்` நெடுவரிசையில் இருந்து பைதான் பதிப்பை பிரித்தெடுக்கவும். " +"எச்சரிக்கை: இந்த வினவல் 500 சிபி தரவை செயலாக்குகிறது." #: ../source/guides/analyzing-pypi-package-downloads.rst:204 msgid "python" -msgstr "" +msgstr "பைதான்" #: ../source/guides/analyzing-pypi-package-downloads.rst:206 msgid "3.7" -msgstr "" +msgstr "3.7" #: ../source/guides/analyzing-pypi-package-downloads.rst:206 msgid "18051328726" -msgstr "" +msgstr "18051328726" #: ../source/guides/analyzing-pypi-package-downloads.rst:208 msgid "3.6" -msgstr "" +msgstr "3.6" #: ../source/guides/analyzing-pypi-package-downloads.rst:208 msgid "9635067203" -msgstr "" +msgstr "9635067203" #: ../source/guides/analyzing-pypi-package-downloads.rst:210 msgid "3.8" -msgstr "" +msgstr "3.8" #: ../source/guides/analyzing-pypi-package-downloads.rst:210 msgid "7781904681" -msgstr "" +msgstr "7781904681" #: ../source/guides/analyzing-pypi-package-downloads.rst:212 msgid "2.7" -msgstr "" +msgstr "2.7" #: ../source/guides/analyzing-pypi-package-downloads.rst:212 msgid "6381252241" -msgstr "" +msgstr "6381252241" #: ../source/guides/analyzing-pypi-package-downloads.rst:214 msgid "null" @@ -3406,19 +5130,19 @@ msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:214 msgid "2026630299" -msgstr "" +msgstr "2026630299" #: ../source/guides/analyzing-pypi-package-downloads.rst:216 msgid "3.5" -msgstr "" +msgstr "3.5" #: ../source/guides/analyzing-pypi-package-downloads.rst:216 msgid "1894153540" -msgstr "" +msgstr "1894153540" #: ../source/guides/analyzing-pypi-package-downloads.rst:221 msgid "Getting absolute links to artifacts" -msgstr "" +msgstr "கலைப்பொருட்களுக்கு முழுமையான இணைப்புகளைப் பெறுதல்" #: ../source/guides/analyzing-pypi-package-downloads.rst:223 msgid "" @@ -3427,16 +5151,23 @@ msgid "" "release has been deleted from PyPI. The metadata table includes the ``path`` " "column, which includes the hash and artifact filename." msgstr "" +"அவற்றின் ஆச்களின் அடிப்படையில் PYPI இலிருந்து கலைப்பொருட்களைப் பதிவிறக்குவதற்கான " +"முழுமையான இணைப்புகளைப் பெறுவது சில நேரங்களில் உதவியாக இருக்கும், எ.கா. ஒரு " +"குறிப்பிட்ட திட்டம் அல்லது வெளியீடு PYPI இலிருந்து நீக்கப்பட்டிருந்தால். மேனிலை தரவு " +"அட்டவணையில் `` பாதை`` நெடுவரிசையை உள்ளடக்கியது, இதில் ஆச் மற்றும் கலைப்பொருள் கோப்பு " +"பெயர் அடங்கும்." #: ../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 "" +"இங்கே உருவாக்கப்படும் முகவரி நிலையானது என்று பொறுப்பு அளிக்கப்படவில்லை, ஆனால் தற்போது " +"PYPI கலைப்பொருட்கள் புரவலன் செய்யப்படும் முகவரி உடன் ஒத்துப்போகிறது." #: ../source/guides/analyzing-pypi-package-downloads.rst:242 msgid "url" -msgstr "" +msgstr "முகவரி" #: ../source/guides/analyzing-pypi-package-downloads.rst:244 msgid "" @@ -3444,6 +5175,9 @@ msgid "" "eb/45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/" "sampleproject-1.2.0.tar.gz" msgstr "" +"https://files.pythonhosted.org/packages/" +"eb/45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/" +"sampleproject-1.2.0.tar.gz" #: ../source/guides/analyzing-pypi-package-downloads.rst:246 msgid "" @@ -3451,13 +5185,19 @@ msgid "" "packages/56/0a/178e8bbb585ec5b13af42dae48b1d7425d6575b3ff9b02e5ec475e38e1d6/" "sampleproject_nomura-1.2.0-py2.py3-none-any.whl" msgstr "" +"https://files.pythonhosted.org/" +"packages/56/0a/178e8bbb585ec5b13af42dae48b1d7425d6575b3ff9b02e5ec475e38e1d6/" +"sampleproject_nomura-1.2.0-py2.py3-none-any.whl" #: ../source/guides/analyzing-pypi-package-downloads.rst:248 msgid "" "https://files.pythonhosted.org/" "packages/63/88/3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/" "sampleproject_nomura-1.2.0.tar.gz" -msgstr "" +msgstr "" +"https://files.pythonhosted.org/" +"packages/63/88/3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/" +"sampleproject_nomura-1.2.0.tar.gz" #: ../source/guides/analyzing-pypi-package-downloads.rst:250 msgid "" @@ -3465,6 +5205,9 @@ msgid "" "e9/2743311822e71c0756394b6c5ab15cb64ca66c78c6c6a5cd872c9ed33154/" "sampleproject_doubleyoung18-1.3.0-py2.py3-none-any.whl" msgstr "" +"https://files.pythonhosted.org/packages/21/" +"e9/2743311822e71c0756394b6c5ab15cb64ca66c78c6c6a5cd872c9ed33154/" +"sampleproject_doubleyoung18-1.3.0-py2.py3-none-any.whl" #: ../source/guides/analyzing-pypi-package-downloads.rst:252 msgid "" @@ -3472,10 +5215,13 @@ msgid "" "packages/6f/5b/2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/" "sampleproject-1.3.1.tar.gz" msgstr "" +"https://files.pythonhosted.org/" +"packages/6f/5b/2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/" +"sampleproject-1.3.1.tar.gz" #: ../source/guides/analyzing-pypi-package-downloads.rst:257 msgid "Caveats" -msgstr "" +msgstr "எச்சரிக்கைகள்" #: ../source/guides/analyzing-pypi-package-downloads.rst:259 msgid "" @@ -3485,20 +5231,27 @@ msgid "" "accurate (e.g. the percentage of Python 2 vs. Python 3 downloads) but total " "numbers are lower than actual by an order of magnitude." msgstr "" +"மேலே உள்ள பின்னணியில் பட்டியலிடப்பட்ட எச்சரிக்கைகளுக்கு மேலதிகமாக, லைன்ஆல் ஒரு பிழையால் " +"பாதிக்கப்பட்டார், இது சூலை 26, 2018 க்கு முன்னர் பதிவிறக்க புள்ளிவிவரங்களை கணிசமாகக் " +"கூறியது. இந்த தேதிக்கு முந்தைய பதிவிறக்கங்கள் விகிதாசாரமாக துல்லியமானவை (எ.கா. " +"பைதான் 2 வெர்சச் பைத்தானின் விழுக்காடு 3 பதிவிறக்கங்கள்) ஆனால் மொத்த எண்கள் அளவின் " +"வரிசையால் உண்மையானதை விட குறைவாக உள்ளன." #: ../source/guides/analyzing-pypi-package-downloads.rst:267 msgid "Additional tools" -msgstr "" +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 "" +msgstr "`` Google-Cloud-bigquery``" #: ../source/guides/analyzing-pypi-package-downloads.rst:275 msgid "" @@ -3506,10 +5259,13 @@ msgid "" "programmatically via the BigQuery API and the `google-cloud-bigquery`_ " "project, the official Python client library for BigQuery." msgstr "" +"பிக்வெரி பநிஇ மற்றும் பிக்வரிக்கான அதிகாரப்பூர்வ பைதான் கிளையன்ட் நூலகமான `கூகிள்-" +"கிளவுட்-பிக்வரி`_ திட்டத்தின் வழியாக பொது PYPI பதிவிறக்க புள்ளிவிவர தரவுத்தொகுப்பை " +"நிரல் முறையில் அணுகலாம்." #: ../source/guides/analyzing-pypi-package-downloads.rst:303 msgid "``pypinfo``" -msgstr "" +msgstr "`` பைபின்ஃபோ``" #: ../source/guides/analyzing-pypi-package-downloads.rst:305 msgid "" @@ -3517,44 +5273,53 @@ msgid "" "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 "" +msgstr "PIP ஐப் பயன்படுத்தி `pypinfo`_ ஐ நிறுவவும்." #: ../source/guides/analyzing-pypi-package-downloads.rst:315 msgid "Usage:" -msgstr "" +msgstr "பயன்பாடு:" #: ../source/guides/analyzing-pypi-package-downloads.rst:331 msgid "``pandas-gbq``" -msgstr "" +msgstr "`Panak-gbq``." #: ../source/guides/analyzing-pypi-package-downloads.rst:333 msgid "" "The `pandas-gbq`_ project allows for accessing query results via `Pandas`_." msgstr "" +"`பாண்டாச்-GBQ`_ திட்டம்` பாண்டாச்`_ வழியாக வினவல் முடிவுகளை அணுக அனுமதிக்கிறது." #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" -msgstr "" +msgstr "குறிப்புகள்" #: ../source/guides/analyzing-pypi-package-downloads.rst:339 msgid "" "`PyPI Download Counts deprecation email `__" msgstr "" +"`Pypi பதிவிறக்கம் எண்ணிக்கைகள் தேய்மான மின்னஞ்சல் ____ __ __" #: ../source/guides/analyzing-pypi-package-downloads.rst:340 msgid "" "`PyPI BigQuery dataset announcement email `__" msgstr "" +"`Pypi bigquery தரவுத்தொகுப்பு அறிவிப்பு மின்னஞ்சல் ` __ __ __" #: ../source/guides/creating-and-discovering-plugins.rst:3 msgid "Creating and discovering plugins" -msgstr "" +msgstr "செருகுநிரல்களை உருவாக்கி கண்டுபிடிப்பது" #: ../source/guides/creating-and-discovering-plugins.rst:5 msgid "" @@ -3563,26 +5328,30 @@ msgid "" "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 "" +msgstr "தானியங்கி சொருகி கண்டுபிடிப்பை செய்வதற்கு மூன்று முக்கிய அணுகுமுறைகள் உள்ளன:" #: ../source/guides/creating-and-discovering-plugins.rst:12 msgid "`Using naming convention`_." -msgstr "" +msgstr "`பெயரிடும் மாநாட்டைப் பயன்படுத்துதல்`_." #: ../source/guides/creating-and-discovering-plugins.rst:13 msgid "`Using namespace packages`_." -msgstr "" +msgstr "`பெயர்வெளி தொகுப்புகளைப் பயன்படுத்துதல்`_." #: ../source/guides/creating-and-discovering-plugins.rst:14 msgid "`Using package metadata`_." -msgstr "" +msgstr "`தொகுப்பு மெட்டாடேட்டா`_ ஐப் பயன்படுத்துதல்." #: ../source/guides/creating-and-discovering-plugins.rst:18 msgid "Using naming convention" -msgstr "" +msgstr "பெயரிடும் மாநாட்டைப் பயன்படுத்துதல்" #: ../source/guides/creating-and-discovering-plugins.rst:20 msgid "" @@ -3592,12 +5361,19 @@ msgid "" "uses the naming convention ``flask_{plugin_name}``. If you wanted to " "automatically discover all of the Flask plugins installed:" msgstr "" +"உங்கள் பயன்பாட்டிற்கான அனைத்து செருகுநிரல்களும் ஒரே பெயரிடும் மாநாட்டைப் பின்பற்றினால், " +"நீங்கள் பயன்படுத்தலாம்: func: `pkgutil.iter_modules` பெயரிடும் மாநாட்டுடன் " +"பொருந்தக்கூடிய அனைத்து உயர்மட்ட தொகுதிகள் அனைத்தையும் கண்டறிய. எடுத்துக்காட்டாக, " +"`பிளாச்க்`_ பெயரிடும் மாநாட்டை` `பிளாச்க்_ {plugin_name}` `பயன்படுத்துகிறது. " +"நிறுவப்பட்ட அனைத்து பிளாச்க் செருகுநிரல்களையும் தானாகவே கண்டுபிடிக்க விரும்பினால்:" #: ../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 "" @@ -3605,10 +5381,13 @@ msgid "" "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 "" +msgstr "பெயர்வெளி தொகுப்புகளைப் பயன்படுத்துதல்" #: ../source/guides/creating-and-discovering-plugins.rst:60 msgid "" @@ -3620,6 +5399,11 @@ msgid "" "installed, you can use :func:`pkgutil.iter_modules` to discover all modules " "and packages installed under that namespace:" msgstr "" +". எடுத்துக்காட்டாக, நீங்கள் `` myapp.plugins`` ஒரு பெயர்வெளி தொகுப்பை உருவாக்கினால், " +"பிற: கால: `விநியோகம் <விநியோக தொகுப்பு>` அந்த பெயர்வெளியில் தொகுதிகள் மற்றும் " +"தொகுப்புகளை வழங்க முடியும். நிறுவியதும், நீங்கள் பயன்படுத்தலாம்: func: `pkgutil." +"iter_modules` அந்த பெயர்வெளியின் கீழ் நிறுவப்பட்ட அனைத்து தொகுதிகள் மற்றும் தொகுப்புகளைக் " +"கண்டறிய:" #: ../source/guides/creating-and-discovering-plugins.rst:88 msgid "" @@ -3629,6 +5413,10 @@ msgid "" "``myapp.plugins.a`` and ``myapp.plugins.b`` then ``discovered_plugins`` in " "this case would be:" msgstr "" +"`` Myapp.plugins .__ பாதை__`` க்கு: func: `~ pkgutil.iter_modules` இது அந்த " +"பெயர்வெளியின் கீழ் நேரடியாக தொகுதிகளை மட்டுமே தேடுகிறது. எடுத்துக்காட்டாக, `` myapp." +"plugins.a`` மற்றும் `` myapp.plugins.b`` தொகுதிகளை வழங்கும் விநியோகங்களை நீங்கள் " +"நிறுவியிருந்தால், இந்த விசயத்தில் `` கண்டுபிடிக்கப்பட்ட_பிலுசின்ச்`` இருக்கும்:" #: ../source/guides/creating-and-discovering-plugins.rst:100 msgid "" @@ -3646,6 +5434,17 @@ msgid "" "will need to explicitly pass a list of packages to :func:`setup`'s " "``packages`` argument instead of using :func:`setuptools.find_packages`." msgstr "" +"இந்த மாதிரி ஒரு துணை தொகுப்பாக பெயர்வெளி தொகுப்பாக (`` myapp.plugins``) " +"பயன்படுத்துகிறது, ஆனால் இந்த நோக்கத்திற்காக ஒரு உயர்மட்ட தொகுப்பைப் பயன்படுத்தவும் முடியும் " +"(`` MyApp_plugins` போன்றவை). பயன்படுத்த பெயர்வெளியை எவ்வாறு தேர்ந்தெடுப்பது என்பது " +"விருப்பமான சேதி, ஆனால் உங்கள் திட்டத்தின் முக்கிய உயர்மட்ட-நிலை தொகுப்பை (`` MyApp`` " +"`இந்த விசயத்தில்) செருகுநிரல்களின் நோக்கத்திற்காக ஒரு பெயர்வெளி தொகுப்பு செய்ய " +"பரிந்துரைக்கப்படவில்லை, ஒரு மோசமான சொருகி முடியும் முழு பெயர்வெளிகளையும் உடைக்கச் " +"செய்யுங்கள், இது உங்கள் திட்டத்தை இறக்காதது. வேலை செய்வதற்கான \"பெயர்வெளி துணை-பேக்கேச்\" " +"அணுகுமுறைக்கு, சொருகி தொகுப்புகள் பின்வாங்க வேண்டும்: கோப்பு: `__init __. உங்கள் " +"உயர்மட்ட தொகுப்பு கோப்பகத்திற்கு (இந்த விசயத்தில்` `MyApp``) . செருகுநிரல்கள் " +"தொகுப்புகளின் பட்டியலை வெளிப்படையாக அனுப்ப வேண்டும் என்பதும் இதன் பொருள்: func: `setup` " +"இன்` `தொகுப்புகள்`` பயன்படுத்துவதற்கு பதிலாக: func:` setuptools.find_packages`." #: ../source/guides/creating-and-discovering-plugins.rst:114 msgid "" @@ -3654,10 +5453,14 @@ msgid "" "namespace-packages` documentation and clearly document which approach is " "preferred for plugins to your project." msgstr "" +"பெயர்வெளி தொகுப்புகள் ஒரு சிக்கலான அம்சமாகும், அவற்றை உருவாக்க பல்வேறு வழிகள் உள்ளன. " +"உங்கள் திட்டத்திற்கு செருகுநிரல்களுக்கு எந்த அணுகுமுறை விரும்பப்படுகிறது என்பதை தெளிவாக " +"ஆவணப்படுத்த: DOC: `பேக்கேசிங்-பெயர்ச்பேச்-பேக்கேச்கள்` ஆவணங்கள் மற்றும் தெளிவாக ஆவணப்படுத்த " +"இது மிகவும் பரிந்துரைக்கப்படுகிறது." #: ../source/guides/creating-and-discovering-plugins.rst:122 msgid "Using package metadata" -msgstr "" +msgstr "தொகுப்பு மெட்டாடேட்டாவைப் பயன்படுத்துதல்" #: ../source/guides/creating-and-discovering-plugins.rst:124 msgid "" @@ -3666,12 +5469,18 @@ msgid "" "plugin. Another package supporting this kind of plugin can use the metadata " "to discover that plugin." msgstr "" +"தொகுப்புகள்: ref: `நுழைவு புள்ளிகள்` இல் விவரிக்கப்பட்டுள்ள செருகுநிரல்களுக்கான " +"மெட்டாடேட்டாவைக் கொண்டிருக்கலாம். அவற்றைக் குறிப்பிடுவதன் மூலம், ஒரு தொகுப்பு ஒரு " +"குறிப்பிட்ட வகையான சொருகி இருப்பதாக அறிவிக்கிறது. இந்த வகையான சொருகி ஆதரிக்கும் " +"மற்றொரு தொகுப்பு அந்த சொருகி கண்டுபிடிக்க மெட்டாடேட்டாவைப் பயன்படுத்தலாம்." #: ../source/guides/creating-and-discovering-plugins.rst:128 msgid "" "For example if you have a package named ``myapp-plugin-a`` and it includes " "the following in its ``pyproject.toml``:" msgstr "" +"எடுத்துக்காட்டாக, உங்களிடம் `` myApp-plugin-a`` என்ற தொகுப்பு இருந்தால், அதன் `` " +"pyproject.toml`` இல் பின்வருவனவற்றை உள்ளடக்கியது:" #: ../source/guides/creating-and-discovering-plugins.rst:136 msgid "" @@ -3679,18 +5488,24 @@ msgid "" "func:`importlib.metadata.entry_points` (or the backport_ " "``importlib_metadata >= 3.6`` for Python 3.6-3.9):" msgstr "" +"பயன்படுத்துவதன் மூலம் பதிவுசெய்யப்பட்ட அனைத்து நுழைவு புள்ளிகளையும் கண்டுபிடித்து " +"ஏற்றலாம்: func: `இறக்குமதி." #: ../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 "" @@ -3698,6 +5513,9 @@ msgid "" "has a lot of options. It's recommended to read over the entire section on :" "doc:`entry points ` ." msgstr "" +"`` Entry_point`` விவரக்குறிப்பு: கோப்பு: `setup.py` மிகவும் நெகிழ்வானது மற்றும் " +"நிறைய விருப்பங்களைக் கொண்டுள்ளது. இதில் முழு பகுதியையும் படிக்க பரிந்துரைக்கப்படுகிறது: " +"DOC: `நுழைவு புள்ளிகள் `." #: ../source/guides/creating-and-discovering-plugins.rst:167 msgid "" @@ -3705,10 +5523,13 @@ msgid "" "library/importlib.metadata>`, 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 "" +msgstr "கட்டளை-வரி கருவிகளை உருவாக்கி பேக்கேசிங் செய்யுங்கள்" #: ../source/guides/creating-command-line-tools.rst:7 msgid "" @@ -3718,10 +5539,15 @@ msgid "" "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 "" +msgstr "தொகுப்பை உருவாக்குதல்" #: ../source/guides/creating-command-line-tools.rst:14 msgid "" @@ -3729,17 +5555,22 @@ msgid "" "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 "" +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 "" @@ -3747,12 +5578,17 @@ msgid "" "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:73 msgid "" @@ -3760,6 +5596,9 @@ msgid "" "greeting to output is constructed. Now, construct the command-line interface " "to provision it with the same, which is done in :file:`cli.py`:" msgstr "" +"மேலே உள்ள செயல்பாடு பல முக்கிய வாதங்களைப் பெறுகிறது, இது வெளியீட்டிற்கான வாழ்த்து " +"எவ்வாறு கட்டமைக்கப்படுகிறது என்பதை தீர்மானிக்கிறது. இப்போது, கட்டளை-வரி இடைமுகத்தை அதை " +"வழங்குவதற்காக உருவாக்குங்கள், இது செய்யப்படுகிறது: கோப்பு: `cli.py`:" #: ../source/guides/creating-command-line-tools.rst:91 msgid "" @@ -3772,12 +5611,23 @@ msgid "" "possible to create CLI interfaces based solely on docstrings; advanced users " "are encouraged to make use of click_ (on which ``typer`` is based)." msgstr "" +"கட்டளை-வரி இடைமுகம் பைதான் வகை குறிப்புகளின் அடிப்படையில் பயன்படுத்த எளிதான கிளி " +"பாகுபடுத்தி TYPER_ உடன் கட்டப்பட்டுள்ளது. இது தானாக முடக்கம் மற்றும் பெட்டியின் " +"நேர்த்தியான பாணியில் கட்டளை-வரி உதவியை வழங்குகிறது. மற்றொரு விருப்பம்: PY: MOD: " +"`ArgParse`, ஒரு கட்டளை-வரி பாகுபடுத்தி, இது பைத்தானின் நிலையான நூலகத்தில் " +"சேர்க்கப்பட்டுள்ளது. இது பெரும்பாலான தேவைகளுக்கு போதுமானது, ஆனால் நிறைய குறியீடு " +"தேவைப்படுகிறது, பொதுவாக `` cli.py`` இல், சரியாக செயல்பட வேண்டும். மாற்றாக, " +"டாக்ச்டோப்_ டாக்ச்ட்ரிங்சை மட்டுமே அடிப்படையாகக் கொண்ட சி.எல்.ஐ இடைமுகங்களை உருவாக்குவதை " +"சாத்தியமாக்குகிறது; மேம்பட்ட பயனர்கள் கிளிக்_ ஐப் பயன்படுத்த ஊக்குவிக்கப்படுகிறார்கள் (இதில் " +"`` டைபர்`` அடிப்படையாகும்)." #: ../source/guides/creating-command-line-tools.rst:97 msgid "" "Now, add an empty :file:`__init__.py` file, to define the project as a " "regular :term:`import package `." msgstr "" +"இப்போது, ஒரு வெற்று: கோப்பு: `__init __. Py` கோப்பு, திட்டத்தை ஒரு வழக்கமானதாக " +"வரையறுக்க: கால:` இறக்குமதி தொகுப்பு <இறக்குமதி தொகுப்பு> `." #: ../source/guides/creating-command-line-tools.rst:99 msgid "" @@ -3786,6 +5636,10 @@ msgid "" "immediately with flat layout, but requires installation of the package with " "src layout), so initizalize the command-line interface here:" msgstr "" +"கோப்பு: கோப்பு: `__main __. Py` பயன்பாட்டிற்கான முக்கிய நுழைவு புள்ளியை இயக்கும் போது " +"குறிக்கிறது: MOD:` Runpy` (அதாவது `` பைதான் -M வாழ்த்துக்கள்``, இது உடனடியாக " +"தட்டையான தளவமைப்புடன் வேலை செய்கிறது, ஆனால் நிறுவல் தேவைப்படுகிறது எச்.ஆர்.சி " +"தளவமைப்புடன் கூடிய தொகுப்பு), எனவே கட்டளை-வரி இடைமுகத்தை இங்கேயே தொடங்கவும்:" #: ../source/guides/creating-command-line-tools.rst:111 msgid "" @@ -3794,10 +5648,13 @@ msgid "" "a certain hack could be placed in this file; read more at :ref:`running-cli-" "from-source-src-layout`." msgstr "" +"கட்டளை-வரி இடைமுகத்தை நேரடியாக அழைப்பதை இயக்குவதற்கு: `மூல மரம் <திட்ட மூல மரம்>`, " +"அதாவது `` பைதான் எச்.ஆர்.சி/வாழ்த்துக்கள்``, இந்த கோப்பில் ஒரு குறிப்பிட்ட ஏக் " +"வைக்கப்படலாம்; மேலும் வாசிக்க: ref: `ரன்னிங்-கிளி-ஃபிரோம்-மூல-எச்.ஆர்.சி-லேஅவுட்`." #: ../source/guides/creating-command-line-tools.rst:117 msgid "``pyproject.toml``" -msgstr "" +msgstr "`` pyproject.toml``" #: ../source/guides/creating-command-line-tools.rst:119 msgid "" @@ -3807,6 +5664,11 @@ msgid "" "`writing-pyproject-toml`, adding a dependency on ``typer`` (this tutorial " "uses version *0.12.3*)." msgstr "" +"திட்டத்தின்: கால: `மெட்டாடேட்டா <பைபிரோசெக்ட் மெட்டாடேட்டா>` வைக்கப்பட்டுள்ளது: கால: " +"`pyproject.toml`. தி: கால: `பைபிரொசெக்ட் மேனிலை தரவு விசைகள் <பைபிரோசெக்ட் மேனிலை " +"தரவு விசை>` மற்றும் `` [பில்ட்-சிச்டம்] `` அட்டவணை விவரிக்கப்பட்டுள்ளபடி நிரப்பப்படலாம்: " +"`` எழுதுதல்-பிப்ரோசெக்ட்-டோம்ல்`, `` `` டைபர்`` (இந்த பயிற்சி பதிப்பைப் பயன்படுத்துகிறது " +"*0.12.3 *)." #: ../source/guides/creating-command-line-tools.rst:122 msgid "" @@ -3815,28 +5677,38 @@ msgid "" "`console_scripts`) needs to be added as a :term:`subkey `:" msgstr "" +"திட்டம் ஒரு கட்டளை-வரி கருவியாக அங்கீகரிக்கப்படுவதற்கு, கூடுதலாக ஒரு `` " +"கன்சோல்_ச்கிரிப்ட்ச்``: குறிப்பு: `நுழைவு புள்ளி <நுழைவு புள்ளிகள்>` (பார்க்க: குறிப்பு: " +"`கன்சோல்_ச்கிரிப்ட்ச்`) ஒரு: காலமாக சேர்க்கப்பட வேண்டும்: `சப்ச்கே <பைபிரோசெக்ட் மேனிலை " +"தரவு சப்ச்கி>`:" #: ../source/guides/creating-command-line-tools.rst:129 msgid "" "Now, the project's source tree is ready to be transformed into a :term:" "`distribution package `, which makes it installable." msgstr "" +"இப்போது, திட்டத்தின் மூல மரம் A: காலமாக மாற்ற தயாராக உள்ளது: `விநியோக தொகுப்பு " +"<விநியோக தொகுப்பு>`, இது நிறுவக்கூடியதாக அமைகிறது." #: ../source/guides/creating-command-line-tools.rst:134 msgid "Installing the package with ``pipx``" -msgstr "" +msgstr "`` பிப்எக்ச்`` உடன் தொகுப்பை நிறுவுதல்" #: ../source/guides/creating-command-line-tools.rst:136 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 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 msgid "" @@ -3844,12 +5716,17 @@ msgid "" "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 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 msgid "" @@ -3857,6 +5734,9 @@ msgid "" "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 msgid "" @@ -3864,6 +5744,9 @@ msgid "" "an entry point specific to ``pipx run``. The same can be defined as follows " "in :file:`pyproject.toml`:" msgstr "" +"எவ்வாறாயினும், இந்த சிக்கலுக்கு மிகவும் நடைமுறை தீர்வு உள்ளது, `` பிப்எக்ச் ரன்`` க்கு " +"குறிப்பிட்ட நுழைவு புள்ளியின் வடிவத்தில். பின்வருமாறு இதை வரையறுக்கலாம்: கோப்பு: " +"`pyproject.toml`:" #: ../source/guides/creating-command-line-tools.rst:177 msgid "" @@ -3871,10 +5754,13 @@ msgid "" "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 msgid "Conclusion" -msgstr "" +msgstr "முடிவு" #: ../source/guides/creating-command-line-tools.rst:187 msgid "" @@ -3886,18 +5772,25 @@ msgid "" "some research ` on how your package is " "received!" msgstr "" +"பைத்தானில் எழுதப்பட்ட கட்டளை-வரி பயன்பாட்டை எவ்வாறு தொகுப்பது என்பது இப்போது உங்களுக்குத் " +"தெரியும். உங்கள் தொகுப்பை விநியோகிப்பதே மேலும் படி, அதாவது அதை A க்கு பதிவேற்றுவது: " +"சொல்: `தொகுப்பு அட்டவணை <தொகுப்பு குறியீட்டு>`, பொதுவாக: கால: `பைபி <பைதான் தொகுப்பு " +"குறியீட்டு (பைபி)>`. அதைச் செய்ய, வழிமுறைகளைப் பின்பற்றவும்: குறிப்பு: `உங்கள் திட்டத்தை " +"பேக்கேசிங் செய்தல்`. நீங்கள் முடித்ததும், மறந்துவிடாதீர்கள்: குறிப்பு: `சில ஆராய்ச்சி " +"செய்யுங்கள் <உங்கள் தொகுப்பு எவ்வாறு பெறப்படுகிறது என்பதைப் பற்றி பகுப்பாய்வு செய்தல்-பைபி-" +"பேக்கேச்-டவுன்லோடுகளை பகுப்பாய்வு செய்யுங்கள்!" #: ../source/guides/distributing-packages-using-setuptools.rst:5 msgid "Packaging and distributing projects" -msgstr "" +msgstr "திட்டங்களை பேக்கேசிங் மற்றும் விநியோகித்தல்" #: ../source/guides/distributing-packages-using-setuptools.rst:7 msgid "Outdated" -msgstr "" +msgstr "காலாவதியான" #: ../source/guides/distributing-packages-using-setuptools.rst:8 msgid "2023-12-14" -msgstr "" +msgstr "2023-12-14" #: ../source/guides/distributing-packages-using-setuptools.rst:10 msgid "" @@ -3907,6 +5800,10 @@ msgid "" "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 "" @@ -3914,6 +5811,9 @@ msgid "" "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 "" @@ -3922,20 +5822,25 @@ msgid "" "note that some advisory content there may be outdated. In the event of " "conflicts, prefer the advice in the Python Packaging User Guide." msgstr "" +"மேலும் குறிப்புப் பொருளுக்கு, காண்க: எச்.டி.டி: டிஓசி: `தொகுப்புகளை உருவாக்குதல் " +"மற்றும் விநியோகித்தல் <செட்டப்டூல்ச்: யு.எச்.இ. மோதல்கள் ஏற்பட்டால், பைதான் பேக்கேசிங் பயனர் " +"வழிகாட்டியில் ஆலோசனையை விரும்புங்கள்." #: ../source/guides/distributing-packages-using-setuptools.rst:28 msgid "Requirements for packaging and distributing" -msgstr "" +msgstr "பேக்கேசிங் மற்றும் விநியோகிப்பதற்கான தேவைகள்" #: ../source/guides/distributing-packages-using-setuptools.rst:29 msgid "" "First, make sure you have already fulfilled the :ref:`requirements for " "installing packages `." msgstr "" +"முதலில், நீங்கள் ஏற்கனவே நிறைவு செய்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்: ref: " +"`தொகுப்புகளை நிறுவுவதற்கான தேவைகள் <நிறுவல்_ரொக்விரெமென்ட்ச்>`." #: ../source/guides/distributing-packages-using-setuptools.rst:32 msgid "Install \"twine\" [1]_:" -msgstr "" +msgstr "\"கயிறு\" நிறுவவும் [1] _:" #: ../source/guides/distributing-packages-using-setuptools.rst:46 msgid "" @@ -3943,14 +5848,17 @@ msgid "" "Package>` to :term:`PyPI ` (see :ref:`below " "`)." msgstr "" +"உங்கள் திட்டத்தை பதிவேற்ற உங்களுக்கு இது தேவைப்படும்: கால: `விநியோகங்கள் <விநியோக " +"தொகுப்பு>` க்கு: கால: `பைபி <பைதான் தொகுப்பு குறியீட்டு (பைபி)>` (பார்க்க: `கீழே <கீழே " +"<உங்கள் திட்டத்தை பைபி>` ." #: ../source/guides/distributing-packages-using-setuptools.rst:52 msgid "Configuring your project" -msgstr "" +msgstr "உங்கள் திட்டத்தை உள்ளமைத்தல்" #: ../source/guides/distributing-packages-using-setuptools.rst:56 msgid "Initial files" -msgstr "" +msgstr "தொடக்க கோப்புகள்" #: ../source/guides/distributing-packages-using-setuptools.rst:61 msgid "" @@ -3959,10 +5867,13 @@ msgid "" "pypa/sampleproject/blob/db5806e0a3204034c51b1c00dde7d5eb3fa2532e/setup.py>`_ " "in the `PyPA sample project `_." msgstr "" +"மிக முக்கியமான கோப்பு: கோப்பு: உங்கள் திட்ட கோப்பகத்தின் மூலத்தில் இருக்கும் `setup.py`. " +"ஒரு எடுத்துக்காட்டுக்கு, `setup.py `_." #: ../source/guides/distributing-packages-using-setuptools.rst:66 msgid ":file:`setup.py` serves two primary functions:" -msgstr "" +msgstr ": கோப்பு: `setup.py` இரண்டு முதன்மை செயல்பாடுகளுக்கு உதவுகிறது:" #: ../source/guides/distributing-packages-using-setuptools.rst:68 msgid "" @@ -3972,6 +5883,11 @@ msgid "" "of your project are defined. The most relevant arguments are explained in :" "ref:`the section below `." msgstr "" +"உங்கள் திட்டத்தின் பல்வேறு நற்பொருத்தங்கள் கட்டமைக்கப்பட்ட கோப்பு இது. இதன் முதன்மை அம்சம்: " +"கோப்பு: `setup.py` என்னவென்றால், அதில் உலகளாவிய` `அமைவு ()` `செயல்பாடு உள்ளது. இந்த " +"செயல்பாட்டிற்கான முக்கிய வாதங்கள் உங்கள் திட்டத்தின் குறிப்பிட்ட விவரங்கள் எவ்வாறு " +"வரையறுக்கப்படுகின்றன என்பதுதான். மிகவும் பொருத்தமான வாதங்கள் இதில் விளக்கப்பட்டுள்ளன: ref: " +"`கீழே உள்ள பிரிவு <அமைவு () args>`." #: ../source/guides/distributing-packages-using-setuptools.rst:74 msgid "" @@ -3979,6 +5895,9 @@ msgid "" "packaging tasks. To get a listing of available commands, run ``python3 setup." "py --help-commands``." msgstr "" +"பேக்கேசிங் பணிகளுடன் தொடர்புடைய பல்வேறு கட்டளைகளை இயக்குவதற்கான கட்டளை வரி இடைமுகம் " +"இது. கிடைக்கக்கூடிய கட்டளைகளின் பட்டியலைப் பெற, `` python3 setup.py--help-" +"commands`` ஐ இயக்கவும்." #: ../source/guides/distributing-packages-using-setuptools.rst:82 msgid "" @@ -3987,10 +5906,13 @@ msgid "" "pypa/sampleproject/blob/db5806e0a3204034c51b1c00dde7d5eb3fa2532e/setup." "cfg>`_ in the `PyPA sample project `_." msgstr "" +". ஒரு எடுத்துக்காட்டுக்கு, `setup.cfg _` _ _ _ _ _ _ _ _ _ " +"மாதிரி தயாரிப்பு> `_." #: ../source/guides/distributing-packages-using-setuptools.rst:89 msgid "README.rst / README.md" -msgstr "" +msgstr "ReadMe.rst / readme.md" #: ../source/guides/distributing-packages-using-setuptools.rst:91 msgid "" @@ -4001,6 +5923,12 @@ msgid "" "projects/markdown/>`_ are supported as well (look at ``setup()``'s :ref:" "`long_description_content_type ` argument)." msgstr "" +"எல்லா திட்டங்களிலும் திட்டத்தின் இலக்கை உள்ளடக்கிய README கோப்பு இருக்க வேண்டும். மிகவும் " +"பொதுவான வடிவம் `மறுசீரமைக்கப்பட்ட டெக்ச்ட் ` _ ஒரு \"rst\" நீட்டிப்புடன், இது ஒரு தேவையில்லை என்றாலும்; `மார்க் பேரூர் " +" _ _ ஆகியவற்றின் பல வகைகளும் " +"ஆதரிக்கப்படுகின்றன (` `அமைவு ()` `கள்: ref:` long_description_content_type " +" `வாதம்)." #: ../source/guides/distributing-packages-using-setuptools.rst:98 msgid "" @@ -4008,6 +5936,9 @@ msgid "" "main/README.md>`_ from the `PyPA sample project `_." msgstr "" +"எடுத்துக்காட்டுக்கு, `Readme.md ` _ `pypa மாதிரி திட்டத்திலிருந்து `_." #: ../source/guides/distributing-packages-using-setuptools.rst:102 msgid "" @@ -4019,10 +5950,17 @@ msgid "" "don't need to list your readme file in :file:`MANIFEST.in`. Otherwise, " "include it to be explicit." msgstr "" +"பயன்படுத்தும் திட்டங்கள்: ref: `setuptools` 0.6.27+ நிலையான README கோப்புகளைக் " +"கொண்டுள்ளன (: கோப்பு:` readme.rst`,: கோப்பு: `ReadMe.txt`, அல்லது: கோப்பு:` " +"README`) மூல விநியோகங்களில் இயல்பாகவே. உள்ளமைக்கப்பட்ட: ref: `தொலைதூரங்கள்` நூலகம் இந்த " +"நடத்தையை பைத்தான் 3.7 இல் தொடங்குகிறது. கூடுதலாக, குறிப்பு: `setuptools` 36.4.0+ " +"ஒரு: கோப்பு:` Readme.md` கிடைத்தால் அடங்கும். நீங்கள் செட்டுப்டூல்களைப் பயன்படுத்துகிறீர்கள் " +"என்றால், உங்கள் README கோப்பை அதில் பட்டியலிட தேவையில்லை: கோப்பு: `manifest.in`. " +"இல்லையெனில், அதை வெளிப்படையாகச் சேர்க்கவும்." #: ../source/guides/distributing-packages-using-setuptools.rst:111 msgid "MANIFEST.in" -msgstr "" +msgstr "MANIFEST.in" #: ../source/guides/distributing-packages-using-setuptools.rst:113 msgid "" @@ -4031,6 +5969,10 @@ msgid "" "on writing a :file:`MANIFEST.in` file, including a list of what's included " "by default, see \":ref:`Using MANIFEST.in`\"." msgstr "" +"ப: கோப்பு: மூல விநியோகத்தில் தானாக சேர்க்கப்படாத கூடுதல் கோப்புகளை நீங்கள் தொகுக்க " +"வேண்டியிருக்கும் போது `மேனிஃபெச்ட்.இன்` தேவை. ஒரு: கோப்பு: `manifest.in` கோப்பு, " +"இயல்புநிலையாக சேர்க்கப்பட்டவற்றின் பட்டியல் உட்பட,\": ref: `Manifest.in`\" ஐப் " +"பயன்படுத்துதல் \"ஐப் பார்க்கவும்." #: ../source/guides/distributing-packages-using-setuptools.rst:118 msgid "" @@ -4039,15 +5981,19 @@ msgid "" "its manifest file, since all the necessary files have been included by :ref:" "`setuptools` 43.0.0 and newer." msgstr "" +"இருப்பினும், நீங்கள் ஒரு: கோப்பு: `manifest.in` ஐப் பயன்படுத்த வேண்டியதில்லை. " +"எடுத்துக்காட்டுக்கு, `பைபா மாதிரி திட்டம் ` " +"_ அதன் வெளிப்படையான கோப்பை நீக்கிவிட்டது, ஏனெனில் தேவையான அனைத்து கோப்புகளும் இவற்றில் " +"சேர்க்கப்பட்டுள்ளன: ref: `setuptools` 43.0.0 மற்றும் புதியது ." #: ../source/guides/distributing-packages-using-setuptools.rst:123 msgid "" ":file:`MANIFEST.in` does not affect binary distributions such as wheels." -msgstr "" +msgstr ": கோப்பு: `manifest.in` சக்கரங்கள் போன்ற பைனரி விநியோகங்களை பாதிக்காது." #: ../source/guides/distributing-packages-using-setuptools.rst:126 msgid "LICENSE.txt" -msgstr "" +msgstr "உரிமம்" #: ../source/guides/distributing-packages-using-setuptools.rst:128 msgid "" @@ -4058,6 +6004,11 @@ msgid "" "as `GitHub's Choose a License `_ or consult a " "lawyer." msgstr "" +"ஒவ்வொரு தொகுப்பிலும் விநியோக விதிமுறைகளை விவரிக்கும் உரிமக் கோப்பு இருக்க வேண்டும். பல " +"அதிகார வரம்புகளில், வெளிப்படையான உரிமம் இல்லாத தொகுப்புகளை பதிப்புரிமைதாரரைத் தவிர " +"வேறு யாராலும் சட்டப்பூர்வமாக பயன்படுத்தவோ அல்லது விநியோகிக்கவோ முடியாது. எந்த உரிமத்தை " +"தேர்வு செய்வது என்று உங்களுக்குத் தெரியாவிட்டால், `கிட்அப் போன்ற ஆதாரங்களை நீங்கள் " +"பயன்படுத்தலாம் _ _ அல்லது ஒரு வழக்கறிஞரை அணுகவும்." #: ../source/guides/distributing-packages-using-setuptools.rst:134 msgid "" @@ -4065,10 +6016,12 @@ msgid "" "blob/main/LICENSE.txt>`_ from the `PyPA sample project `_." msgstr "" +"எடுத்துக்காட்டுக்கு, `பைபா மாதிரி திட்டத்திலிருந்து `_." #: ../source/guides/distributing-packages-using-setuptools.rst:139 msgid "" -msgstr "" +msgstr "<உங்கள் தொகுப்பு>" #: ../source/guides/distributing-packages-using-setuptools.rst:141 msgid "" @@ -4076,6 +6029,9 @@ msgid "" "Python modules and packages under a single top-level package that has the " "same :ref:`name ` as your project, or something very close." msgstr "" +"இது தேவையில்லை என்றாலும், உங்கள் பைதான் தொகுதிகள் மற்றும் தொகுப்புகளை ஒரே ஒரு உயர் மட்ட " +"தொகுப்பின் கீழ் சேர்ப்பது மிகவும் பொதுவான நடைமுறை: ref: `பெயர் <அமைவு () பெயர்>` உங்கள் " +"திட்டமாக அல்லது மிக நெருக்கமான ஒன்று." #: ../source/guides/distributing-packages-using-setuptools.rst:145 msgid "" @@ -4083,10 +6039,13 @@ msgid "" "main/src/sample>`_ package that's included in the `PyPA sample project " "`_." msgstr "" +"எடுத்துக்காட்டுக்கு, `மாதிரி ` _ PYPA மாதிரி திட்டத்தில் சேர்க்கப்பட்டுள்ள தொகுப்பு `_." #: ../source/guides/distributing-packages-using-setuptools.rst:153 msgid "setup() args" -msgstr "" +msgstr "அமைவு () ஆர்க்ச்" #: ../source/guides/distributing-packages-using-setuptools.rst:155 msgid "" @@ -4094,6 +6053,9 @@ msgid "" "contains a global ``setup()`` function. The keyword arguments to this " "function are how specific details of your project are defined." msgstr "" +"மேலே குறிப்பிட்டுள்ளபடி, இதன் முதன்மை அம்சம்: கோப்பு: `setup.py` என்னவென்றால், அதில் " +"உலகளாவிய` `அமைவு ()` `செயல்பாடு உள்ளது. இந்த செயல்பாட்டிற்கான முக்கிய வாதங்கள் உங்கள் " +"திட்டத்தின் குறிப்பிட்ட விவரங்கள் எவ்வாறு வரையறுக்கப்படுகின்றன என்பதுதான்." #: ../source/guides/distributing-packages-using-setuptools.rst:159 msgid "" @@ -4101,6 +6063,9 @@ msgid "" "elsewhere. The full list can be found :doc:`in the setuptools documentation " "`." msgstr "" +"சிலர் தங்கள் தகவல்கள் வேறு இடத்திற்கு நகர்த்தப்படும் வரை தற்காலிகமாக கீழே " +"விளக்கப்படுகிறார்கள். முழு பட்டியலையும் காணலாம்: டிஓசி: `செட்டுப்டூல்ச் ஆவணத்தில் " +"<செட்டுப்டூல்ச்: குறிப்புகள்/முக்கிய வார்த்தைகள்>`." #: ../source/guides/distributing-packages-using-setuptools.rst:163 msgid "" @@ -4109,16 +6074,22 @@ msgid "" "contained in the `PyPA sample project `_." msgstr "" +"கொடுக்கப்பட்ட பெரும்பாலான துணுக்குகள் `setup.py _ " +"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ com/pypa/salemProject> `_." #: ../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 "" +msgstr "`` தொகுப்புகள்``" #: ../source/guides/distributing-packages-using-setuptools.rst:183 msgid "" @@ -4129,10 +6100,16 @@ msgid "" "packages. Use the ``exclude`` keyword argument to omit packages that are " "not intended to be released and installed." msgstr "" +"எல்லாவற்றின் பட்டியலுக்கும் `` தொகுப்புகள்`` அமைக்கவும்: கால: `தொகுப்புகள் <இறக்குமதி " +"தொகுப்பு>`, உங்கள் திட்டத்தில், அவற்றின் துணைப் பேக்குகள், துணை துணைப்பிரிவுகள் போன்றவை " +"உட்பட. தொகுப்புகளை கைமுறையாக பட்டியலிட முடியும் என்றாலும், `` setuptools." +"find_packages () `` அவற்றை தானாகவே கண்டுபிடிக்கும். கொடுக்கப்பட்ட தொகுப்புகளை மட்டுமே " +"கண்டுபிடிக்க `` `` முக்கிய வாதத்தை சேர்க்கவும். விடுவிக்கப்பட்டு நிறுவப்பட விரும்பாத " +"தொகுப்புகளைத் தவிர்க்க `` விலக்கு `முக்கிய வாதத்தைப் பயன்படுத்தவும்." #: ../source/guides/distributing-packages-using-setuptools.rst:192 msgid "``py_modules``" -msgstr "" +msgstr "`` py_modules``" #: ../source/guides/distributing-packages-using-setuptools.rst:198 msgid "" @@ -4140,6 +6117,10 @@ msgid "" "a package, set ``py_modules`` to a list of the names of the modules (minus " "the ``.py`` extension) in order to make :ref:`setuptools` aware of them." msgstr "" +"உங்கள் திட்டத்தில் ஏதேனும் ஒற்றை கோப்பு பைதான் தொகுதிகள் இருந்தால், ஒரு தொகுப்பின் " +"பகுதியாக இல்லாத ஏதேனும் ஒரு பைதான் தொகுதிகள் இருந்தால், `` py_modules`` ஐ " +"தொகுதிகளின் பெயர்களின் பட்டியலுக்கு அமைக்கவும் (`` .py`` நீட்டிப்பு) செய்ய: குறிப்பு: " +"`செட்ப்டூல்ச்` அவர்களைப் பற்றி அறிந்திருக்கிறார்." #: ../source/guides/distributing-packages-using-setuptools.rst:204 msgid "``install_requires``" @@ -4151,16 +6132,21 @@ msgid "" "minimally needs to run. When the project is installed by :ref:`pip`, this is " "the specification that is used to install its dependencies." msgstr "" +"ஒரு திட்டம் குறைந்தபட்சமாக இயங்க வேண்டிய சார்புகளைக் குறிப்பிட \"Install_requires\" " +"பயன்படுத்தப்பட வேண்டும். திட்டத்தை நிறுவும் போது: ref: `பிப்`, இது அதன் சார்புகளை நிறுவ " +"பயன்படும் விவரக்குறிப்பு." #: ../source/guides/distributing-packages-using-setuptools.rst:214 msgid "" "For more on using \"install_requires\" see :ref:`install_requires vs " "Requirements files`." msgstr "" +"\"Install_requires\" ஐப் பயன்படுத்துவது பற்றி மேலும் அறிய: ref: `install_requires " +"vs தேவைகள் கோப்புகள்`." #: ../source/guides/distributing-packages-using-setuptools.rst:221 msgid "``package_data``" -msgstr "" +msgstr "`` தொகுப்பு_டேட்டா``" #: ../source/guides/distributing-packages-using-setuptools.rst:230 msgid "" @@ -4170,6 +6156,10 @@ msgid "" "be of interest to programmers using the package. These files are called " "\"package data\"." msgstr "" +"பெரும்பாலும், கூடுதல் கோப்புகள் ஒரு: கால: `தொகுப்பு <இறக்குமதி தொகுப்பு> இல் நிறுவப்பட " +"வேண்டும். இந்த கோப்புகள் பெரும்பாலும் தொகுப்பின் செயல்படுத்தலுடன் நெருக்கமாக தொடர்புடைய " +"தரவு அல்லது தொகுப்பைப் பயன்படுத்தி புரோகிராமர்களுக்கு ஆர்வமாக இருக்கும் ஆவணங்களைக் கொண்ட " +"உரை கோப்புகள். இந்த கோப்புகள் \"தொகுப்பு தரவு\" என்று அழைக்கப்படுகின்றன." #: ../source/guides/distributing-packages-using-setuptools.rst:235 msgid "" @@ -4177,16 +6167,20 @@ msgid "" "names that should be copied into the package. The paths are interpreted as " "relative to the directory containing the package." msgstr "" +"மதிப்பு தொகுப்பில் நகலெடுக்கப்பட வேண்டிய ஒப்பீட்டு பாதை பெயர்களின் பட்டியலுக்கு தொகுப்பு " +"பெயரிலிருந்து மேப்பிங் செய்ய வேண்டும். பாதைகள் தொகுப்பைக் கொண்ட கோப்பகத்துடன் " +"தொடர்புடையதாக விளக்கப்படுகின்றன." #: ../source/guides/distributing-packages-using-setuptools.rst:239 msgid "" "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 "" +msgstr "`` data_files``" #: ../source/guides/distributing-packages-using-setuptools.rst:253 msgid "" @@ -4196,6 +6190,11 @@ msgid "" "that. It is mostly useful if you need to install files which are used by " "other programs, which may be unaware of Python packages." msgstr "" +"உள்ளமைவு: ref: `தொகுப்பு தரவு` பெரும்பாலான தேவைகளுக்கு போதுமானது, சில " +"சந்தர்ப்பங்களில் நீங்கள் தரவுக் கோப்புகளை * வெளியே * வைக்க வேண்டியிருக்கலாம்: உங்கள்: கால:` " +"தொகுப்புகள் <இறக்குமதி தொகுப்பு> `. `` Data_files`` கட்டளை அதைச் செய்ய உங்களை " +"அனுமதிக்கிறது. பிற நிரல்களால் பயன்படுத்தப்படும் கோப்புகளை நீங்கள் நிறுவ வேண்டுமானால் இது " +"பெரும்பாலும் பயனுள்ளதாக இருக்கும், அவை பைதான் தொகுப்புகளைப் பற்றி அறியாமல் இருக்கலாம்." #: ../source/guides/distributing-packages-using-setuptools.rst:259 msgid "" @@ -4208,12 +6207,21 @@ msgid "" "``files`` is interpreted relative to the :file:`setup.py` script at the top " "of the project source distribution." msgstr "" +"ஒவ்வொரு `` (அடைவு, கோப்புகள்) `` வரிசையில் உள்ள இணை நிறுவல் அடைவு மற்றும் அங்கு நிறுவ " +"வேண்டிய கோப்புகளைக் குறிப்பிடுகிறது. `` அடைவு`` ஒரு உறவினர் பாதையாக இருக்க வேண்டும் " +"(இது எதிர்காலத்தில் மாறக்கூடும் என்றாலும், `சக்கர சிக்கல் #92 _ _) ஐப் பார்க்கவும் நிறுவல் முன்னொட்டுடன் தொடர்புடையது (இயல்புநிலை " +"நிறுவலுக்காக பைதனின் `` sys.prefix``; `` site.user_base`` ஒரு பயனர் " +"நிறுவலுக்கு). `` கோப்புகள்`` இல் உள்ள ஒவ்வொரு கோப்பின் பெயரும் திட்ட மூல விநியோகத்தின் " +"மேலே: `setup.py` ச்கிரிப்டுடன் தொடர்புடையது." #: ../source/guides/distributing-packages-using-setuptools.rst:269 msgid "" "For more information see the distutils section on :ref:`Installing " "Additional Files `." msgstr "" +"மேலும் தகவலுக்கு, தொலைதூரப் பகுதியைப் பார்க்கவும்: ref: `கூடுதல் கோப்புகளை நிறுவுதல் " +"<செட்டப்டூல்ச்: டிச்டிடில்ச்-அட்ரிசனல்-ஃபைல்கள்>`." #: ../source/guides/distributing-packages-using-setuptools.rst:274 msgid "" @@ -4222,9 +6230,13 @@ msgid "" "Alternatively, if you must use ``python setup.py``, then you need to pass " "the ``--old-and-unmanageable`` option." msgstr "" +"தொகுப்புகளை முட்டையாக நிறுவும் போது, `` data_files`` ஆதரிக்கப்படவில்லை. எனவே, உங்கள் " +"திட்டம் பயன்படுத்தினால்: Ref: `setuptools`, அதை நிறுவ` `பிப்`` ஐப் பயன்படுத்த வேண்டும். " +"மாற்றாக, நீங்கள் `` பைதான் setup.py`` ஐப் பயன்படுத்த வேண்டும் என்றால், நீங்கள் `` --old-and-" +"unmanageable` விருப்பத்தை அனுப்ப வேண்டும்." #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -4235,20 +6247,27 @@ msgid "" "the recommended approach to achieve cross-platform compatibility is to use :" "ref:`console_scripts` entry points (see below)." msgstr "" +"`` Setup () `` ஆதரிக்கிறது ஒரு: குறிப்பு: `ச்கிரிப்டுகள் <செட்டுப்லூல்கள்: டிச்ட்டில்ச்-" +"இன்ச்டாலிங்-ச்கிரிப்டுகள்>` நிறுவுவதற்கு முன்பே தயாரிக்கப்பட்ட ச்கிரிப்ட்களை " +"சுட்டிக்காட்டுவதற்கான முக்கிய சொல், குறுக்கு-தளம் பொருந்தக்கூடிய தன்மையை அடைய " +"பரிந்துரைக்கப்பட்ட அணுகுமுறை: புதுப்பிப்பு: புதுப்பிப்பு : `Console_scripts` நுழைவு " +"புள்ளிகள் (கீழே காண்க)." #: ../source/guides/distributing-packages-using-setuptools.rst:291 msgid "Choosing a versioning scheme" -msgstr "" +msgstr "பதிப்பு திட்டத்தைத் தேர்ந்தெடுப்பது" #: ../source/guides/distributing-packages-using-setuptools.rst:293 msgid "" "See :ref:`versioning` for information on common version schemes and how to " "choose between them." msgstr "" +"காண்க: குறிப்பு: பொதுவான பதிப்பு திட்டங்கள் மற்றும் அவற்றுக்கிடையே எவ்வாறு தேர்வு செய்வது " +"என்பது பற்றிய தகவல்களுக்கு `பதிப்பு." #: ../source/guides/distributing-packages-using-setuptools.rst:298 msgid "Working in \"development mode\"" -msgstr "" +msgstr "\"மேம்பாட்டு பயன்முறையில்\" பணிபுரிதல்" #: ../source/guides/distributing-packages-using-setuptools.rst:300 msgid "" @@ -4258,12 +6277,18 @@ msgid "" "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 "" @@ -4274,6 +6299,12 @@ msgid "" "declared with ``console_scripts``. Dependencies will be installed in the " "usual, non-editable mode." msgstr "" +"பிஐபி கட்டளை-வரி கொடி `` -e`` ``-பொருத்தமற்ற`` க்கு குறுகியது, மற்றும் `` .` .` ." +"`` இது தற்போதைய பணி கோப்பகத்தைக் குறிக்கிறது, எனவே ஒன்றாக, தற்போதைய கோப்பகத்தை " +"நிறுவுவதாகும் (அதாவது உங்கள் திட்டத்தை ) திருத்தக்கூடிய பயன்முறையில். இது `` " +"Install_requires`` உடன் அறிவிக்கப்பட்ட எந்தவொரு சார்புகளையும் நிறுவும் மற்றும் `` " +"கன்சோல்_ச்கிரிப்ட்ச்`` உடன் அறிவிக்கப்பட்ட எந்த ச்கிரிப்டுகளையும் நிறுவும். சார்புநிலைகள் " +"வழக்கமான, திருத்தப்படாத பயன்முறையில் நிறுவப்படும்." #: ../source/guides/distributing-packages-using-setuptools.rst:321 msgid "" @@ -4282,6 +6313,10 @@ msgid "" "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 "" @@ -4289,6 +6324,8 @@ msgid "" "line overrides the \"bar\" dependency, such that it's fulfilled from VCS, " "not PyPI." msgstr "" +"உங்கள் திட்டத்தையும் எந்தவொரு சார்புகளையும் நிறுவ முதல் வரி கூறுகிறது. இரண்டாவது வரி " +"\"பார்\" சார்புநிலையை மீறுகிறது, இது வி.சி.க்களிலிருந்து நிறைவேறும், இது பைபி அல்ல." #: ../source/guides/distributing-packages-using-setuptools.rst:333 msgid "" @@ -4296,6 +6333,9 @@ msgid "" "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 "" @@ -4305,21 +6345,28 @@ msgid "" "the pip docs. For more on VCS installs, see the :ref:`VCS Support ` section of the pip docs." msgstr "" +"இல்லையெனில், தேவைகள் கோப்பின் நிறுவல் வரிசை காரணமாக, சார்பு பைபியிலிருந்து " +"நிறைவேற்றப்படும். தேவைகள் கோப்புகளைப் பற்றி மேலும் அறிய, பார்க்க: ref: `தேவைகள் கோப்பு " +"` PIP டாக்சில் பிரிவு. வி.சி.எச் நிறுவல்களைப் பற்றி மேலும் " +"அறிய, இதைக் காண்க: குறிப்பு: `வி.சி.எச் உதவி <பிஐபி: வி.சி.எச் ஆதரவு>` பிஐபி " +"டாக்சின் பிரிவு." #: ../source/guides/distributing-packages-using-setuptools.rst:342 msgid "" "Lastly, if you don't want to install any dependencies at all, you can run:" -msgstr "" +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 "" +"மேலும் தகவலுக்கு,: DOC: `மேம்பாட்டு முறை <செட்டப்டூல்ச்: userguide/" +"development_mode>` பிரிவு: ref: `setuptools` டாக்சைப் பார்க்கவும்." #: ../source/guides/distributing-packages-using-setuptools.rst:356 msgid "Packaging your project" -msgstr "" +msgstr "உங்கள் திட்டத்தை பேக்கேசிங் செய்தல்" #: ../source/guides/distributing-packages-using-setuptools.rst:358 msgid "" @@ -4328,22 +6375,30 @@ msgid "" "`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 "" +"உங்கள் திட்டத்திற்காக சக்கரங்கள் மற்றும் SDIST களை உருவாக்குவதற்கு முன், நீங்கள் `` பில்ட்`` " +"தொகுப்பை நிறுவ வேண்டும்:" #: ../source/guides/distributing-packages-using-setuptools.rst:380 msgid "Source distributions" -msgstr "" +msgstr "மூல வழங்கல்" #: ../source/guides/distributing-packages-using-setuptools.rst:382 msgid "" "Minimally, you should create a :term:`Source Distribution `:" msgstr "" +"குறைந்தபட்சமாக, நீங்கள் ஒரு: காலத்தை உருவாக்க வேண்டும்: `மூல வழங்கல் <மூல வழங்கல் " +"(அல்லது\" SDIST \")>`:" #: ../source/guides/distributing-packages-using-setuptools.rst:398 msgid "" @@ -4353,10 +6408,15 @@ msgid "" "involves a build step to build out the installation metadata from :file:" "`setup.py` and/or :file:`setup.cfg`." msgstr "" +"ஒரு \"மூல வழங்கல்\" கட்டமைக்கப்படாதது (அதாவது இது ஒரு: கால: `கட்டப்பட்ட விநியோகம்`), " +"மேலும் பிஐபி நிறுவும் போது ஒரு கட்டம் படி தேவைப்படுகிறது. வழங்கல் தூய பைத்தான் " +"என்றாலும் (அதாவது நீட்டிப்புகள் எதுவும் இல்லை), நிறுவல் மெட்டாடேட்டாவை உருவாக்குவதற்கான " +"கட்டமைப்பை இது இன்னும் உள்ளடக்கியது: கோப்பு: `setup.py` மற்றும்/அல்லது: கோப்பு:` setup." +"cfg`." #: ../source/guides/distributing-packages-using-setuptools.rst:406 msgid "Wheels" -msgstr "" +msgstr "சக்கரங்கள்" #: ../source/guides/distributing-packages-using-setuptools.rst:408 msgid "" @@ -4365,18 +6425,27 @@ msgid "" "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 "" +"உங்கள் திட்டம் தூய பைதான் என்றால், நீங்கள் ஒரு: ref: `\" தூய பைதான் சக்கரம் \"(கீழே உள்ள " +"பகுதியைக் காண்க) <தூய பைதான் சக்கரங்கள்>` உருவாக்குவீர்கள்." #: ../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 "" +"உங்கள் திட்டத்தில் தொகுக்கப்பட்ட நீட்டிப்புகள் இருந்தால், நீங்கள் A: ref: `* இயங்குதள சக்கரம்* " +"(கீழே உள்ள பகுதியைப் பார்க்கவும்) <இயங்குதள சக்கரங்கள்>` என்று அழைக்கப்படுவதை " +"உருவாக்குவீர்கள்." #: ../source/guides/distributing-packages-using-setuptools.rst:419 msgid "" @@ -4384,27 +6453,34 @@ msgid "" "you should create what's called a *Universal Wheel* by adding the following " "to your :file:`setup.cfg` file:" msgstr "" +"உங்கள் திட்டம் பைதான் 2 * ஐ ஆதரிக்கிறது மற்றும் * சி நீட்டிப்புகளைக் கொண்டிருக்கவில்லை " +"என்றால், உங்கள்: கோப்பு: `setup.cfg` கோப்பு: பின்வருவனவற்றைச் சேர்ப்பதன் மூலம் * யுனிவர்சல் " +"வீல் * என்று அழைக்கப்படுவதை உருவாக்க வேண்டும்:" #: ../source/guides/distributing-packages-using-setuptools.rst:428 msgid "" "Only use this setting if your project does not have any C extensions *and* " "supports Python 2 and 3." msgstr "" +"உங்கள் திட்டத்திற்கு சி நீட்டிப்புகள் இல்லை என்றால் மட்டுமே இந்த அமைப்பைப் பயன்படுத்தவும் * " +"மற்றும் * பைதான் 2 மற்றும் 3 ஐ ஆதரிக்கிறது." #: ../source/guides/distributing-packages-using-setuptools.rst:435 msgid "Pure Python Wheels" -msgstr "" +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 "" +msgstr "சக்கரத்தை உருவாக்க:" #: ../source/guides/distributing-packages-using-setuptools.rst:454 msgid "" @@ -4412,22 +6488,30 @@ msgid "" "wheel that's named such that it's usable on any Python 3 installation. For " "details on the naming of wheel files, see :pep:`425`." msgstr "" +"`` சக்கரம்`` தொகுப்பு குறியீடு தூய பைதான் என்பதைக் கண்டறிந்து, எந்த பைதான் 3 நிறுவலிலும் " +"பயன்படுத்தக்கூடியதாக பெயரிடப்பட்ட ஒரு சக்கரத்தை உருவாக்குகிறது. சக்கர கோப்புகளின் " +"பெயரிடுதல் குறித்த விவரங்களுக்கு, காண்க: PEP: `425`." #: ../source/guides/distributing-packages-using-setuptools.rst:458 msgid "" "If you run ``build`` without ``--wheel`` or ``--sdist``, it will build both " "files for you; this is useful when you don't need multiple wheels." msgstr "" +"``-வீல்` அல்லது ``--ச்டிச்ட்` இல்லாமல் `` பில்ட்`` ஐ இயக்கினால், அது உங்களுக்காக இரண்டு " +"கோப்புகளையும் உருவாக்கும்; உங்களுக்கு பல சக்கரங்கள் தேவையில்லை போது இது பயனுள்ளதாக " +"இருக்கும்." #: ../source/guides/distributing-packages-using-setuptools.rst:464 msgid "Platform Wheels" -msgstr "" +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 "" @@ -4435,17 +6519,20 @@ msgid "" "build a wheel that's named such that it's only usable on the platform that " "it was built on. For details on the naming of wheel files, see :pep:`425`." msgstr "" +"`` சக்கரம்`` தொகுப்பு குறியீடு தூய பைதான் அல்ல என்பதைக் கண்டறிந்து, அது கட்டப்பட்ட " +"மேடையில் மட்டுமே பயன்படுத்தக்கூடியது என்று பெயரிடப்பட்ட ஒரு சக்கரத்தை உருவாக்குங்கள். " +"சக்கர கோப்புகளின் பெயரிடுதல் குறித்த விவரங்களுக்கு, காண்க: PEP: `425`." #: ../source/guides/distributing-packages-using-setuptools.rst:490 msgid "" ":term:`PyPI ` currently supports uploads of " "platform wheels for Windows, macOS, and the multi-distro ``manylinux*`` ABI. " "Details of the latter are defined in :pep:`513`." -msgstr "" +msgstr ". பிந்தைய விவரங்கள் வரையறுக்கப்பட்டுள்ளன: PEP: `513`." #: ../source/guides/distributing-packages-using-setuptools.rst:498 msgid "Uploading your Project to PyPI" -msgstr "" +msgstr "உங்கள் திட்டத்தை PYPI இல் பதிவேற்றுகிறது" #: ../source/guides/distributing-packages-using-setuptools.rst:500 msgid "" @@ -4453,6 +6540,9 @@ msgid "" "`` was created under your project's root directory. That's where you'll find " "your distribution file(s) to upload." msgstr "" +"உங்கள் விநியோகத்தை உருவாக்க நீங்கள் கட்டளையை இயக்கும்போது, உங்கள் திட்டத்தின் ரூட் கோப்பகத்தின் " +"கீழ் `` DIST/`` ஒரு புதிய அடைவு உருவாக்கப்பட்டது. பதிவேற்ற உங்கள் விநியோக கோப்பு " +"(களை) காண்பீர்கள்." #: ../source/guides/distributing-packages-using-setuptools.rst:504 msgid "" @@ -4461,6 +6551,10 @@ msgid "" "or the configuration in your :file:`setup.py` file, you will need to rebuild " "these files again before you can distribute the changes to PyPI." msgstr "" +"உங்கள் விநியோகத்தை உருவாக்க கட்டளையை இயக்கும்போது மட்டுமே இந்த கோப்புகள் " +"உருவாக்கப்படுகின்றன. இதன் பொருள் என்னவென்றால், உங்கள் திட்டத்தின் மூலத்தையோ அல்லது உங்கள்: " +"கோப்பு: `setup.py` கோப்பிலோ எந்த நேரத்திலும் நீங்கள் மாற்றும்போது, நீங்கள் பைபிக்கு " +"மாற்றங்களை விநியோகிப்பதற்கு முன்பு இந்த கோப்புகளை மீண்டும் கட்டியெழுப்ப வேண்டும்." #: ../source/guides/distributing-packages-using-setuptools.rst:509 msgid "" @@ -4469,6 +6563,10 @@ msgid "" "basis. See :ref:`using-test-pypi` on how to setup your configuration in " "order to use it." msgstr "" +"மெயின் பைபி ரெப்போவில் வெளியிடுவதற்கு முன், நீங்கள் `PYPI சோதனை தளத்துடன் பயிற்சியை " +"விரும்பலாம் ` _ இது அரை வழக்கமான அடிப்படையில் தூய்மை " +"செய்யப்படுகிறது. காண்க: குறிப்பு: `உங்கள் உள்ளமைவைப் பயன்படுத்துவதற்காக அதை எவ்வாறு " +"அமைப்பது என்பது குறித்து-டெச்ட்-பைபியைப் பயன்படுத்துதல்." #: ../source/guides/distributing-packages-using-setuptools.rst:514 msgid "" @@ -4478,6 +6576,10 @@ msgid "" "HTTP or unverified HTTPS connection on some Python versions, allowing your " "username and password to be intercepted during transmission." msgstr "" +"பிற ஆதாரங்களில் `` பைதான் செட்அப். ஒரு தொகுப்பை பதிவுசெய்தல் மற்றும் பதிவேற்றுவதற்கான " +"இந்த முறைகள் ** சில பைதான் பதிப்புகளில் ஒரு எளிய உரை HTTP அல்லது சரிபார்க்கப்படாத " +"HTTPS இணைப்பைப் பயன்படுத்துவதால், உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லை பரிமாற்றத்தின் போது " +"தடுத்து நிறுத்த அனுமதிக்கிறது." #: ../source/guides/distributing-packages-using-setuptools.rst:520 msgid "" @@ -4488,10 +6590,17 @@ msgid "" "long descriptions provided in :file:`setup.py` are valid. You can do this " "by running :std:doc:`twine check ` on your package files:" msgstr "" +"PYPI இல் பயன்படுத்தப்படும் மறுசீரமைப்பு டெக்ச்ட் பாகுபடுத்தி ** அல்ல ** sphinx! மேலும், " +"அனைத்து பயனர்களின் பாதுகாப்பையும் உறுதிப்படுத்த, சில வகையான முகவரி கள் மற்றும் " +"வழிமுறைகள் தடைசெய்யப்பட்டுள்ளன அல்லது அகற்றப்படுகின்றன (எ.கா., `` .. மூல :: `` " +"உத்தரவு). ** முன் ** உங்கள் விநியோகத்தை பதிவேற்ற முயற்சிக்கும் முன், உங்கள் சுருக்கமான / " +"நீண்ட விளக்கங்கள் வழங்கப்பட்டதா என்பதை நீங்கள் சரிபார்க்க வேண்டும்: கோப்பு: `setup.py` " +"செல்லுபடியாகும். இயங்குவதன் மூலம் இதைச் செய்யலாம்: எச்.டி.டி: டிஓசி: `உங்கள் தொகுப்பு " +"கோப்புகளில்` ட்வைன் செக் <குறியீட்டு> `:" #: ../source/guides/distributing-packages-using-setuptools.rst:533 msgid "Create an account" -msgstr "" +msgstr "ஒரு கணக்கை உருவாக்கவும்" #: ../source/guides/distributing-packages-using-setuptools.rst:535 msgid "" @@ -4499,12 +6608,17 @@ msgid "" "You can create an account `using the form on the PyPI website `_." msgstr "" +"முதலில், உங்களுக்கு ஒரு: சொல் தேவை: `பைபி <பைதான் தொகுப்பு அட்டவணை (பைபி)>` பயனர் " +"கணக்கு. PYPI வலைத்தளமான _ _ இல் படிவத்தைப் " +"பயன்படுத்தி ஒரு கணக்கை உருவாக்கலாம்." #: ../source/guides/distributing-packages-using-setuptools.rst:539 msgid "" "Now you'll create a PyPI `API token`_ so you will be able to securely upload " "your project." msgstr "" +"இப்போது நீங்கள் ஒரு பைபி `ஏபிஐ டோக்கன்`_ ஐ உருவாக்குவீர்கள், எனவே உங்கள் திட்டத்தை " +"பாதுகாப்பாக பதிவேற்ற முடியும்." #: ../source/guides/distributing-packages-using-setuptools.rst:542 msgid "" @@ -4512,22 +6626,29 @@ msgid "" "token`_; don't limit its scope to a particular project, since you are " "creating a new project." msgstr "" +"Https://pypi.org/manage/account/#api-tokens க்குச் சென்று புதிய `API டோக்கன்`_ ஐ " +"உருவாக்கவும்; நீங்கள் ஒரு புதிய திட்டத்தை உருவாக்குவதால், ஒரு குறிப்பிட்ட திட்டத்திற்கு " +"அதன் நோக்கத்தை மட்டுப்படுத்த வேண்டாம்." #: ../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 "" +"நீங்கள் பதிவேற்றும் ஒவ்வொரு முறையும் கிள்ளாக்கை நகலெடுத்து ஒட்ட வேண்டும் என்பதைத் தவிர்க்க, " +"நீங்கள் ஒரு: கோப்பு: `$ home/.pypirc` கோப்பு:" #: ../source/guides/distributing-packages-using-setuptools.rst:558 msgid "**Be aware that this stores your token in plaintext.**" -msgstr "" +msgstr "** இது உங்கள் கிள்ளாக்கை எளிய உரையை சேமிக்கிறது என்பதை அறிந்து கொள்ளுங்கள். **" #: ../source/guides/distributing-packages-using-setuptools.rst:560 #: ../source/guides/migrating-to-pypi-org.rst:74 @@ -4536,16 +6657,20 @@ msgstr "" msgid "" "For more details, see the :ref:`specification ` for :file:`.pypirc`." msgstr "" +"மேலும் விவரங்களுக்கு, இதைக் காண்க: ref: `விவரக்குறிப்பு ` க்கு: கோப்பு: `." +"பைர்க்`." #: ../source/guides/distributing-packages-using-setuptools.rst:566 msgid "Upload your distributions" -msgstr "" +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 "" @@ -4553,12 +6678,17 @@ msgid "" "the project already exists on PyPI - if it doesn't exist yet, it will be " "automatically created when the first release is uploaded." msgstr "" +"ஒரு வெளியீட்டைப் பதிவேற்றுவதற்கான செயல்முறை PYPI இல் ஏற்கனவே உள்ளதா இல்லையா என்பதைப் " +"பொருட்படுத்தாமல் - அது இன்னும் இல்லை என்றால், முதல் வெளியீடு பதிவேற்றப்படும்போது அது " +"தானாகவே உருவாக்கப்படும்." #: ../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 "" +"இரண்டாவது மற்றும் அடுத்தடுத்த வெளியீடுகளுக்கு, புதிய வெளியீட்டின் பதிப்பு எண் முந்தைய " +"வெளியீடுகளிலிருந்து வேறுபட வேண்டும் என்று PYPI தேவைப்படுகிறது." #: ../source/guides/distributing-packages-using-setuptools.rst:582 msgid "" @@ -4567,6 +6697,9 @@ msgid "" "the name of your project that you uploaded. It may take a minute or two for " "your project to appear on the site." msgstr "" +"`` Https://pypi.org/project/ `` `` `shampeproject`` என்பது " +"நீங்கள் பதிவேற்றிய உங்கள் திட்டத்தின் பெயர். உங்கள் திட்டம் தளத்தில் தோன்றுவதற்கு ஒரு மணித்துளி " +"அல்லது இரண்டு நேரம் ஆகலாம்." #: ../source/guides/distributing-packages-using-setuptools.rst:589 #: ../source/tutorials/installing-packages.rst:670 @@ -4574,11 +6707,11 @@ 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 "" +msgstr "உங்கள் தளத்தைப் பொறுத்து, இதற்கு ரூட் அல்லது நிர்வாகி அணுகல் தேவைப்படலாம். ." #: ../source/guides/dropping-older-python-versions.rst:5 msgid "Dropping support for older Python versions" -msgstr "" +msgstr "பழைய பைதான் பதிப்புகளுக்கான ஆதரவை கைவிடுதல்" #: ../source/guides/dropping-older-python-versions.rst:7 msgid "" @@ -4586,6 +6719,9 @@ msgid "" "standard :ref:`core-metadata` 1.2 specification via the :ref:`\"Requires-" "Python\" ` attribute." msgstr "" +"பழைய பைதான் பதிப்புகளுக்கான ஆதரவை கைவிடுவதற்கான திறன் தரநிலையால் இயக்கப்பட்டது: " +"குறிப்பு: `கோர்-மெட்டாடேட்டா` 1.2 விவரக்குறிப்பு வழியாக: ref:` \"-பைதான் தேவை\" " +"<கோர்-மெட்டாடேட்டா-வேண்டுகோள்-பைதான்> `பண்புக்கூறு." #: ../source/guides/dropping-older-python-versions.rst:9 msgid "" @@ -4594,26 +6730,34 @@ msgid "" "version in the package metadata. If they do not match, it will attempt to " "install the last package distribution that supported that Python runtime." msgstr "" +"PIP போன்ற மேனிலை தரவு 1.2+ நிறுவிகள், தற்போதைய பைதான் இயக்க நேரத்துடன் பொருந்துவதன் " +"மூலமும், தொகுப்பு மெட்டாடேட்டாவில் தேவையான பதிப்போடு ஒப்பிடுவதன் மூலமும் இந்த " +"விவரக்குறிப்பைக் கடைப்பிடிக்கும். அவை பொருந்தவில்லை என்றால், அந்த பைதான் இயக்க நேரத்தை " +"ஆதரிக்கும் கடைசி தொகுப்பு விநியோகத்தை நிறுவ முயற்சிக்கும்." #: ../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 "" +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 "" +"தொகுப்பை நிறுவும் பயனர் பிஐபி [#] _ அல்லது மேனிலை தரவு 1.2 விவரக்குறிப்பை ஆதரிக்கும் " +"மற்றொரு நிறுவியைப் பயன்படுத்த வேண்டும்." #: ../source/guides/dropping-older-python-versions.rst:20 msgid "Dealing with the universal wheels" -msgstr "" +msgstr "உலகளாவிய சக்கரங்களுடன் கையாள்வது" #: ../source/guides/dropping-older-python-versions.rst:22 msgid "" @@ -4624,12 +6768,20 @@ msgid "" "just ``py3``. It is often configured within :file:`setup.cfg` under the " "``[bdist_wheel]`` section by setting ``universal = 1``." msgstr "" +"பாரம்பரியமாக, குறிப்பு: பைதான் 2 மற்றும் பைதான் 3 ஆகிய இரண்டிலும் சொற்பொருளாக இணக்கமான " +"பைதான் குறியீட்டை வழங்கும் `செட்ப்டூல்ச்` திட்டங்கள், உற்பத்தி: கால: `சக்கரங்கள் <சக்கர>` " +"அவற்றின் பெயர்களில் `` py2.py3`` குறிச்சொல்லைக் கொண்டுள்ளன. பைதான் 2 க்கான ஆதரவை " +"கைவிடும்போது, இந்த குறிச்சொல்லை `` py3`` ஆக மாற்ற மறக்காமல் இருப்பது முதன்மை. இது " +"பெரும்பாலும் உள்ளே கட்டமைக்கப்பட்டுள்ளது: கோப்பு: `` [bdist_wheel] `` பிரிவின் கீழ் `` " +"`யுனிவர்சல் = 1``." #: ../source/guides/dropping-older-python-versions.rst:29 msgid "" "If you use this method, either remove this option or section, or explicitly " "set ``universal`` to ``0``:" msgstr "" +"இந்த முறையைப் பயன்படுத்தினால், இந்த விருப்பம் அல்லது பகுதியை அகற்று, அல்லது வெளிப்படையாக " +"`` யுனிவர்சல்`` ஐ `0`` என அமைக்கவும்:" #: ../source/guides/dropping-older-python-versions.rst:41 msgid "" @@ -4637,22 +6789,26 @@ msgid "" "invocations, passing the ``--universal`` flag on the command line could " "override this setting." msgstr "" +"தொடர்புடையது: குறிப்பு: `நீக்கப்பட்ட ` நேரடி `` setup.py`` " +"அழைப்பிதழ்கள், கட்டளை வரியில் `` --niversal`` கொடியைக் கடந்து செல்வது இந்த அமைப்பை " +"மீறக்கூடும்." #: ../source/guides/dropping-older-python-versions.rst:45 msgid "Defining the Python version required" -msgstr "" +msgstr "தேவையான பைதான் பதிப்பை வரையறுத்தல்" #: ../source/guides/dropping-older-python-versions.rst:48 msgid "1. Install twine" -msgstr "" +msgstr "1. கயிறு நிறுவவும்" #: ../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 "" +msgstr "2. ஆதரிக்கப்பட்ட பைதான் விநியோகங்களுக்கான பதிப்பு வரம்புகளைக் குறிப்பிடவும்" #: ../source/guides/dropping-older-python-versions.rst:68 msgid "" @@ -4661,6 +6817,10 @@ msgid "" "configuration field corresponds to the :ref:`Requires-Python ` core metadata field:" msgstr "" +"உங்கள் திட்டத்திற்குள் எந்த பைதான் விநியோகங்கள் ஆதரிக்கப்படுகின்றன என்பதை அறிவிக்கும் பதிப்பு " +"வரம்புகளை அமைக்கவும்: கோப்பு: `pyproject.toml`. தி: ரெஃப்: `-பைதான் தேவை. உள்ளமைவு " +"புலம் இதற்கு ஒத்திருக்கிறது: ref:`-பைதான் தேவை <கோர்-மெட்டாடேட்டா-வேண்டுகோள்-பைதான்> " +"`கோர் மேனிலை தரவு புலம்:" #: ../source/guides/dropping-older-python-versions.rst:80 msgid "" @@ -4668,12 +6828,18 @@ msgid "" "`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 "" +"குறைந்தபட்சம் பைதான் 3.9 போன்ற பதிப்பு வரம்புகள் மற்றும் விலக்கு விதிகளை நீங்கள் " +"குறிப்பிடலாம் (குறிப்பு: re: `பதிப்பு-விவரிப்பாளர்கள்` விவரக்குறிப்பு). அல்லது, " +"குறைந்தபட்சம் பைதான் 3.7 மற்றும் அதற்கு அப்பால், 3.7.0 மற்றும் 3.7.1 புள்ளி வெளியீடுகளைத் " +"தவிர்த்து:" #: ../source/guides/dropping-older-python-versions.rst:89 msgid "" "If using the :ref:`setuptools` build backend, consult the `dependency-" "management`_ documentation for more options." msgstr "" +"பயன்படுத்தினால்: ref: `setuptools` பின்தளத்தில் உருவாக்குங்கள், மேலும் விருப்பங்களுக்கு` " +"சார்பு-மேலாண்மை`_ ஆவணங்களை அணுகவும்." #: ../source/guides/dropping-older-python-versions.rst:92 msgid "" @@ -4681,16 +6847,21 @@ msgid "" "3.10\"``. Doing so can cause different errors and version conflicts. See the " "`discourse-discussion`_ for more information." msgstr "" +"பதிப்பு வரம்புகளுக்கு மேல் எல்லையைச் சேர்ப்பதைத் தவிர்க்கவும், இ. g. `` \"> = 3.8, " +"<3.10\" ``. அவ்வாறு செய்வது வெவ்வேறு பிழைகள் மற்றும் பதிப்பு மோதல்களை ஏற்படுத்தும். " +"மேலும் தகவலுக்கு `சொற்பொழிவு-விவாதத்தை`_ ஐப் பார்க்கவும்." #: ../source/guides/dropping-older-python-versions.rst:96 msgid "3. Validating the Metadata before publishing" -msgstr "" +msgstr "3. வெளியீட்டிற்கு முன் மெட்டாடேட்டாவை சரிபார்க்கிறது" #: ../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 "" @@ -4698,38 +6869,45 @@ msgid "" "generates the source package. The file contains a set of keys and values, " "the list of keys is part of the PyPA standard metadata format." msgstr "" +"இந்த கோப்பு உருவாக்கப்படுகிறது: கால: `பின்தளத்தில் உருவாக்கு <பின்தளத்தில் உருவாக்கு>` " +"இது மூல தொகுப்பை உருவாக்கும் போது. கோப்பில் விசைகள் மற்றும் மதிப்புகள் உள்ளன, விசைகளின் " +"பட்டியல் PYPA நிலையான மேனிலை தரவு வடிவமைப்பின் ஒரு பகுதியாகும்." #: ../source/guides/dropping-older-python-versions.rst:103 msgid "You can see the contents of the generated file like this:" -msgstr "" +msgstr "இது போன்ற உருவாக்கப்பட்ட கோப்பின் உள்ளடக்கங்களை நீங்கள் காணலாம்:" #: ../source/guides/dropping-older-python-versions.rst:109 msgid "Validate that the following is in place, before publishing the package:" -msgstr "" +msgstr "தொகுப்பை வெளியிடுவதற்கு முன்பு பின்வருபவை உள்ளன என்பதை சரிபார்க்கவும்:" #: ../source/guides/dropping-older-python-versions.rst:111 msgid "" "If you have upgraded correctly, the ``Metadata-Version`` value should be 1.2 " "or higher." msgstr "" +"நீங்கள் சரியாக மேம்படுத்தப்பட்டிருந்தால், `` மெட்டாடேட்டா-பதிப்பு`` மதிப்பு 1.2 அல்லது " +"அதற்கு மேற்பட்டதாக இருக்க வேண்டும்." #: ../source/guides/dropping-older-python-versions.rst:112 msgid "" "The ``Requires-Python`` field is set and matches your specification in the " "configuration file." msgstr "" +"`` தேவைப்படுகிறது-பைதான்` `புலம் அமைக்கப்பட்டு, உங்கள் விவரக்குறிப்பை உள்ளமைவு கோப்பில் " +"பொருத்துகிறது." #: ../source/guides/dropping-older-python-versions.rst:115 msgid "4. Publishing the package" -msgstr "" +msgstr "4. தொகுப்பை வெளியிடுதல்" #: ../source/guides/dropping-older-python-versions.rst:117 msgid "Proceed as suggested in :ref:`Uploading your Project to PyPI`." -msgstr "" +msgstr "பரிந்துரைத்தபடி தொடரவும்: ref: `உங்கள் திட்டத்தை பைபிக்கு பதிவேற்றுதல்`." #: ../source/guides/dropping-older-python-versions.rst:120 msgid "Dropping a Python version" -msgstr "" +msgstr "பைதான் பதிப்பை கைவிடுதல்" #: ../source/guides/dropping-older-python-versions.rst:122 msgid "" @@ -4741,10 +6919,18 @@ msgid "" "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 "" @@ -4753,14 +6939,18 @@ msgid "" "visible places (like the testing environment). Tools like pyupgrade_ or " "`ruff `_ can automate some of this work." msgstr "" +"பைதான் பதிப்பைக் கைவிடும்போது, புலப்படும் இடங்களில் (சோதனைச் சூழல் போன்றவை) " +"பயன்படுத்தப்படும் பதிப்புகளைப் புதுப்பிப்பதைத் தவிர, திட்டத்தின் குறியீடு தொடரியல் பொதுவாக " +"மேம்படுத்தவும் இது பலனளிக்கும். Pyupgrade_ அல்லது `Ruff _ _ இந்த வேலைகளில் சிலவற்றை தானியக்கமாக்கலாம்." #: ../source/guides/dropping-older-python-versions.rst:138 msgid "Support for the Metadata 1.2 specification has been added in Pip 9.0." -msgstr "" +msgstr "மேனிலை தரவு 1.2 விவரக்குறிப்புக்கான உதவி PIP 9.0 இல் சேர்க்கப்பட்டுள்ளது." #: ../source/guides/hosting-your-own-index.rst:5 msgid "Hosting your own simple repository" -msgstr "" +msgstr "உங்கள் சொந்த எளிய களஞ்சியத்தை புரவலன் செய்தல்" #: ../source/guides/hosting-your-own-index.rst:8 msgid "" @@ -4769,6 +6959,10 @@ msgid "" "the proper directory structure and use any web server that can serve static " "files and generate an autoindex." msgstr "" +"உங்கள் சொந்த எளிய களஞ்சியத்தை புரவலன் செய்ய விரும்பினால் [1] _, நீங்கள் போன்ற ஒரு " +"மென்பொருள் தொகுப்பைப் பயன்படுத்தலாம்: டாக்: `டெவிபி <டெவிபிஐ: குறியீட்டு>` அல்லது " +"சரியான அடைவு கட்டமைப்பை உருவாக்கி பணி செய்யக்கூடிய எந்த வலை சேவையகத்தையும் " +"பயன்படுத்தலாம் நிலையான கோப்புகள் மற்றும் ஒரு ஆட்டோஇண்டெக்சை உருவாக்குகின்றன." #: ../source/guides/hosting-your-own-index.rst:13 msgid "" @@ -4776,6 +6970,9 @@ msgid "" "your user's default repositories, you should instruct them in your project's " "description to configure their installer appropriately. For example with pip:" msgstr "" +"இரண்டிலும், உங்கள் பயனரின் இயல்புநிலை களஞ்சியங்களில் இல்லாத ஒரு களஞ்சியத்தை நீங்கள் புரவலன் " +"செய்வதால், அவற்றின் நிறுவியை சரியான முறையில் உள்ளமைக்க உங்கள் திட்டத்தின் விளக்கத்தில் " +"அவர்களுக்கு அறிவுறுத்த வேண்டும். உதாரணமாக PIP உடன்:" #: ../source/guides/hosting-your-own-index.rst:29 msgid "" @@ -4783,10 +6980,13 @@ msgid "" "with valid HTTPS. At this time, the security of your user's installations " "depends on all repositories using a valid HTTPS setup." msgstr "" +"கூடுதலாக, செல்லுபடியாகும் HTTPS உடன் உங்கள் களஞ்சியத்தை வழங்க நீங்கள் ** மிகவும் ** " +"பரிந்துரைக்கப்படுகிறது. இந்த நேரத்தில், உங்கள் பயனரின் நிறுவல்களின் பாதுகாப்பு " +"செல்லுபடியாகும் HTTPS அமைப்பைப் பயன்படுத்தி அனைத்து களஞ்சியங்களையும் சார்ந்துள்ளது." #: ../source/guides/hosting-your-own-index.rst:35 msgid "\"Manual\" repository" -msgstr "" +msgstr "\"கையேடு\" களஞ்சியம்" #: ../source/guides/hosting-your-own-index.rst:37 msgid "" @@ -4797,6 +6997,12 @@ msgid "" "projects \"Foo\" (with the versions 1.0 and 2.0) and \"bar\" (with the " "version 0.1) You should end up with a structure that looks like::" msgstr "" +"அடைவு தளவமைப்பு மிகவும் எளிமையானது, ஒரு ரூட் கோப்பகத்திற்குள் நீங்கள் ஒவ்வொரு " +"திட்டத்திற்கும் ஒரு கோப்பகத்தை உருவாக்க வேண்டும். இந்த அடைவு பின்வருமாறு: ref: " +"`இயல்பாக்கப்பட்ட பெயர் <பெயர்-இயல்பாக்கம்>` திட்டத்தின். இந்த ஒவ்வொரு கோப்பகத்திலும் தரவிறக்கம் " +"செய்யக்கூடிய ஒவ்வொரு கோப்புகளையும் வைக்கவும். உங்களிடம் \"ஃபூ\" (பதிப்புகள் 1.0 மற்றும் " +"2.0) மற்றும் \"பார்\" (பதிப்பு 0.1 உடன்) திட்டங்கள் இருந்தால், நீங்கள் ஒரு கட்டமைப்போடு " +"முடிவடையும் ::" #: ../source/guides/hosting-your-own-index.rst:50 msgid "" @@ -4805,30 +7011,34 @@ msgid "" "server in `Twisted`_, you would simply run ``twistd -n web --path .`` and " "then instruct users to add the URL to their installer's configuration." msgstr "" +"இந்த தளவமைப்பை நீங்கள் பெற்றவுடன், ஆட்டோஇண்டெக்ச் இயக்கப்பட்ட ரூட் கோப்பகத்தை வழங்க உங்கள் " +"வெப்சர்வரை உள்ளமைக்கவும். `ட்விச்டட்`_ இல் உள்ள கட்டமைக்கப்பட்ட வலை சேவையகத்தைப் " +"பயன்படுத்துவதற்கு, நீங்கள்` `ட்விச்ட்ட் -என் வலை -பாதையை இயக்குவீர்கள் .`` பின்னர் பயனர்கள் " +"தங்கள் நிறுவியின் உள்ளமைவில் முகவரி ஐ சேர்க்க அறிவுறுத்துங்கள்." #: ../source/guides/hosting-your-own-index.rst:57 #: ../source/guides/index-mirrors-and-caches.rst:47 msgid "Existing projects" -msgstr "" +msgstr "தற்போதுள்ள திட்டங்கள்" #: ../source/guides/hosting-your-own-index.rst:63 msgid "Package upload" -msgstr "" +msgstr "தொகுப்பு பதிவேற்றம்" #: ../source/guides/hosting-your-own-index.rst:64 msgid "PyPI fall-through [2]_" -msgstr "" +msgstr "பைபி வீழ்ச்சி-த்ரூ [2] _" #: ../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 "" +msgstr "கூடுதல் குறிப்புகள்" #: ../source/guides/hosting-your-own-index.rst:67 #: ../source/guides/index-mirrors-and-caches.rst:58 msgid ":ref:`devpi`" -msgstr "" +msgstr ": Ref: `devpi`" #: ../source/guides/hosting-your-own-index.rst:68 #: ../source/guides/hosting-your-own-index.rst:69 @@ -4854,81 +7064,81 @@ msgstr "" #: ../source/guides/index-mirrors-and-caches.rst:108 #: ../source/guides/index-mirrors-and-caches.rst:110 msgid "✔" -msgstr "" +msgstr "✔" #: ../source/guides/hosting-your-own-index.rst:70 msgid "" "multiple indexes with inheritance, with syncing, replication, fail-over; " "mirroring" -msgstr "" +msgstr "பரம்பரை கொண்ட பல குறியீடுகள், ஒத்திசைவு, பிரதி, தோல்வி; பிரதிபலிப்பு" #: ../source/guides/hosting-your-own-index.rst:73 #: ../source/guides/index-mirrors-and-caches.rst:71 msgid ":ref:`simpleindex`" -msgstr "" +msgstr ": Ref: `SimpleIndex`" #: ../source/guides/hosting-your-own-index.rst:78 msgid ":ref:`pypiserver`" -msgstr "" +msgstr ": குறிப்பு: `பைபிசெவர்`" #: ../source/guides/hosting-your-own-index.rst:83 msgid ":ref:`pypiprivate`" -msgstr "" +msgstr ": ref: `pypiprivate`" #: ../source/guides/hosting-your-own-index.rst:88 #: ../source/guides/index-mirrors-and-caches.rst:77 msgid ":ref:`pypicloud`" -msgstr "" +msgstr ": Ref: `Pypicloud`" #: ../source/guides/hosting-your-own-index.rst:91 msgid "unmaintained; also cached proxying; authentication, authorisation" -msgstr "" +msgstr "மதிப்பிடப்படாதது; தற்காலிகமாக தற்காலிகமாக சேமிக்கப்பட்டது; ஏற்பு, ஏற்பு" #: ../source/guides/hosting-your-own-index.rst:93 msgid ":ref:`pywharf`" -msgstr "" +msgstr ": ref: `pywharf`" #: ../source/guides/hosting-your-own-index.rst:96 msgid "unmaintained; serve files in GitHub" -msgstr "" +msgstr "மதிப்பிடப்படாதது; கிதுபில் கோப்புகளை பரிமாறவும்" #: ../source/guides/hosting-your-own-index.rst:98 #: ../source/guides/index-mirrors-and-caches.rst:83 msgid ":ref:`pulppython`" -msgstr "" +msgstr ": சிவப்பு: `கூழ் பைதான்`" #: ../source/guides/hosting-your-own-index.rst:101 msgid "also mirroring, proxying; plugin for Pulp" -msgstr "" +msgstr "பிரதிபலிக்கும், ப்ராக்சிங்; கூழ் சொருகி" #: ../source/guides/hosting-your-own-index.rst:103 msgid ":ref:`pip2pi`" -msgstr "" +msgstr ": ref: `Pip2pi`" #: ../source/guides/hosting-your-own-index.rst:106 msgid "also mirroring; manual synchronisation" -msgstr "" +msgstr "மேலும் பிரதிபலிக்கும்; கையேடு ஒத்திசைவு" #: ../source/guides/hosting-your-own-index.rst:108 msgid ":ref:`dumb-pypi`" -msgstr "" +msgstr ": குறிப்பு: `டம்ப்-பைபி`" #: ../source/guides/hosting-your-own-index.rst:111 msgid "not a server, but a static file site generator" -msgstr "" +msgstr "ஒரு சேவையகம் அல்ல, ஆனால் நிலையான கோப்பு தள செனரேட்டர்" #: ../source/guides/hosting-your-own-index.rst:113 msgid ":ref:`httpserver`" -msgstr "" +msgstr ": குறிப்பு: `httpserver`" #: ../source/guides/hosting-your-own-index.rst:116 msgid "standard-library" -msgstr "" +msgstr "நிலையான-நூலகம்" #: ../source/guides/hosting-your-own-index.rst:118 #: ../source/guides/index-mirrors-and-caches.rst:107 msgid "`Apache `_" -msgstr "" +msgstr "`அப்பாச்சி ` _" #: ../source/guides/hosting-your-own-index.rst:121 #: ../source/guides/index-mirrors-and-caches.rst:111 @@ -4938,18 +7148,26 @@ msgid "" "mod_cache_disk.html>`_, you can cache requests to package indexes through an " "Apache server" msgstr "" +"using `mod_rewrite `_ and `mod_cache_disk `_, அப்பாச்சி சேவையகம் மூலம் குறியீடுகளை தொகுப்பு " +"குறியீடுகளுக்கு கேச் செய்யலாம்" #: ../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 "" +"கோரப்பட்ட தொகுப்பு காணவில்லை எனில், PYPI (அல்லது மற்றொரு தொகுப்பு குறியீட்டு) க்கு " +"திரும்புவதற்கு கட்டமைக்க முடியும்." #: ../source/guides/index.rst:4 msgid "" @@ -4957,14 +7175,18 @@ msgid "" "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 "" +msgstr "தொகுப்பு குறியீட்டு கண்ணாடிகள் மற்றும் தற்காலிக சேமிப்புகள்" #: ../source/guides/index-mirrors-and-caches.rst:8 msgid "2023-11-08" -msgstr "" +msgstr "2023-11-08" #: ../source/guides/index-mirrors-and-caches.rst:10 msgid "" @@ -4972,36 +7194,47 @@ msgid "" "Index>`) can be used to speed up local package installation, allow offline " "work, handle corporate firewalls or just plain Internet flakiness." msgstr "" +"PYPI இன் பிரதிபலிப்பு அல்லது தற்காலிக சேமிப்பு (மற்றும் பிற: கால: `தொகுப்பு " +"குறியீடுகள் <தொகுப்பு குறியீட்டு>`) உள்ளக தொகுப்பு நிறுவலை விரைவுபடுத்தவும், " +"இணைப்பில்லாத வேலையை அனுமதிக்கவும், கார்ப்பரேட் ஃபயர்வால்களைக் கையாளவும் அல்லது வெற்று " +"இணையத் துடிப்பு ஆகியவற்றைப் பயன்படுத்தவும் பயன்படுத்தப்படலாம்." #: ../source/guides/index-mirrors-and-caches.rst:15 msgid "There are multiple classes of options in this area:" -msgstr "" +msgstr "இந்த பகுதியில் பல வகை விருப்பங்கள் உள்ளன:" #: ../source/guides/index-mirrors-and-caches.rst:17 msgid "local/hosted caching of package indexes." -msgstr "" +msgstr "தொகுப்பு குறியீடுகளின் உள்ளூர்/ஓச்ட் செய்யப்பட்ட தற்காலிக சேமிப்பு." #: ../source/guides/index-mirrors-and-caches.rst:19 msgid "" "local/hosted mirroring of a package index. A mirror is a (whole or partial) " "copy of a package index, which can be used in place of the original index." msgstr "" +"ஒரு தொகுப்பு குறியீட்டின் உள்ளூர்/ஓச்ட் பிரதிபலிப்பு. ஒரு கண்ணாடி என்பது ஒரு தொகுப்பு " +"குறியீட்டின் ஒரு (முழு அல்லது பகுதி) நகலாகும், இது அசல் குறியீட்டுக்கு பதிலாக " +"பயன்படுத்தப்படலாம்." #: ../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 "" +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 "" @@ -5009,71 +7242,78 @@ msgid "" "downloading all the requirements for a project and then pointing pip at " "those downloaded files instead of going to PyPI." msgstr "" +":ref:`Fast & local installs ` by " +"downloading அனைத்தும் the requirements க்கு a திட்டம் and then pointing pip at " +"those downloaded கோப்புகள் instead of going பெறுநர் PyPI." #: ../source/guides/index-mirrors-and-caches.rst:37 msgid "" "A variation on the above which pre-builds the installation files for the " "requirements using :ref:`python3 -m pip wheel `:" msgstr "" +"பயன்படுத்தும் தேவைகளுக்காக நிறுவல் கோப்புகளை முன்பே கட்டியெழுப்பும் மேலே உள்ள மாறுபாடு: " +"குறிப்பு: `பைதான் 3 -எம் பிப் வீல் <பிப்: பிப் வீல்>`:" #: ../source/guides/index-mirrors-and-caches.rst:53 msgid "Cache" -msgstr "" +msgstr "கேச்" #: ../source/guides/index-mirrors-and-caches.rst:54 msgid "Mirror" -msgstr "" +msgstr "கண்ணாடி" #: ../source/guides/index-mirrors-and-caches.rst:55 msgid "Proxy" -msgstr "" +msgstr "பதிலாள்" #: ../source/guides/index-mirrors-and-caches.rst:62 msgid "" "multiple indexes with inheritance; syncing, replication, fail-over; package " "upload" -msgstr "" +msgstr "பரம்பரை கொண்ட பல குறியீடுகள்; ஒத்திசைவு, பிரதி, தோல்வி; தொகுப்பு பதிவேற்றம்" #: ../source/guides/index-mirrors-and-caches.rst:65 msgid ":ref:`bandersnatch`" -msgstr "" +msgstr ": ref: `bandersnatch`" #: ../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 "" +msgstr "மதிப்பிடப்படாதது; ஏற்பு, ஏற்பு" #: ../source/guides/index-mirrors-and-caches.rst:87 msgid "plugin for Pulp; multiple proxied indexes; package upload" -msgstr "" +msgstr "கூழ் சொருகி; பல ப்ராக்சிட் குறியீடுகள்; தொகுப்பு பதிவேற்றம்" #: ../source/guides/index-mirrors-and-caches.rst:89 msgid ":ref:`proxpi`" -msgstr "" +msgstr ": குறிப்பு: `ப்ராக்ச்பி`" #: ../source/guides/index-mirrors-and-caches.rst:93 #: ../source/guides/index-mirrors-and-caches.rst:99 msgid "multiple proxied indexes" -msgstr "" +msgstr "பல ப்ராக்சிட் குறியீடுகள்" #: ../source/guides/index-mirrors-and-caches.rst:95 msgid ":ref:`nginx_pypi_cache`" -msgstr "" +msgstr ": குறிப்பு: `nginx_pypi_cache`" #: ../source/guides/index-mirrors-and-caches.rst:101 msgid ":ref:`flaskpypiproxy`" -msgstr "" +msgstr ": குறிப்பு: `பிளாச்க்பிபிப்ராக்சி`" #: ../source/guides/index-mirrors-and-caches.rst:105 msgid "unmaintained" -msgstr "" +msgstr "வழங்கப்படாதது" #: ../source/guides/installing-scientific-packages.rst:5 msgid "Installing scientific packages" -msgstr "" +msgstr "அறிவியல் தொகுப்புகளை நிறுவுதல்" #: ../source/guides/installing-scientific-packages.rst:8 msgid "" @@ -5082,6 +7322,9 @@ msgid "" "kinds of hardware, or to interoperate with different pieces of external " "software." msgstr "" +"விஞ்ஞான மென்பொருள் பெரும்பாலானவற்றை விட மிகவும் சிக்கலான சார்புகளைக் கொண்டிருக்கிறது, " +"மேலும் இது பல்வேறு வகையான வன்பொருள்களைப் பயன்படுத்த பல கட்டுமான விருப்பங்களைக் " +"கொண்டிருக்கும், அல்லது வெளிப்புற மென்பொருளின் வெவ்வேறு துண்டுகளுடன் செயல்படுகிறது." #: ../source/guides/installing-scientific-packages.rst:13 msgid "" @@ -5091,6 +7334,10 @@ msgid "" "libraries, and can take advantage of different levels of vectorized " "instructions available in modern CPUs." msgstr "" +"குறிப்பாக, `numpy ` __, இது `அறிவியல் பைதான் அடுக்கில் " +" _ _ _ வெவ்வேறு ஃபோர்டிரான் நூலகங்களுடன் " +"ஒன்றிணைந்து, நவீன சிபியு களில் கிடைக்கும் வெவ்வேறு நிலைகளில் திசையன் வழிமுறைகளைப் " +"பயன்படுத்திக் கொள்ளலாம்." #: ../source/guides/installing-scientific-packages.rst:19 msgid "" @@ -5101,6 +7348,11 @@ msgid "" "atlas.sourceforge.net/>`__ BLAS/LAPACK library, restricted to SSE2 " "instructions, so they may not provide optimal linear algebra performance." msgstr "" +"`` வீல்`` வடிவத்தில் முன்பே கட்டப்பட்ட 32-பிட் மற்றும் 64-பிட் பைனரிகள் அனைத்து முக்கிய " +"இயக்க முறைமைகளுக்கும் (விண்டோச், மேகோச் மற்றும் லினக்ச்) கிடைக்கின்றன பைபியில். " +"இருப்பினும், சாளரங்களில், நம்பி பைனரிகள் `அட்லச் __ __ பிளாச்/லேபாக் நூலகம், எச்எச்இ 2 வழிமுறைகளுக்கு கட்டுப்படுத்தப்பட்டுள்ளன, எனவே " +"அவை உகந்த நேரியல் இயற்கணிதத்தை வழங்காது செயல்திறன்." #: ../source/guides/installing-scientific-packages.rst:26 msgid "" @@ -5109,10 +7361,13 @@ msgid "" "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 "" +msgstr "மூலத்திலிருந்து கட்டிடம்" #: ../source/guides/installing-scientific-packages.rst:34 msgid "" @@ -5122,10 +7377,15 @@ msgid "" "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 "" +msgstr "லினக்ச் விநியோக தொகுப்புகள்" #: ../source/guides/installing-scientific-packages.rst:44 msgid "" @@ -5133,6 +7393,9 @@ msgid "" "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 "" @@ -5141,10 +7404,13 @@ msgid "" "distributions installed into the system Python when using virtual " "environments)." msgstr "" +"பல மாதங்கள் பழமையான பதிப்புகளைப் பயன்படுத்துவது ஏற்றுக்கொள்ளத்தக்கது என்றால், இது ஒரு நல்ல " +"தேர்வாக இருக்கக்கூடும் (மெய்நிகர் சூழல்களைப் பயன்படுத்தும் போது கணினி பைத்தானில் " +"நிறுவப்பட்ட விநியோகங்களை அணுக அனுமதிப்பதை உறுதிசெய்க)." #: ../source/guides/installing-scientific-packages.rst:54 msgid "Windows installers" -msgstr "" +msgstr "சாளரங்கள் நிறுவிகள்" #: ../source/guides/installing-scientific-packages.rst:56 msgid "" @@ -5153,12 +7419,18 @@ msgid "" "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 "" +"இந்த நிறுவிகளில் வழங்கப்பட்ட நீட்டிப்புகள் பொதுவாக python.org இல் வெளியிடப்பட்ட CPyThon " +"சாளரங்கள் நிறுவிகளுடன் இணக்கமாக இருக்கும்." #: ../source/guides/installing-scientific-packages.rst:64 msgid "" @@ -5168,6 +7440,10 @@ msgid "" "Python when using virtual environments is a common approach to working " "around this limitation." msgstr "" +"லினக்ச் கணினி தொகுப்புகளைப் போலவே, சாளரங்கள் நிறுவிகள் கணினி பைதான் நிறுவலில் மட்டுமே " +"நிறுவப்படும் - அவை மெய்நிகர் சூழல்களில் நிறுவலை ஆதரிக்காது. மெய்நிகர் சூழல்களைப் " +"பயன்படுத்தும் போது கணினி பைத்தானில் நிறுவப்பட்ட விநியோகங்களை அணுக அனுமதிப்பது இந்த " +"வரம்பைச் சுற்றி செயல்படுவதற்கான பொதுவான அணுகுமுறையாகும்." #: ../source/guides/installing-scientific-packages.rst:70 msgid "" @@ -5175,10 +7451,12 @@ msgid "" "subcommand that can convert a Windows :command:`bdist_wininst` installer to " "a wheel." msgstr "" +"தி: கால: `வீல்` திட்டம் ஒரு விண்டோசை மாற்றக்கூடிய ஒரு: கட்டளை:` சக்கர மாற்றுதல் துணைக் " +"கட்டளை: கட்டளை: `bdist_wininst` நிறுவி ஒரு சக்கரத்திற்கு." #: ../source/guides/installing-scientific-packages.rst:77 msgid "macOS installers and package managers" -msgstr "" +msgstr "மேகோச் நிறுவிகள் மற்றும் தொகுப்பு மேலாளர்கள்" #: ../source/guides/installing-scientific-packages.rst:79 msgid "" @@ -5186,6 +7464,9 @@ msgid "" "macOS installers that are compatible with the macOS CPython binaries " "published on python.org." msgstr "" +"விண்டோசின் நிலைமையைப் போலவே, பல திட்டங்கள் (NUMPY உட்பட) MACOS நிறுவிகளை " +"வெளியிடுகின்றன, அவை பைதான்.ஆர்சில் வெளியிடப்பட்ட மேகோச் சிபிதான் பைனரிகளுடன் இணக்கமாக " +"உள்ளன." #: ../source/guides/installing-scientific-packages.rst:83 msgid "" @@ -5193,10 +7474,13 @@ msgid "" "such as ``Homebrew``. The SciPy site has more details on using Homebrew to " "`install SciPy on macOS `_." msgstr "" +"மேகோச் பயனர்கள் `` ஓம் ப்ரூ`` போன்ற லினக்ச் விநியோக பாணி தொகுப்பு மேலாளர்களுக்கும் " +"அணுகலைக் கொண்டுள்ளனர். மேகோச் `_ இல் SCIPY ஐ " +"நிறுவ ஓம் ப்ரூவைப் பயன்படுத்துவது பற்றிய கூடுதல் விவரங்கள் SCIPY தளத்தில் உள்ளன." #: ../source/guides/installing-scientific-packages.rst:89 msgid "SciPy distributions" -msgstr "" +msgstr "சுறுசுறுப்பான வழங்கல்" #: ../source/guides/installing-scientific-packages.rst:91 msgid "" @@ -5204,17 +7488,21 @@ msgid "" "that provide the full SciPy stack to end users in an easy to use and update " "format." msgstr "" +"SCIPY தளம் `பல விநியோகங்களை பட்டியலிடுகிறது ` _ இது " +"பயனர்களை எளிதாகப் பயன்படுத்தவும் புதுப்பிக்கவும் முழு ச்கிப்பி அடுக்கை வழங்குகிறது." #: ../source/guides/installing-scientific-packages.rst:96 msgid "" "Some of these distributions may not be compatible with the standard ``pip`` " "and ``virtualenv`` based toolchain." msgstr "" +"இந்த விநியோகங்களில் சில நிலையான `` பிஐபி`` மற்றும் `` மெய்நிகர்என்.வி`` அடிப்படையிலான " +"கருவித்தொகுப்புடன் பொருந்தாது." #: ../source/guides/installing-scientific-packages.rst:100 #: ../source/key_projects.rst:812 msgid "Spack" -msgstr "" +msgstr "ச்பேர்ட்" #: ../source/guides/installing-scientific-packages.rst:101 msgid "" @@ -5227,6 +7515,14 @@ msgid "" "destructive; installing a new version of one package does not break existing " "installations, so many configurations can coexist on the same system." msgstr "" +"`ச்பேக் ` _ என்பது பல பதிப்புகள், உள்ளமைவுகள், " +"தளங்கள் மற்றும் கம்பைலர்களை ஆதரிக்க வடிவமைக்கப்பட்ட ஒரு நெகிழ்வான தொகுப்பு மேலாளராகும். " +"பெரிய சூப்பர் கம்ப்யூட்டிங் மையங்கள் மற்றும் அறிவியல் பயன்பாட்டுக் குழுக்களின் தேவைகளை " +"ஆதரிப்பதற்காக இது கட்டப்பட்டது, அவர்கள் பெரும்பாலும் மென்பொருளை பல வழிகளில் உருவாக்க " +"வேண்டும். ச்பேக் பைத்தானுக்கு மட்டுப்படுத்தப்படவில்லை; இது `` c``, `` c ++ ``, `` " +"ஃபோர்ட்ரான்``, `` r`` மற்றும் பிற மொழிகளுக்கான தொகுப்புகளை நிறுவ முடியும். இது " +"அழிவில்லாதது; ஒரு தொகுப்பின் புதிய பதிப்பை நிறுவுவது ஏற்கனவே உள்ள நிறுவல்களை " +"உடைக்காது, எனவே பல உள்ளமைவுகள் ஒரே கணினியில் இணைந்து வாழ முடியும்." #: ../source/guides/installing-scientific-packages.rst:110 msgid "" @@ -5237,10 +7533,16 @@ msgid "" "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 "" +msgstr "காண்டா குறுக்கு-தளம் தொகுப்பு மேலாளர்" #: ../source/guides/installing-scientific-packages.rst:121 msgid "" @@ -5256,6 +7558,17 @@ msgid "" "package, so that :command:`conda update python` is possible, in contrast to " "pip, which only manages Python packages." msgstr "" +"`` காண்டா`` என்பது ஒரு திறந்த மூல (பி.எச்.டி உரிமம் பெற்ற) தொகுப்பு மேலாண்மை அமைப்பு " +"மற்றும் சுற்றுச்சூழல் மேலாண்மை அமைப்பு, இது பைனரி மென்பொருள் தொகுப்புகளின் பல " +"பதிப்புகளையும் அவற்றின் சார்புகளையும் நிறுவ பயனர்களை அனுமதிக்கிறது, மேலும் அவற்றுக்கு " +"இடையில் எளிதாக மாறுகிறது. இது சாளரங்கள், மேகோச் மற்றும் லினக்சில் பணிபுரியும் குறுக்கு-" +"தளம் கருவியாகும். அனைத்து வகையான தொகுப்புகளையும் தொகுத்து விநியோகிக்க கான்டாவைப் " +"பயன்படுத்தலாம், இது பைதான் தொகுப்புகளுக்கு மட்டுப்படுத்தப்படவில்லை. இது சொந்த மெய்நிகர் " +"சூழல்களுக்கு முழு ஆதரவைக் கொண்டுள்ளது. காண்டா சூழல்களை முதல் தர குடிமக்களை " +"உருவாக்குகிறது, இது சி நூலகங்களுக்கு கூட சுயாதீனமான சூழல்களை உருவாக்குவதை " +"எளிதாக்குகிறது. இது பைத்தானில் எழுதப்பட்டுள்ளது, ஆனால் பைதான்-அஞ்ஞானியாகும். காண்டா " +"பைத்தானை ஒரு தொகுப்பாக நிர்வகிக்கிறார், அதனால்: கட்டளை: `காண்டா புதுப்பிப்பு பைதான்` " +"சாத்தியமாகும், இது PITHON தொகுப்புகளை மட்டுமே நிர்வகிக்கிறது." #: ../source/guides/installing-scientific-packages.rst:133 msgid "" @@ -5264,6 +7577,8 @@ msgid "" "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 "" @@ -5272,6 +7587,9 @@ msgid "" "miniconda/>`_, `miniforge `_, and " "`pixi `_." msgstr "" +"அனகோண்டா வழங்கிய முழு விநியோகத்திற்கு கூடுதலாக, காண்டா தொகுப்பு மேலாளர் `மினிகொண்டா " +"` _, `மினிஃபார்ச் `_, மற்றும்` பிக்சி `_." #: ../source/guides/installing-scientific-packages.rst:138 msgid "" @@ -5280,10 +7598,14 @@ msgid "" "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 "" +msgstr "ச்டாண்ட் தனியாக கட்டளை வரி கருவிகளை நிறுவுதல்" #: ../source/guides/installing-stand-alone-command-line-tools.rst:6 msgid "" @@ -5291,6 +7613,10 @@ msgid "" "are `mypy `_, `flake8 `_, `black `_, and :ref:`pipenv`." msgstr "" +"பல தொகுப்புகள் கட்டளை வரி பயன்பாடுகளை வழங்குகின்றன. அத்தகைய தொகுப்புகளின் " +"எடுத்துக்காட்டுகள் `mypy ` _, `flake8 ` _, `கருப்பு `_, " +"மற்றும்: ref:` pipenv`." #: ../source/guides/installing-stand-alone-command-line-tools.rst:12 msgid "" @@ -5299,6 +7625,10 @@ msgid "" "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 "" @@ -5308,73 +7638,86 @@ msgid "" "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 "" +msgstr "பிஐபிஎக்ச் பைதான் 3.6+ உடன் மட்டுமே வேலை செய்கிறது." #: ../source/guides/installing-stand-alone-command-line-tools.rst:25 msgid "pipx is installed with pip:" -msgstr "" +msgstr "PIPX PIP உடன் நிறுவப்பட்டுள்ளது:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:43 msgid "" "``ensurepath`` ensures that the application directory is on your ``$PATH``. " "You may need to restart your terminal for this update to take effect." msgstr "" +"`` உறுதிப்படுத்தவும் `` பயன்பாட்டு அடைவு உங்கள் `` $ பாதை`` ஐ உறுதி செய்கிறது. இந்த " +"புதுப்பிப்பு நடைமுறைக்கு வர உங்கள் முனையத்தை மறுதொடக்கம் செய்ய வேண்டியிருக்கலாம்." #: ../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 "" +msgstr "உதாரணமாக:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:76 msgid "" "To see a list of packages installed with pipx and which applications are " "available, use ``pipx list``:" msgstr "" +"PIPX உடன் நிறுவப்பட்ட தொகுப்புகளின் பட்டியலைக் காண மற்றும் எந்த பயன்பாடுகள் கிடைக்கின்றன " +"என்பதைக் காண, `` PIPX பட்டியல்`` ஐப் பயன்படுத்தவும்:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:100 msgid "To upgrade or uninstall a package:" -msgstr "" +msgstr "ஒரு தொகுப்பை மேம்படுத்த அல்லது நிறுவல் நீக்க:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:107 msgid "pipx can be upgraded or uninstalled with pip:" -msgstr "" +msgstr "PIPX ஐ மேம்படுத்தலாம் அல்லது PIP உடன் நிறுவல் நீக்கலாம்:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:123 msgid "" "pipx also allows you to install and run the latest version of an application " "in a temporary, ephemeral environment. For example:" msgstr "" +"ஒரு பயன்பாட்டின் அண்மைக் கால பதிப்பை தற்காலிக, இடைக்கால சூழலில் நிறுவவும் இயக்கவும் PIPX " +"உங்களை அனுமதிக்கிறது. உதாரணமாக:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:130 msgid "To see the full list of commands pipx offers, run:" -msgstr "" +msgstr "பிப்எக்ச் வழங்கும் கட்டளைகளின் முழு பட்டியலையும் காண, இயக்கவும்:" #: ../source/guides/installing-stand-alone-command-line-tools.rst:136 msgid "You can learn more about pipx at https://pipx.pypa.io/." -msgstr "" +msgstr "PIPX பற்றி https://pipx.pypa.io/ இல் மேலும் அறியலாம்." #: ../source/guides/installing-using-linux-tools.rst:5 msgid "Installing pip/setuptools/wheel with Linux Package Managers" -msgstr "" +msgstr "லினக்ச் தொகுப்பு மேலாளர்களுடன் PIP/Setuptools/whle ஐ நிறுவுதல்" #: ../source/guides/installing-using-linux-tools.rst:8 msgid "2021-07-26" -msgstr "" +msgstr "2021-07-26" #: ../source/guides/installing-using-linux-tools.rst:10 msgid "" "This section covers how to install :ref:`pip`, :ref:`setuptools`, and :ref:" "`wheel` using Linux package managers." msgstr "" +"இந்த பிரிவு எவ்வாறு நிறுவுவது என்பதை உள்ளடக்கியது: குறிப்பு: `பிப்`,: ref:` " +"setuptools`, மற்றும்: Ref: `whel` லினக்ச் தொகுப்பு மேலாளர்களைப் பயன்படுத்துதல்." #: ../source/guides/installing-using-linux-tools.rst:13 msgid "" @@ -5382,6 +7725,9 @@ msgid "" "python.org>`_, then this section does not apply. See the :ref:" "`installing_requirements` section instead." msgstr "" +"`Python.org _ _ இலிருந்து பதிவிறக்கம் செய்யப்பட்ட பைதானைப் " +"பயன்படுத்துகிறீர்கள் என்றால், இந்த பிரிவு பொருந்தாது. இதைக் காண்க: ref: " +"`நிறுவுதல்_ரொக்விரெமென்ட்ச்` பிரிவு." #: ../source/guides/installing-using-linux-tools.rst:17 msgid "" @@ -5392,6 +7738,12 @@ msgid "" "there are additional repositories that can be enabled to provide newer " "versions. The repositories we know about are explained below." msgstr "" +"இதன் பதிப்புகளுக்கு இது பொதுவானது: ref: `பிப்`,: ref:` setuptools`, மற்றும்: ref: " +"`சக்கரம்` ஒரு குறிப்பிட்ட லினக்ச் விநியோகத்தால் ஆதரிக்கப்படுகிறது, அது பொதுமக்களுக்கு " +"வெளியிடப்பட்ட நேரத்தில் காலாவதியானது, பொதுவாக புதுப்பிப்புகள் பாதுகாப்பு " +"காரணங்களுக்காக மட்டுமே நிகழ்கிறது, அம்ச புதுப்பிப்புகளுக்கு அல்ல. சில விநியோகங்களுக்கு, " +"புதிய பதிப்புகளை வழங்க கூடுதல் களஞ்சியங்கள் இயக்கப்படலாம். எங்களுக்குத் தெரிந்த களஞ்சியங்கள் " +"கீழே விளக்கப்பட்டுள்ளன." #: ../source/guides/installing-using-linux-tools.rst:24 msgid "" @@ -5401,30 +7753,38 @@ msgid "" "original unpatched versions. When this is known, we will make note of it " "below." msgstr "" +"பாதுகாப்பு மற்றும் இயல்பாக்குதலுக்காக தங்கள் சொந்த தரங்களுக்கு விநியோகங்கள் இணைப்புகளைப் " +"பயன்படுத்துவது ஓரளவு பொதுவானது என்பதையும் நினைவில் கொள்க. சில சந்தர்ப்பங்களில், இது அசல் " +"இணைக்கப்படாத பதிப்புகளிலிருந்து மாறுபடும் பிழைகள் அல்லது எதிர்பாராத நடத்தைகளுக்கு " +"வழிவகுக்கும். இது அறியப்படும்போது, அதை கீழே குறிப்பிடுவோம்." #: ../source/guides/installing-using-linux-tools.rst:31 msgid "Fedora" -msgstr "" +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 "" +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 "" +"சென்டோச் மற்றும் ரெல் வழங்கவில்லை: குறிப்பு: `பிப்` அல்லது: Ref:` வீல்` அவர்களின் முக்கிய " +"களஞ்சியங்களில், இருப்பினும்: Ref: `setuptools` இயல்பாக நிறுவப்பட்டுள்ளது." #: ../source/guides/installing-using-linux-tools.rst:50 msgid "To install pip and wheel for the system Python, there are two options:" -msgstr "" +msgstr "கணினி பைத்தானுக்கு பிஐபி மற்றும் சக்கரத்தை நிறுவ, இரண்டு விருப்பங்கள் உள்ளன:" #: ../source/guides/installing-using-linux-tools.rst:52 msgid "" @@ -5432,12 +7792,17 @@ msgid "" "`these instructions `__. On EPEL 7, you can install pip and wheel like so:" msgstr "" +"`எபல் களஞ்சியத்தை ` _ இந்த வழிமுறைகளைப் " +"பயன்படுத்தி __. " +"எபல் 7 இல், நீங்கள் பிப் மற்றும் வீலை நிறுவலாம்:" #: ../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 "" @@ -5446,36 +7811,45 @@ msgid "" "Infrastructure/Fedorahosted-retirement>`__ [1]_. You can install pip and " "wheel like so:" msgstr "" +"`பைபா கோப்ர் ரெப்போ ` _ " +"`இந்த வழிமுறைகளைப் பயன்படுத்துதல் _ _ _` இணையாக-உள்ள-நிறுவல் `_ பைதான்ச் ஆகியவற்றில் ஒன்றை நிறுவவும் " +"பிப், செடுப்டூல்கள் மற்றும் சக்கரம், அவை மிகவும் புதுப்பித்த நிலையில் உள்ளன." #: ../source/guides/installing-using-linux-tools.rst:100 msgid "For example, for Python 3.4 on CentOS7/RHEL7:" -msgstr "" +msgstr "எடுத்துக்காட்டாக, centos7/Rhel7 இல் பைதான் 3.4 க்கு:" #: ../source/guides/installing-using-linux-tools.rst:108 msgid "openSUSE" -msgstr "" +msgstr "OpenSuse" #: ../source/guides/installing-using-linux-tools.rst:118 msgid "Debian/Ubuntu and derivatives" -msgstr "" +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 "" @@ -5507,20 +7886,26 @@ msgid "" "`_ 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 "" +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 "" +msgstr "PIP மற்றும் WENV ஐப் பயன்படுத்தி மெய்நிகர் சூழலில் தொகுப்புகளை நிறுவவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:4 msgid "" @@ -5528,28 +7913,33 @@ msgid "" "the standard library's virtual environment tool :ref:`venv` and install " "packages. The guide covers how to:" msgstr "" +"இந்த வழிகாட்டி நிலையான நூலகத்தின் மெய்நிகர் சூழல் கருவியைப் பயன்படுத்தி ஒரு மெய்நிகர் " +"சூழலை எவ்வாறு உருவாக்குவது மற்றும் செயல்படுத்துவது என்பதை விவாதிக்கிறது: ref: `VEV` " +"மற்றும் தொகுப்புகளை நிறுவுதல். வழிகாட்டி எப்படி என்பதை உள்ளடக்கியது:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:8 msgid "Create and activate a virtual environment" -msgstr "" +msgstr "மெய்நிகர் சூழலை உருவாக்கி செயல்படுத்தவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:9 #: ../source/guides/installing-using-pip-and-virtual-environments.rst:153 msgid "Prepare pip" -msgstr "" +msgstr "பிப் தயாரிக்கவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:10 msgid "Install packages into a virtual environment using the ``pip`` command" -msgstr "" +msgstr "`` பிப்`` கட்டளையைப் பயன்படுத்தி மெய்நிகர் சூழலில் தொகுப்புகளை நிறுவவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:11 msgid "Use and create a requirements file" -msgstr "" +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 "" +"இந்த வழிகாட்டி தற்போது 3.8 மற்றும் அதற்கு மேற்பட்ட பைத்தானின் ஆதரிக்கப்பட்ட பதிப்புகளுக்கு " +"பொருந்தும்." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:18 msgid "" @@ -5558,6 +7948,10 @@ msgid "" "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 "" @@ -5566,14 +7960,18 @@ msgid "" "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 "" +msgstr "மெய்நிகர் சூழல்களை உருவாக்கி பயன்படுத்தவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:35 msgid "Create a new virtual environment" -msgstr "" +msgstr "புதிய மெய்நிகர் சூழலை உருவாக்கவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:37 msgid "" @@ -5584,12 +7982,18 @@ msgid "" "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 "" @@ -5597,27 +8001,33 @@ msgid "" "following command. This will create a new virtual environment in a local " "folder named ``.venv``:" msgstr "" +"மெய்நிகர் சூழலை உருவாக்க, உங்கள் திட்டத்தின் கோப்பகத்திற்குச் சென்று பின்வரும் கட்டளையை " +"இயக்கவும். இது `` .venv`` என்ற உள்ளக கோப்புறையில் புதிய மெய்நிகர் சூழலை உருவாக்கும்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:64 msgid "" "The second argument is the location to create the virtual environment. " "Generally, you can just create this in your project and call it ``.venv``." msgstr "" +"இரண்டாவது உரையாடல் மெய்நிகர் சூழலை உருவாக்குவதற்கான இடம். பொதுவாக, இதை உங்கள் " +"திட்டத்தில் உருவாக்கி `` .venv`` என்று அழைக்கலாம்." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:67 msgid "" "``venv`` will create a virtual Python installation in the ``.venv`` folder." -msgstr "" +msgstr "`` .venv`` கோப்புறையில் ஒரு மெய்நிகர் பைதான் நிறுவலை உருவாக்கும் `` vev``." #: ../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 "" +"உங்கள் மெய்நிகர் சுற்றுச்சூழல் கோப்பகத்தை உங்கள் பதிப்பு கட்டுப்பாட்டு அமைப்பிலிருந்து `` ." +"gitignore`` அல்லது அதற்கு ஒத்ததாக விலக்க வேண்டும்." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:74 msgid "Activate a virtual environment" -msgstr "" +msgstr "மெய்நிகர் சூழலை செயல்படுத்தவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:76 msgid "" @@ -5626,18 +8036,25 @@ msgid "" "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 "" +"மெய்நிகர் சூழல் செயலில் இருக்கும்போது, மேற்கண்ட கட்டளை பின்வருவனவற்றுடன் முடிவடைவதன் மூலம் " +"`` .venv`` கோப்பகத்தை உள்ளடக்கிய ஒரு கோப்பு இடத்தை வெளியிடும்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:124 msgid "" @@ -5645,26 +8062,33 @@ msgid "" "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 "" +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 "" +msgstr "மெய்நிகர் சூழலை மீண்டும் செயல்படுத்தவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:147 msgid "" @@ -5672,12 +8096,17 @@ msgid "" "instructions about activating a virtual environment. There's no need to " "create a new virtual environment." msgstr "" +"ஏற்கனவே உள்ள மெய்நிகர் சூழலை மீண்டும் செயல்படுத்த விரும்பினால், மெய்நிகர் சூழலை " +"செயல்படுத்துவது குறித்த அதே வழிமுறைகளைப் பின்பற்றவும். புதிய மெய்நிகர் சூழலை உருவாக்க " +"வேண்டிய அவசியமில்லை." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:155 msgid "" ":ref:`pip` is the reference Python package manager. It's used to install and " "update packages into a virtual environment." msgstr "" +": குறிப்பு: `பிப்` என்பது குறிப்பு பைதான் தொகுப்பு மேலாளர். தொகுப்புகளை மெய்நிகர் " +"சூழலில் நிறுவவும் புதுப்பிக்கவும் இது பயன்படுகிறது." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:161 msgid "" @@ -5685,51 +8114,62 @@ msgid "" "install an additional package such as ``python3-pip``. You can make sure " "that pip is up-to-date by running:" msgstr "" +"MACOS க்கான பைதான் நிறுவிகளில் PIP அடங்கும். லினக்சில், `` பைதான் 3-பிப்`` போன்ற " +"கூடுதல் தொகுப்பை நீங்கள் நிறுவ வேண்டியிருக்கும். இயங்குவதன் மூலம் பிஐபி புதுப்பித்த " +"நிலையில் இருப்பதை நீங்கள் உறுதிப்படுத்திக் கொள்ளலாம்:" #: ../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 "" +msgstr "பின்னர், உங்கள் பயனர் தளத்தில் PIP இன் அண்மைக் கால பதிப்பை நிறுவ வேண்டும்:" #: ../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 "" +msgstr "பின்னர், PIP இன் அண்மைக் கால பதிப்பு உங்களிடம் இருக்க வேண்டும்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:195 msgid "Install packages using pip" -msgstr "" +msgstr "PIP ஐப் பயன்படுத்தி தொகுப்புகளை நிறுவவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:197 msgid "" "When your virtual environment is activated, you can install packages. Use " "the ``pip install`` command to install packages." msgstr "" +"உங்கள் மெய்நிகர் சூழல் செயல்படுத்தப்படும்போது, நீங்கள் தொகுப்புகளை நிறுவலாம். தொகுப்புகளை " +"நிறுவ `` பிஐபி நிறுவல்` கட்டளையைப் பயன்படுத்தவும்." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:201 msgid "Install a package" -msgstr "" +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 "" +"எடுத்துக்காட்டாக, `கோரிக்கைகள்`_ நூலகத்தை நிறுவுவோம்: கால:` பைதான் தொகுப்பு குறியீட்டு " +"(PYPI) `:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:218 msgid "" "pip should download requests and all of its dependencies and install them:" msgstr "" +"பிஐபி கோரிக்கைகள் மற்றும் அதன் அனைத்து சார்புகளையும் பதிவிறக்கம் செய்து அவற்றை நிறுவ " +"வேண்டும்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:239 msgid "Install a specific package version" -msgstr "" +msgstr "ஒரு குறிப்பிட்ட தொகுப்பு பதிப்பை நிறுவவும்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:241 msgid "" @@ -5737,34 +8177,42 @@ msgid "" "`version specifiers `. For example, to install a specific " "version of ``requests``:" msgstr "" +"ஒரு தொகுப்பின் எந்த பதிப்பை நிறுவ வேண்டும் என்பதைக் குறிப்பிட PIP உங்களை அனுமதிக்கிறது: " +"கால: `பதிப்பு விவரக்குறிப்புகள் <பதிப்பு விவரக்குறிப்பு>`. எடுத்துக்காட்டாக, `` " +"கோரிக்கைகள்`` இன் குறிப்பிட்ட பதிப்பை நிறுவ:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:257 msgid "To install the latest ``2.x`` release of requests:" -msgstr "" +msgstr "கோரிக்கைகளின் அண்மைக் கால `` 2.x`` வெளியீட்டை நிறுவ:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:271 msgid "To install pre-release versions of packages, use the ``--pre`` flag:" msgstr "" +"தொகுப்புகளின் முன் வெளியீட்டு பதிப்புகளை நிறுவ, `` --pre`` கொடியைப் பயன்படுத்தவும்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:287 msgid "Install extras" -msgstr "" +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 "" +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 "" +"பிஐபி அதன் மூலக் குறியீட்டிலிருந்து நேரடியாக ஒரு தொகுப்பை நிறுவ முடியும். " +"எடுத்துக்காட்டாக, மூலக் குறியீட்டை `` Google-auth`` கோப்பகத்தில் நிறுவ:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:328 msgid "" @@ -5773,32 +8221,41 @@ msgid "" "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 "" +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 "" +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 "" +"உங்களிடம் ஒரு உள்ளக நகல் இருந்தால்: கால: `விநியோக தொகுப்பின் காப்பகம் (ஒரு சிப், சக்கரம் " +"அல்லது தார் கோப்பு) அதை நேரடியாக PIP உடன் நிறுவலாம்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:378 msgid "" @@ -5806,6 +8263,9 @@ msgid "" "tell pip to look for packages there and not to use the :term:`Python Package " "Index (PyPI)` at all:" msgstr "" +"பல தொகுப்புகளின் காப்பகங்களைக் கொண்ட ஒரு அடைவு உங்களிடம் இருந்தால், நீங்கள் அங்கு " +"தொகுப்புகளைத் தேடும்படி பைப்பிடம் சொல்லலாம், மேலும் பயன்படுத்த வேண்டாம்: கால: `பைதான் " +"தொகுப்பு குறியீட்டு (PYPI)`." #: ../source/guides/installing-using-pip-and-virtual-environments.rst:394 msgid "" @@ -5813,16 +8273,20 @@ msgid "" "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 "" +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 "" +"இதை விட வேறு குறியீட்டிலிருந்து தொகுப்புகளை பதிவிறக்கம் செய்ய விரும்பினால்: கால: " +"`பைதான் தொகுப்பு குறியீட்டு (PYPI)`, நீங்கள் `` --index-url`` கொடியைப் பயன்படுத்தலாம்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:417 msgid "" @@ -5830,21 +8294,27 @@ msgid "" "(PyPI)` and a separate index, you can use the ``--extra-index-url`` flag " "instead:" msgstr "" +"இரண்டிலிருந்தும் தொகுப்புகளை அனுமதிக்க விரும்பினால்: சொல்: `பைதான் தொகுப்பு குறியீட்டு " +"(PYPI)` மற்றும் ஒரு தனி குறியீட்டை, அதற்கு பதிலாக `` --extra-index-url`` கொடியைப் " +"பயன்படுத்தலாம்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:434 #: ../source/tutorials/installing-packages.rst:393 msgid "Upgrading packages" -msgstr "" +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 "" +"பிஐபி `` --upgrade`` கொடியைப் பயன்படுத்தி தொகுப்புகளை மேம்படுத்தலாம். " +"எடுத்துக்காட்டாக, `` கோரிக்கைகள்`` மற்றும் அதன் அனைத்து சார்புகளின் அண்மைக் கால பதிப்பையும் " +"நிறுவ:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:452 msgid "Using a requirements file" -msgstr "" +msgstr "தேவைகள் கோப்பைப் பயன்படுத்துதல்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:454 msgid "" @@ -5852,26 +8322,33 @@ msgid "" "dependencies in a :ref:`Requirements File `. For " "example you could create a :file:`requirements.txt` file containing:" msgstr "" +"தொகுப்புகளை தனித்தனியாக நிறுவுவதற்கு பதிலாக, அனைத்து சார்புகளையும் A: Ref: `தேவைகள் " +"கோப்பு ` இல் அறிவிக்க PIP உங்களை அனுமதிக்கிறது. " +"எடுத்துக்காட்டாக, நீங்கள் ஒரு: கோப்பு: `தேவைகள். TXT` கோப்பு:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:463 msgid "" "And tell pip to install all of the packages in this file using the ``-r`` " "flag:" msgstr "" +"`` -R`` கொடியைப் பயன்படுத்தி இந்த கோப்பில் உள்ள அனைத்து தொகுப்புகளையும் நிறுவ பைப்பிடம் " +"சொல்லுங்கள்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:478 msgid "Freezing dependencies" -msgstr "" +msgstr "உறைபனி சார்புகள்" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:480 msgid "" "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 "" +msgstr "இது போன்ற தொகுப்பு குறிப்பான்களின் பட்டியலை வெளியிடும்:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:511 msgid "" @@ -5879,16 +8356,22 @@ msgid "" "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 "" +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 "" +"இந்த வழிகாட்டி பயன்படுத்தி தொகுப்புகளை எவ்வாறு நிறுவுவது என்பதை விவாதிக்கிறது: ref: " +"`PIP` மற்றும்: Ref:` Virtualenv`, தனிமைப்படுத்தப்பட்ட பைதான் சூழல்களை உருவாக்குவதற்கான " +"ஒரு கருவி." #: ../source/guides/installing-using-virtualenv.rst:8 msgid "" @@ -5896,6 +8379,9 @@ msgid "" "under development. Please refer to the :ref:`virtualenv` documentation for " "details on installation and usage." msgstr "" +"தொகுப்புகளை நிறுவுவதற்கும் பயன்படுத்துவதற்கும் இந்த \"எப்படி\" வழிகாட்டுதல்: குறிப்பு: " +"`மெய்நிகர்என்வ்` வளர்ச்சியில் உள்ளது. நிறுவல் மற்றும் பயன்பாடு குறித்த விவரங்களுக்கு: ref: " +"`மெய்நிகர்என்வ்` ஆவணங்களை தயவுசெய்து பார்க்கவும்." #: ../source/guides/installing-using-virtualenv.rst:13 msgid "" @@ -5903,10 +8389,460 @@ msgid "" "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 +#, fuzzy +#| 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." +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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" +". இந்த ஆவணம் உரிமைகளை அறிவிக்கும் தரப்படுத்தப்பட்ட வழிக்கு மரபுரிமையிலிருந்து எவ்வாறு " +"குடிபெயர்வது என்பதை தெளிவான வழிகாட்டுதலை வழங்குவதை நோக்கமாகக் கொண்டுள்ளது." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "உரிம எடுத்துக்காட்டுகள்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "அடிப்படை எடுத்துக்காட்டு" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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 "" +"`பதிப்பு 75.6.0 __ __, அதன் சொந்த திட்ட மூல மெட்டாடேட்டாவில்` " +"`உரிமம்`` புலத்தைப் பயன்படுத்தாது. மேலும், இது முன்னர் செய்ததைப் போலவே `` உரிமம்_பீல்``/" +"`உரிமம்_பில்கள்`` ஐ இனி வெளிப்படையாகக் குறிப்பிடவில்லை, ஏனெனில் செடுப்டூல்ச் அதன் சொந்த " +"உரிமம் தொடர்பான கோப்புகளை தானாகவே சேர்ப்பதை நம்பியுள்ளது:` உரிமம்` கோப்பு போன்ற " +"பொதுவான வடிவங்களுடன் பொருந்துகிறது இது பயன்படுத்துகிறது." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" +"இது அதன் பின்வரும் உரிமம் தொடர்பான மெட்டாடேட்டாவை உள்ளடக்கியது: கோப்பு: `pyproject." +"toml`:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" +"PEP 639 க்கு எளிமையான இடம்பெயர்வு இதற்கு பதிலாக இதைப் பயன்படுத்துவதைக் கொண்டிருக்கும்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" +"அல்லது, திட்டம் பயன்படுத்தப்பட்டால்: கோப்பு: `setup.cfg`, அதன்` `[மெட்டாடேட்டா]` `அட்டவணை:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "விநியோக தொகுப்புகளுக்கான வெளியீட்டு கோர் மேனிலை தரவு பின்னர்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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 "" +"The: கோப்பு: `உரிமம்` கோப்பு இங்கே சேமிக்கப்படும்: கோப்பு:`/setuptools- {VERSION}/" +"உரிமம்` SDIST இல் மற்றும்: கோப்பு: `/setuptools- {VERSION} .dist-info/உரிமங்கள்/" +"உரிமம்` இல் சக்கரம், மற்றும் அங்கிருந்து தள கோப்பகத்தில் (எ.கா.: கோப்பு: `தள-பேக்கேச்கள்/`) " +"நிறுவலில் திறக்கப்படவில்லை; ." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:75 +msgid "Advanced example" +msgstr "மேம்பட்ட எடுத்துக்காட்டு" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +msgid "" +"Suppose Setuptools were to include the licenses of the third-party projects " +"that are vendored in the :file:`setuptools/_vendor/` and :file:" +"`pkg_resources/_vendor/` directories; specifically:" +msgstr "" +"செடிப்டூல்ச் மூன்றாம் தரப்பு திட்டங்களின் உரிமங்களை உள்ளடக்கியது என்று வைத்துக்கொள்வோம்: " +"கோப்பு: `setuptools/_vendor/` மற்றும்: கோப்பு: `pkg_resources/_vendor/` " +"கோப்பகங்கள்; குறிப்பாக:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:88 +msgid "The license expressions for these projects are:" +msgstr "இந்த திட்டங்களுக்கான உரிம வெளிப்பாடுகள்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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 "" +"கூடுதலாக, உரிமங்களின் தேவைகளின்படி, தொடர்புடைய உரிமக் கோப்புகள் தொகுப்பில் சேர்க்கப்பட " +"வேண்டும். : கோப்பு: `உரிமம்` கோப்பில் எம்ஐடி உரிமத்தின் உரை மற்றும் செடுப்டூல்ச் " +"பயன்படுத்தும் பதிப்புரிமை,` `பைபார்சிங்``,` `மோர்_ஐடெர்டூல்ச்`` மற்றும்` `ஆர்டர் செய்யப்பட்ட-" +"செட்`; மற்றும் கோப்பு: `உரிமம்*` கோப்புகள்: கோப்பில்: `setuptools/_vendor/பேக்கேசிங்/` " +"கோப்பகத்தில் அப்பாச்சி 2.0 மற்றும் 2-உட்பிரிவு பி.எச்.டி உரிம உரை உள்ளது, மற்றும் " +"பேக்கேசிங் பதிப்புரிமை அறிக்கை மற்றும் `உரிமம் தேர்வு அறிவிப்பு <பேக்கேசிங் லிசன்ச்_>` __." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:113 +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 "" +"குறிப்பாக, உரிமக் கோப்புகள் திட்ட மூல மரத்தில் பின்வரும் பாதைகளில் அமைந்துள்ளன என்று " +"கருதுகிறோம் (திட்ட மூலத்துடன் தொடர்புடையது: கோப்பு: `pyproject.toml`):" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "அனைத்தையும் ஒன்றாக இணைத்து, எங்கள்: கோப்பு: `pyproject.toml` இருக்கும்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "எங்கள் திட்டம் பயன்படுத்தப்பட்டால்: கோப்பு: `setup.cfg`, இதை நாங்கள் வரையறுக்கலாம்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "எந்தவொரு அணுகுமுறையிலும், விநியோகத்தில் வெளியீட்டு கோர் மெட்டாடேட்டா:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +msgid "" +"In the resulting sdist, with :file:`/` as the root of the archive and " +"``{VERSION}`` the version of the Setuptools release specified in the Core " +"Metadata, the license files would be located at the paths:" +msgstr "" +"இதன் விளைவாக வரும் SDIST இல், உடன்: கோப்பு: `/` காப்பகத்தின் மூலமாகவும், `{{VERSION}` " +"`கோர் மெட்டாடேட்டாவில் குறிப்பிடப்பட்டுள்ள செடிப்டூல்ச் வெளியீட்டின் பதிப்பாகவும், உரிமக் " +"கோப்புகள் பாதைகளில் அமைந்திருக்கும்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:183 +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 "" +"கட்டப்பட்ட சக்கரத்தில், உடன்: கோப்பு: `/` காப்பகத்தின் வேர் மற்றும் `` {VERSION} `` " +"முந்தையதைப் போல, உரிமக் கோப்புகள் சேமிக்கப்படும்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:193 +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 "" +"இறுதியாக, நிறுவப்பட்ட திட்டத்தில், உடன்: கோப்பு: `தள-பேக்கேச்கள்/` தள அடைவு மற்றும் `` " +"{VERSION} `` முந்தையதைப் போல, உரிமக் கோப்புகள் நிறுவப்படும்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:205 +msgid "Expression examples" +msgstr "வெளிப்பாடு எடுத்துக்காட்டுகள்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" +"செல்லுபடியாகும் `` உரிம-வெளிப்பாடு`` மதிப்புகளின் சில கூடுதல் எடுத்துக்காட்டுகள்:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "பயனர் காட்சிகள்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "என்னிடம் ஒரு தனியார் தொகுப்பு உள்ளது, அது விநியோகிக்கப்படாது" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" +"நான் எனது சொந்த வேலையை சட்டரீதியான கட்டுப்பாடுகள் இல்லாமல் பகிர்ந்து கொள்ள விரும்புகிறேன்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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 "" +"அதைப் பயன்படுத்த, `உரையை __ __ என்ற கோப்பில் ஒட்டவும்: கோப்பு:` " +"உரிமம். பின்னர், உங்கள்: கோப்பில் `` [திட்டம்] `` `` `` `` [திட்டம்] `` `` `` pyproject." +"toml` இன் கீழ் `` உரிமம் = \"எம்ஐடி\" சேர்க்கவும் அல்லது அதன் கட்டமைப்பு கோப்பு/பிரிவில் " +"இருந்தால். நீங்கள் முடித்துவிட்டீர்கள்!" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:263 +msgid "I want to distribute my project under a specific license" +msgstr "எனது திட்டத்தை ஒரு குறிப்பிட்ட உரிமத்தின் கீழ் விநியோகிக்க விரும்புகிறேன்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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 "" +"ஒரு குறிப்பிட்ட உரிமத்தைப் பயன்படுத்த, அதன் உரையை ஒரு: கோப்பு: `உரிமம். `ஏற்கனவே " +"நகலெடுக்கவும்,` `உரிமம் =\" உரிமம்-ஐடி \"` `[திட்டத்தின்]` `` `` உங்கள்: `pyproject." +"toml` இன் கீழ் சேர்க்கவும், உங்கள் பேக்கேசிங் கருவி அதை ஆதரித்தால், அல்லது அதன் கட்டமைப்பு " +"கோப்பில் வேறு. `` உரிமம்-ஐடி`` மற்றும் நகலெடுக்கக்கூடிய உரிம உரையை `Choosealicense " +" __ __ அல்லது` spdx __ __ போன்ற தளங்களில் காணலாம்." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "ஏற்கனவே உரிமம் பெற்ற ஒரு தொகுப்பை நான் பராமரிக்கிறேன்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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 "" +"உங்கள் திட்ட கட்டமைப்பு கோப்பில், உங்கள் உரிம வெளிப்பாட்டை `` உரிமம்`` (`` [திட்டம்] `` " +"அட்டவணை: கோப்பு: `pyproject.toml`), அல்லது உங்கள் பேக்கேசிங் கருவிக்கு சமமானதாக " +"உள்ளிட்டு, எதையும் அகற்றுவதை உறுதிசெய்க மரபு `` உரிமம்`` அட்டவணை சப் கீச் அல்லது `` " +"உரிமம் :: `` வகைப்படுத்திகள். உங்கள் இருக்கும் `` உரிமம்`` மதிப்பு ஏற்கனவே ஒன்றாக " +"செல்லுபடியாகும் (எ.கா. இல்லையெனில், உங்கள் திட்டத்தில் பயன்படுத்தப்படும் உரிமத்துடன் " +"பொருந்தக்கூடிய அடையாளங்காட்டிக்கு `SPDX உரிம பட்டியல் ` __ __ ஐ " +"சரிபார்க்கவும்." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:294 +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 "" +"உங்கள் உரிமக் கோப்புகளை `` [திட்டம்] `` `இன் கீழ்` `உரிமக் கோப்புகள்` இன் கீழ் பட்டியலிடுவதை " +"உறுதிசெய்க: கோப்பு:` pyproject.toml` அல்லது உங்கள் கருவியின் உள்ளமைவு கோப்பில்." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:298 +msgid "" +"See the :ref:`licensing-example-basic` for a simple but complete real-world " +"demo of how this works in practice. See also the best-effort guidance on how " +"to translate license classifiers into license expression provided by the :" +"pep:`639` authors: `Mapping License Classifiers to SPDX Identifiers " +"`__. Packaging tools may support automatically " +"converting legacy licensing metadata; check your tool's documentation for " +"more information." +msgstr "" +"ஐப் பார்க்கவும்: ref: `உரிமம்-எடுத்துக்காட்டு-அடிப்படை` இது நடைமுறையில் எவ்வாறு " +"செயல்படுகிறது என்பதற்கான எளிய ஆனால் முழுமையான நிச உலக டெமோவுக்கு. உரிம " +"வகைப்படுத்தல்களை உரிம வெளிப்பாட்டில் எவ்வாறு மொழிபெயர்ப்பது என்பது குறித்த சிறந்த " +"உத்திகளையும் காண்க: PEP: `639` ஆசிரியர்கள்: `SPDX அடையாளங்காட்டிகளுக்கு மேப்பிங் உரிம " +"வகைப்படுத்திகள் <மேப்பிங் கிளாசிஃபியர்ச்டோச்பிஎக்ச்_> ____. பேக்கேசிங் கருவிகள் மரபு " +"உரிமம் பெறும் மெட்டாடேட்டாவை தானாக மாற்றுவதை ஆதரிக்கக்கூடும்; மேலும் தகவலுக்கு உங்கள் " +"கருவியின் ஆவணங்களை சரிபார்க்கவும்." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:308 +msgid "My package includes other code under different licenses" +msgstr "எனது தொகுப்பில் வெவ்வேறு உரிமங்களின் கீழ் பிற குறியீடு அடங்கும்" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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 "" +"சுருக்கமாக, `` உரிமம் -1 மற்றும் உரிமம் -2`` என்பது உங்கள் திட்டத்திற்கு அல்லது அதன் " +"பகுதிகளுக்கு * இரண்டு * உரிமங்களும் பொருந்தும் என்று பொருள் (எடுத்துக்காட்டாக, நீங்கள் " +"மற்றொரு உரிமத்தின் கீழ் ஒரு கோப்பை சேர்த்துள்ளீர்கள்), மற்றும் `` உரிமம் -1 அல்லது உரிமம் " +"-2`` என்றால், பயனரின் விருப்பத்தில் * உரிமங்களில் * பயன்படுத்தப்படலாம் (எடுத்துக்காட்டாக, " +"பயனர்களுக்கு பல உரிமங்களைத் தேர்வு செய்ய அனுமதிக்க விரும்புகிறீர்கள்). மிகவும் சிக்கலான " +"சூழ்நிலைகளை கூட உள்ளடக்கும் வெளிப்பாடுகளை உருவாக்க குழுவிற்கு நீங்கள் அடைப்புக்குறிக்கு " +"(`` () `) பயன்படுத்தலாம்." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:324 +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 "" +"உங்கள் திட்ட கட்டமைப்பு கோப்பில், உங்கள் உரிம வெளிப்பாட்டை `` உரிமம்`` (`` [திட்டம்] `` " +"அட்டவணை: கோப்பு: `pyproject.toml`), அல்லது உங்கள் பேக்கேசிங் கருவிக்கு சமமானதாக " +"உள்ளிட்டு, எதையும் அகற்றுவதை உறுதிசெய்க மரபு `` உரிமம்`` அட்டவணை சப் கீச் அல்லது `` " +"உரிமம் :: `` வகைப்படுத்திகள்." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:330 +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 "" +"மேலும், உங்கள் திட்ட களஞ்சியத்தில் எங்காவது கோப்புகளாக அனைத்து உரிமங்களின் முழு உரிம " +"உரையையும் சேர்ப்பதை உறுதிசெய்க. `` [திட்டம்] `` `இல்: கோப்பு:` pyproject.toml` (உங்கள் " +"கருவி அதை ஆதரித்தால்), அல்லது உங்கள் கருவியின் உள்ளமைவில், அல்லது உங்கள் கருவியின் " +"உள்ளமைவில், அவை ஒவ்வொன்றிற்கும் உறவினர் பாதை அல்லது குளோப் வடிவங்களை பட்டியலிடுங்கள் " +"கோப்பு." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:336 +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 "" +"உதாரணமாக, உங்கள் திட்டம் எம்ஐடி உரிமம் பெற்றதாக இருந்தால், அப்பாச்சி 2.0 அல்லது 2-கைது " +"பி.எச்.டி ஆகியவற்றின் கீழ் உரிமம் பெற்ற விற்பனையான சார்பு (சொல்லுங்கள், `` பேக்கேசிங்``) " +"இணைத்தால், உங்கள் உரிம வெளிப்பாடு `` எம்ஐடி மற்றும் (அப்பாச்சி- 2.0 அல்லது பி.எச்.டி -2-" +"அடைப்பு) ``. உங்கள் ரெப்போ ரூட்டில் `உரிமம். , எனவே அவை அனைத்தையும் சேர்க்க, நீங்கள் `` " +"[\"உரிமம். -Apache.txt \",\" _vendor/உரிமம்-bsd.txt \"]` `நேரடி கோப்பு பாதைகளாக." + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:347 +msgid "" +"See a fully worked out :ref:`licensing-example-advanced` for an end-to-end " +"application of this to a real-world complex project, with many technical " +"details, and consult a `tutorial `__ for more help and " +"examples using SPDX identifiers and expressions." +msgstr "" +"ஒரு முழுமையான வேலை: ref: `உரிமம்-எடுத்துக்காட்டு-மேம்பட்டது` இது ஒரு நிச உலக " +"சிக்கலான திட்டத்திற்கு, பல தொழில்நுட்ப விவரங்களுடன் இதைப் பயன்படுத்துவதற்கு, மேலும் ஒரு " +"`பயிற்சி ` __ __ ஐ அணுகவும் SPDX அடையாளங்காட்டிகள் மற்றும் " +"வெளிப்பாடுகளைப் பயன்படுத்தி உதவி மற்றும் எடுத்துக்காட்டுகள்." #: ../source/guides/making-a-pypi-friendly-readme.rst:2 msgid "Making a PyPI-friendly README" -msgstr "" +msgstr "ஒரு பைபி நட்பு ரீட்மே தயாரித்தல்" #: ../source/guides/making-a-pypi-friendly-readme.rst:4 msgid "" @@ -5915,16 +8851,22 @@ msgid "" "in a PyPI-friendly format and include your README in your package so it " "appears on PyPI." msgstr "" +"உங்கள் திட்டத்தைப் புரிந்துகொள்ள உங்கள் பயனர்களுக்கு README கோப்புகள் உதவும், மேலும் உங்கள் " +"திட்டத்தின் விளக்கத்தை PYPI இல் அமைக்க பயன்படுத்தலாம். இந்த வழிகாட்டி ஒரு பைபி-நட்பு " +"வடிவத்தில் ஒரு README ஐ உருவாக்க உதவுகிறது மற்றும் உங்கள் தொகுப்பில் உங்கள் README ஐ " +"சேர்க்கவும், எனவே இது PYPI இல் தோன்றும்." #: ../source/guides/making-a-pypi-friendly-readme.rst:9 msgid "Creating a README file" -msgstr "" +msgstr "README கோப்பை உருவாக்குதல்" #: ../source/guides/making-a-pypi-friendly-readme.rst:11 msgid "" "README files for Python projects are often named ``README``, ``README.txt``, " "``README.rst``, or ``README.md``." msgstr "" +"பைதான் திட்டங்களுக்கான README கோப்புகள் பெரும்பாலும் `` ReadMe``, `` readme.txt``, " +"`` ReadMe.rst``, அல்லது `` Readme.md`` என்று பெயரிடப்படுகின்றன." #: ../source/guides/making-a-pypi-friendly-readme.rst:13 msgid "" @@ -5932,32 +8874,41 @@ msgid "" "supported by PyPI. Formats supported by `PyPI's README renderer `_ are:" msgstr "" +"உங்கள் README PYPI இல் சரியாகக் காண்பிக்க, PYPI ஆல் ஆதரிக்கப்படும் மார்க்அப் மொழியைத் " +"தேர்வுசெய்க. `பைபியின் ரீட்மே ரெண்டரர் ` _ " +"ஆகியவற்றால் ஆதரிக்கப்படும் வடிவங்கள்:" #: ../source/guides/making-a-pypi-friendly-readme.rst:16 msgid "plain text" -msgstr "" +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 "" +"உங்கள் திட்டத்தின் மூலத்தில் உங்கள் README கோப்பை சேமிப்பது வழக்கம், உங்கள்: கோப்பு: `setup." +"py` கோப்பு." #: ../source/guides/making-a-pypi-friendly-readme.rst:25 msgid "Including your README in your package's metadata" -msgstr "" +msgstr "உங்கள் தொகுப்பின் மெட்டாடேட்டாவில் உங்கள் README உட்பட" #: ../source/guides/making-a-pypi-friendly-readme.rst:27 msgid "" @@ -5965,20 +8916,26 @@ msgid "" "project's ``Description`` and ``Description-Content-Type`` metadata, " "typically in your project's :file:`setup.py` file." msgstr "" +"உங்கள் தொகுப்பு விளக்கமாக உங்கள் README இன் உள்ளடக்கங்களைச் சேர்க்க, உங்கள் திட்டத்தின் `` " +"விளக்கம்`` மற்றும் `` விளக்கம்-உள்ளடக்க-வகை`` மெட்டாடேட்டாவை அமைக்கவும், பொதுவாக உங்கள் " +"திட்டத்தின்: கோப்பு: `setup.py` கோப்பில்." #: ../source/guides/making-a-pypi-friendly-readme.rst:33 msgid ":ref:`description-optional`" -msgstr "" +msgstr ": Ref: `விளக்கம்-விருப்பத்தேர்வு`" #: ../source/guides/making-a-pypi-friendly-readme.rst:34 msgid ":ref:`description-content-type-optional`" -msgstr "" +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 "" +"எடுத்துக்காட்டாக, இந்த மதிப்புகளை ஒரு தொகுப்பில் அமைக்க: கோப்பு: `setup.py` கோப்பில்,` " +"`setup ()` 's `` long_description`` மற்றும் `` long_description_content_type`` " +"ஐப் பயன்படுத்தவும்." #: ../source/guides/making-a-pypi-friendly-readme.rst:39 msgid "" @@ -5987,16 +8944,22 @@ msgid "" "``Content-Type``-style value for your README file's markup, such as ``text/" "plain``, ``text/x-rst`` (for reStructuredText), or ``text/markdown``." msgstr "" +"`` Long_description`` இன் மதிப்பை README கோப்பின் உள்ளடக்கங்களுக்கு (பாதை அல்ல) " +"அமைக்கவும். `` உரை/வெற்று``, `` உரை/x-rst`` (மறுசீரமைப்புக்கு), `` " +"long_description_content_type`` ஐ உங்கள் ரீட்மே கோப்பின் மார்க்அப்பிற்கு ஏற்றுக்கொள்ளப்பட்ட " +"`` உள்ளடக்க-வகை``-ச்டைல் மதிப்புக்கு அமைக்கவும் அல்லது `` உரை/மார்க் டவுன்``." #: ../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 "" +msgstr "அந்தந்த கருவிகளின் குறைந்தபட்ச தேவையான பதிப்புகள்:" #: ../source/guides/making-a-pypi-friendly-readme.rst:62 msgid "``setuptools >= 38.6.0``" @@ -6015,6 +8978,8 @@ 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 "" @@ -6022,10 +8987,13 @@ msgid "" "file:`README.md` as ``long_description`` and identifies the markup as GitHub-" "flavored Markdown:" msgstr "" +"எடுத்துக்காட்டாக, இதைக் காண்க: கோப்பு: `setup.py` கோப்பு, இது உள்ளடக்கங்களைப் " +"படிக்கிறது: கோப்பு:` readme.md` `` long_description`` மற்றும் மார்க்அப்பை கிட்அப்-" +"சுவையான மார்க் பேரூர் என அடையாளம் காட்டுகிறது:" #: ../source/guides/making-a-pypi-friendly-readme.rst:94 msgid "Validating reStructuredText markup" -msgstr "" +msgstr "மறுசீரமைப்பு மார்க்அப்பை சரிபார்க்கிறது" #: ../source/guides/making-a-pypi-friendly-readme.rst:96 msgid "" @@ -6033,6 +9001,9 @@ msgid "" "prevent it from rendering, causing PyPI to instead just show the README's " "raw source." msgstr "" +"உங்கள் README மறுசீரமைப்பு டெக்ச்டில் எழுதப்பட்டிருந்தால், எந்தவொரு தவறான மார்க்அப்பும் அதை " +"வழங்குதல் செய்வதைத் தடுக்கும், இதனால் பைபி அதற்கு பதிலாக README இன் மூல மூலத்தைக் " +"காண்பிக்கும்." #: ../source/guides/making-a-pypi-friendly-readme.rst:99 msgid "" @@ -6042,27 +9013,36 @@ msgid "" "reference-label```\"), are not allowed here and will result in error " "messages like \"``Error: Unknown interpreted text role \"py:func\".``\"." msgstr "" +"டாக்ச்ட்ரிங்சில் பயன்படுத்தப்படும் சூரரிமாச்சிலை நீட்டிப்புகள்: doc: `வழிமுறைகள் ` மற்றும்: டாக்: `பாத்திரங்கள் ` (எ.கா. func: `getattr```\" அல்லது \"` `: குறிப்பு:` " +"எனது-குறிப்பு-லேபிள்```` \"), இங்கே அனுமதிக்கப்படவில்லை, மேலும்\" `` பிழை: " +"அறியப்படாத விளக்கமளிக்கப்பட்ட உரை பாத்திரம் \"py: func \".``\"." #: ../source/guides/making-a-pypi-friendly-readme.rst:104 msgid "" "You can check your README for markup errors before uploading as follows:" -msgstr "" +msgstr "பதிவேற்றுவதற்கு முன் மார்க்அப் பிழைகளுக்கு உங்கள் README ஐ சரிபார்க்கலாம்:" #: ../source/guides/making-a-pypi-friendly-readme.rst:106 msgid "" "Install the latest version of `twine `_; " "version 1.12.0 or higher is required:" msgstr "" +"`ட்வைன் ` _; பதிப்பு 1.12.0 அல்லது அதற்கு மேற்பட்டது " +"தேவை:" #: ../source/guides/making-a-pypi-friendly-readme.rst:121 msgid "" "Build the sdist and wheel for your project as described under :ref:" "`Packaging Your Project`." msgstr "" +"கீழ் விவரிக்கப்பட்டுள்ளபடி உங்கள் திட்டத்திற்கான SDIST மற்றும் சக்கரத்தை உருவாக்குங்கள்: ref: " +"`உங்கள் திட்டத்தை பேக்கேசிங் செய்தல்`." #: ../source/guides/making-a-pypi-friendly-readme.rst:124 msgid "Run ``twine check`` on the sdist and wheel:" -msgstr "" +msgstr "Sdist மற்றும் சக்கரத்தில் `` கயிறு காசோலை`` ஐ இயக்கவும்:" #: ../source/guides/making-a-pypi-friendly-readme.rst:130 msgid "" @@ -6070,17 +9050,20 @@ msgid "" "renders fine, the command will output ``Checking distribution FILENAME: " "Passed``." msgstr "" +"இந்த கட்டளை உங்கள் README ஐ வழங்குவதில் ஏதேனும் சிக்கல்களைப் புகாரளிக்கும். உங்கள் மார்க்அப் " +"நன்றாக வழங்கினால், கட்டளை வெளியிடும் `` விநியோக கோப்பு பெயரைச் சரிபார்க்கிறது: தேர்ச்சி " +"பெற்றவர்``." #: ../source/guides/migrating-to-pypi-org.rst:6 msgid "Migrating to PyPI.org" -msgstr "" +msgstr "Pypi.org க்கு இடம்பெயர்கிறது" #: ../source/guides/migrating-to-pypi-org.rst:8 #: ../source/guides/multi-version-installs.rst:8 #: ../source/guides/supporting-multiple-python-versions.rst:9 #: ../source/guides/supporting-windows-using-appveyor.rst:7 msgid "Obsolete" -msgstr "" +msgstr "வழக்கற்றுப்போன" #: ../source/guides/migrating-to-pypi-org.rst:10 msgid "" @@ -6089,32 +9072,41 @@ msgid "" "expected to use. These are the tools and processes that people will need to " "interact with ``PyPI.org``." msgstr "" +": கால: `pypi.org` என்பது பைபியின் புதிய, மீண்டும் எழுதப்பட்ட பதிப்பாகும், இது மரபு " +"பைபி குறியீடு தளத்தை மாற்றியுள்ளது. பைபியின் இயல்புநிலை பதிப்பாகும், மக்கள் " +"பயன்படுத்துவார்கள் என்று எதிர்பார்க்கப்படுகிறது. மக்கள் `` pypi.org`` உடன் தொடர்பு கொள்ள " +"வேண்டிய கருவிகள் மற்றும் செயல்முறைகள் இவை." #: ../source/guides/migrating-to-pypi-org.rst:16 msgid "Publishing releases" -msgstr "" +msgstr "வெளியீட்டு வெளியீடுகள்" #: ../source/guides/migrating-to-pypi-org.rst:18 msgid "``pypi.org`` is the default upload platform as of September 2016." -msgstr "" +msgstr "`` pypi.org`` என்பது செப்டம்பர் 2016 நிலவரப்படி இயல்புநிலை பதிவேற்ற தளமாகும்." #: ../source/guides/migrating-to-pypi-org.rst:20 msgid "" "Uploads through ``pypi.python.org`` were *switched off* on **July 3, 2017**. " "As of April 13th, 2018, ``pypi.org`` is the URL for PyPI." msgstr "" +"`` Pypi.python.org`` மூலம் பதிவேற்றங்கள் ** சூலை 3, 2017 அன்று*சுவிட்ச் ஆஃப்***. " +"ஏப்ரல் 13, 2018 நிலவரப்படி, `` pypi.org`` என்பது PYPI க்கான முகவரி ஆகும்." #: ../source/guides/migrating-to-pypi-org.rst:23 msgid "" "The recommended way to migrate to PyPI.org for uploading is to ensure that " "you are using a new enough version of your upload tool." msgstr "" +"பதிவேற்றுவதற்காக pypi.org க்கு இடம்பெயர பரிந்துரைக்கப்பட்ட வழி, உங்கள் பதிவேற்ற " +"கருவியின் புதிய பதிப்பைப் பயன்படுத்துகிறீர்கள் என்பதை உறுதி செய்வதாகும்." #: ../source/guides/migrating-to-pypi-org.rst:26 msgid "" "The default upload settings switched to ``pypi.org`` in the following " "versions:" msgstr "" +"இயல்புநிலை பதிவேற்ற அமைப்புகள் பின்வரும் பதிப்புகளில் `` pypi.org`` க்கு மாற்றப்பட்டன:" #: ../source/guides/migrating-to-pypi-org.rst:28 msgid "``twine`` 1.8.0" @@ -6126,19 +9118,19 @@ msgstr "" #: ../source/guides/migrating-to-pypi-org.rst:30 msgid "Python 2.7.13 (``distutils`` update)" -msgstr "" +msgstr "பைதான் 2.7.13 (`` தொலைதூரங்கள்` புதுப்பிப்பு)" #: ../source/guides/migrating-to-pypi-org.rst:31 msgid "Python 3.4.6 (``distutils`` update)" -msgstr "" +msgstr "பைதான் 3.4.6 (`` தொலைதூரங்கள்` புதுப்பிப்பு)" #: ../source/guides/migrating-to-pypi-org.rst:32 msgid "Python 3.5.3 (``distutils`` update)" -msgstr "" +msgstr "பைதான் 3.5.3 (`` distutils`` புதுப்பிப்பு)" #: ../source/guides/migrating-to-pypi-org.rst:33 msgid "Python 3.6.0 (``distutils`` update)" -msgstr "" +msgstr "பைதான் 3.6.0 (`` தொலைதூரங்கள்` புதுப்பிப்பு)" #: ../source/guides/migrating-to-pypi-org.rst:35 msgid "" @@ -6148,12 +9140,18 @@ msgid "" "configured in a file located at :file:`$HOME/.pypirc`. If you see a file " "like:" msgstr "" +"கருவியின் இயல்புநிலை மாற்றுவதற்கான கருவியின் புதிய பதிப்பில் நீங்கள் இருப்பதை உறுதி " +"செய்வதோடு மட்டுமல்லாமல், அதன் இயல்புநிலை பதிவேற்ற முகவரி ஐ மேலெழுத கருவியை நீங்கள் " +"கட்டமைக்கவில்லை என்பதையும் உறுதிப்படுத்த வேண்டும். பொதுவாக இது அமைந்துள்ள ஒரு கோப்பில் " +"கட்டமைக்கப்பட்டுள்ளது: கோப்பு: `$ home/.pypirc`. நீங்கள் ஒரு கோப்பைக் கண்டால்:" #: ../source/guides/migrating-to-pypi-org.rst:52 msgid "" "Then simply delete the line starting with ``repository`` and you will use " "your upload tool's default URL." msgstr "" +"பின்னர் `` களஞ்சியம்`` உடன் தொடங்கும் வரியை நீக்கவும், உங்கள் பதிவேற்ற கருவியின் இயல்புநிலை " +"முகவரி ஐப் பயன்படுத்துவீர்கள்." #: ../source/guides/migrating-to-pypi-org.rst:55 msgid "" @@ -6162,16 +9160,22 @@ msgid "" "pypirc` and include the ``repository:`` line, but use the value ``https://" "upload.pypi.org/legacy/`` instead:" msgstr "" +"சில காரணங்களால் உங்கள் கருவியின் பதிப்பை pypi.org ஐப் பயன்படுத்துவதற்கு இயல்புநிலையாக " +"இருக்கும் பதிப்பிற்கு மேம்படுத்த முடியாவிட்டால், நீங்கள் திருத்தலாம்: கோப்பு: `$ home/." +"pypirc` மற்றும்` `களஞ்சியம்:` `வரி சேர்க்கவும் ." #: ../source/guides/migrating-to-pypi-org.rst:71 msgid "" "(``legacy`` in this URL refers to the fact that this is the new server " "implementation's emulation of the legacy server implementation's upload API.)" msgstr "" +"(``legacy`` in this முகவரி refers பெறுநர் the fact that this is the புதிய " +"சேவையகம் implementation's போன்மம் of the legacy சேவையகம் implementation's upload " +"API.)" #: ../source/guides/migrating-to-pypi-org.rst:77 msgid "Registering package names & metadata" -msgstr "" +msgstr "தொகுப்பு பெயர்கள் மற்றும் மெட்டாடேட்டாவை பதிவு செய்தல்" #: ../source/guides/migrating-to-pypi-org.rst:79 msgid "" @@ -6179,23 +9183,30 @@ msgid "" "command prior to the first upload is no longer required, and is not " "currently supported by the legacy upload API emulation on PyPI.org." msgstr "" +"முதல் பதிவேற்றத்திற்கு முன்னர் `` setup.py பதிவு` கட்டளையுடன் தொகுப்பு பெயர்களை " +"வெளிப்படையாக பதிவு செய்வது இனி தேவையில்லை, மேலும் தற்போது pypi.org இல் மரபு " +"பதிவேற்ற பநிஇ ஈமுலேசன் மூலம் ஆதரிக்கப்படவில்லை." #: ../source/guides/migrating-to-pypi-org.rst:83 msgid "" "As a result, attempting explicit registration after switching to using PyPI." "org for uploads will give the following error message::" msgstr "" +"இதன் விளைவாக, பதிவேற்றங்களுக்கு pypi.org ஐப் பயன்படுத்துவதற்கு மாறிய பின் வெளிப்படையான " +"பதிவை முயற்சிப்பது பின்வரும் பிழை செய்தியைக் கொடுக்கும் ::" #: ../source/guides/migrating-to-pypi-org.rst:88 msgid "" "The solution is to skip the registration step, and proceed directly to " "uploading artifacts." msgstr "" +"பதிவு படிநிலையைத் தவிர்ப்பதே தீர்வு, மற்றும் கலைப்பொருட்களைப் பதிவேற்றுவதற்கு நேரடியாக " +"தொடரவும்." #: ../source/guides/migrating-to-pypi-org.rst:93 #: ../source/guides/using-testpypi.rst:5 msgid "Using TestPyPI" -msgstr "" +msgstr "TestPypi ஐப் பயன்படுத்துதல்" #: ../source/guides/migrating-to-pypi-org.rst:95 msgid "" @@ -6205,10 +9216,15 @@ msgid "" "``https://testpypi.python.org/pypi`` with ``https://test.pypi.org/legacy/``, " "for example:" msgstr "" +"மரபு டெச்ட்பை (testpy.python.org) இனி கிடைக்காது; அதற்கு பதிலாக `test.pypi.org " +"` _ ஐப் பயன்படுத்தவும். நீங்கள் டெச்ட்பிஐயைப் பயன்படுத்தினால், " +"உங்கள்: கோப்பு: `$ முகப்பு/.pypirc` டெச்ட்பைப்பின் புதிய இருப்பிடத்தைக் கையாள,` " +"`https: // testpy.python.org/pypi`` ஐ` `https: // தேர்வு உடன் மாற்றுவதன் மூலம் " +"புதுப்பிக்க வேண்டும் .pypi.org/மரபு/``, எடுத்துக்காட்டாக:" #: ../source/guides/migrating-to-pypi-org.rst:117 msgid "Registering new user accounts" -msgstr "" +msgstr "புதிய பயனர் கணக்குகளை பதிவு செய்தல்" #: ../source/guides/migrating-to-pypi-org.rst:119 msgid "" @@ -6216,10 +9232,13 @@ msgid "" "through ``pypi.python.org`` was *switched off* on **February 20, 2018**. New " "user registrations at ``pypi.org`` are open." msgstr "" +"PYPI க்கு எதிரான ச்பேம் தாக்குதல்களைத் தணிக்க உதவுவதற்காக, `` pypi.python.org`` மூலம் " +"புதிய பயனர் பதிவு**பிப்ரவரி 20, 2018 அன்று அணைக்கப்பட்டது***. `` Pypi.org`` இல் " +"புதிய பயனர் பதிவுகள் திறந்திருக்கும்." #: ../source/guides/migrating-to-pypi-org.rst:125 msgid "Browsing packages" -msgstr "" +msgstr "தொகுப்புகள் உலாவுதல்" #: ../source/guides/migrating-to-pypi-org.rst:127 msgid "" @@ -6228,32 +9247,38 @@ msgid "" "org``. The domain pypi.python.org now redirects to pypi.org, and may be " "disabled sometime in the future." msgstr "" +"`` Pypi.python.org`` `மற்ற PYPA ஆவணங்கள் போன்றவற்றிலிருந்து இன்னும் பயன்படுத்தப்படலாம் " +"என்றாலும், தொகுப்புகளை உலாவுவதற்கான இயல்புநிலை இடைமுகம்` `pypi.org``. Pypi.python." +"org டொமைன் இப்போது pypi.org க்கு திருப்பி விடுகிறது, மேலும் எதிர்காலத்தில் " +"முடக்கப்படலாம்." #: ../source/guides/migrating-to-pypi-org.rst:134 msgid "Downloading packages" -msgstr "" +msgstr "தொகுப்புகளைப் பதிவிறக்குகிறது" #: ../source/guides/migrating-to-pypi-org.rst:136 msgid "``pypi.org`` is the default host for downloading packages." -msgstr "" +msgstr "`` pypi.org`` என்பது தொகுப்புகளைப் பதிவிறக்குவதற்கான இயல்புநிலை புரவலன் ஆகும்." #: ../source/guides/migrating-to-pypi-org.rst:139 msgid "Managing published packages and releases" -msgstr "" +msgstr "வெளியிடப்பட்ட தொகுப்புகள் மற்றும் வெளியீடுகளை நிர்வகித்தல்" #: ../source/guides/migrating-to-pypi-org.rst:141 msgid "" "``pypi.org`` provides a fully functional interface for logged in users to " "manage their published packages and releases." msgstr "" +"`` pypi.org`` பயனர்கள் தங்கள் வெளியிடப்பட்ட தொகுப்புகள் மற்றும் வெளியீடுகளை நிர்வகிக்க " +"உள்நுழைந்த ஒரு முழுமையான செயல்பாட்டு இடைமுகத்தை வழங்குகிறது." #: ../source/guides/modernize-setup-py-project.rst:6 msgid "How to modernize a ``setup.py`` based project?" -msgstr "" +msgstr "`` Setup.py`` அடிப்படையிலான திட்டத்தை எவ்வாறு நவீனமயமாக்குவது?" #: ../source/guides/modernize-setup-py-project.rst:10 msgid "Should ``pyproject.toml`` be added?" -msgstr "" +msgstr "`` Pyproject.toml`` சேர்க்கப்பட வேண்டுமா?" #: ../source/guides/modernize-setup-py-project.rst:12 msgid "" @@ -6262,11 +9287,15 @@ msgid "" "strongly recommended is the ``[build-system]`` table in :file:`pyproject." "toml`." msgstr "" +"ப: கால: `pyproject.toml` கோப்பு கடுமையாக பரிந்துரைக்கப்படுகிறது. A இன் இருப்பு: " +"கோப்பு: `pyproject.toml` கோப்பே அதிகம் கொண்டு வராது. ." #: ../source/guides/modernize-setup-py-project.rst:16 msgid "" "Note that it has influence on the build isolation feature of pip, see below." msgstr "" +"BIP இன் உருவாக்க தனிமைப்படுத்தும் அம்சத்தில் இது செல்வாக்கைக் கொண்டுள்ளது என்பதை நினைவில் " +"கொள்க, கீழே காண்க." #: ../source/guides/modernize-setup-py-project.rst:23 msgid "" @@ -6276,10 +9305,15 @@ msgid "" "deprecated and **MUST NOT** be run anymore, and their recommended " "replacement commands should be used instead:" msgstr "" +"இல்லை,: கோப்பு: `setup.py` ஒரு நவீனத்தில் இருக்க முடியும்: குறிப்பு:` setuptools` " +"அடிப்படையிலான திட்டம். தி: கால: `setup.py` கோப்பு என்பது பைத்தானில் எழுதப்படும் " +"செட்டுப்டூல்களுக்கான சரியான உள்ளமைவு கோப்பு. இருப்பினும், பின்வரும் கட்டளைகள் நீக்கப்பட்டன, " +"** இனி இயக்கப்படக்கூடாது, மேலும் அவற்றின் பரிந்துரைக்கப்பட்ட மாற்று கட்டளைகள் அதற்கு " +"பதிலாக பயன்படுத்தப்பட வேண்டும்:" #: ../source/guides/modernize-setup-py-project.rst:36 msgid "``python -m build``" -msgstr "" +msgstr "`` பைதான் -எம் பில்ட்``" #: ../source/guides/modernize-setup-py-project.rst:42 #: ../source/guides/modernize-setup-py-project.rst:66 @@ -6287,21 +9321,23 @@ msgstr "" #: ../source/guides/modernize-setup-py-project.rst:129 #: ../source/guides/modernize-setup-py-project.rst:221 msgid "For more details:" -msgstr "" +msgstr "மேலும் விவரங்களுக்கு:" #: ../source/guides/modernize-setup-py-project.rst:44 msgid ":ref:`setup-py-deprecated`" -msgstr "" +msgstr ": ref: `setup-py- deprecated`" #: ../source/guides/modernize-setup-py-project.rst:48 msgid "Where to start?" -msgstr "" +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 "" +"தி: கால: `திட்டம்` இருக்க வேண்டும் ஒரு: கோப்பு:` pyproject.toml` அதன் மூல மரத்தின் " +"மூலத்தில் `` [பில்ட்-சிச்டம்] `` அட்டவணை போன்றவற்றைக் கொண்டுள்ளது:" #: ../source/guides/modernize-setup-py-project.rst:60 msgid "" @@ -6309,31 +9345,36 @@ msgid "" "Frontend>` 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 "" +"A: FILE: `pyproject.toml` கோப்பு (காலியாக இருந்தாலும்) தூண்டுகிறது என்பதை நினைவில் " +"கொள்க: Ref:` pip` அதன் இயல்புநிலை நடத்தையை மாற்ற *தனிமைப்படுத்தலை *." #: ../source/guides/modernize-setup-py-project.rst:68 msgid ":ref:`distributing-packages`" -msgstr "" +msgstr ": Ref: `விநியோகிக்கும்-பேக்கேச்கள்`" #: ../source/guides/modernize-setup-py-project.rst:69 #: ../source/guides/modernize-setup-py-project.rst:113 msgid ":ref:`pyproject-build-system-table`" -msgstr "" +msgstr ": ref: `பைப்ரோசெக்ட்-பில்ட்-சிச்டம்-டேபிள்`" #: ../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 "" +msgstr ":doc:`pip:reference/build-system/pyproject-toml`" #: ../source/guides/modernize-setup-py-project.rst:74 msgid "How to handle additional build-time dependencies?" -msgstr "" +msgstr "கூடுதல் உருவாக்க நேர சார்புகளை எவ்வாறு கையாள்வது?" #: ../source/guides/modernize-setup-py-project.rst:76 msgid "" @@ -6343,22 +9384,26 @@ msgid "" "frontend knows to install them when building the :term:`distributions " "`." msgstr "" +"செடிப்டூல்களின் மேல், என்றால்: கோப்பு: `setup.py` மற்ற மூன்றாம் தரப்பு நூலகங்களை " +"(பைத்தானின் நிலையான நூலகத்திற்கு வெளியே) சார்ந்துள்ளது ." #: ../source/guides/modernize-setup-py-project.rst:82 #: ../source/guides/modernize-setup-py-project.rst:139 #: ../source/guides/modernize-setup-py-project.rst:174 msgid "For example, a :file:`setup.py` file such as this:" -msgstr "" +msgstr "எடுத்துக்காட்டாக, ஒரு: கோப்பு: இது போன்ற `setup.py` கோப்பு:" #: ../source/guides/modernize-setup-py-project.rst:99 msgid "" "requires a :file:`pyproject.toml` file like this (:file:`setup.py` stays " "unchanged):" msgstr "" +"ஒரு: கோப்பு: `pyproject.toml` இது போன்ற கோப்பு (: கோப்பு:` setup.py` மாறாமல் " +"இருக்கும்):" #: ../source/guides/modernize-setup-py-project.rst:117 msgid "What is the build isolation feature?" -msgstr "" +msgstr "உருவாக்க தனிமைப்படுத்தல் நற்பொருத்தம் என்ன?" #: ../source/guides/modernize-setup-py-project.rst:119 msgid "" @@ -6366,68 +9411,80 @@ msgid "" "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 "" +msgstr "`` பைதான் -எம் பில்ட் -இல்லை -தனிமைப்படுத்தல்``" #: ../source/guides/modernize-setup-py-project.rst:127 msgid "``python -m pip install --no-build-isolation``" -msgstr "" +msgstr "`` பைதான் -எம் பிஐபி நிறுவல்-இல்லை-பில்ட்-ஐசோலேசன்``" #: ../source/guides/modernize-setup-py-project.rst:135 msgid "How to handle packaging metadata?" -msgstr "" +msgstr "பேக்கேசிங் மெட்டாடேட்டாவை எவ்வாறு கையாள்வது?" #: ../source/guides/modernize-setup-py-project.rst:137 msgid "" "All static metadata can optionally be moved to a ``[project]`` table in :" "file:`pyproject.toml`." msgstr "" +"அனைத்து நிலையான மெட்டாடேட்டாவையும் விருப்பமாக `` [திட்டம்] `` அட்டவணை: கோப்பு: " +"`pyproject.toml` க்கு மாற்றலாம்." #: ../source/guides/modernize-setup-py-project.rst:151 msgid "can be entirely replaced by a :file:`pyproject.toml` file like this:" -msgstr "" +msgstr "ஒரு: கோப்பு: `pyproject.toml` இது போன்ற கோப்பு:" #: ../source/guides/modernize-setup-py-project.rst:164 msgid "" "Read :ref:`pyproject-project-table` for the full specification of the " "content allowed in the ``[project]`` table." msgstr "" +"படிக்க: குறிப்பு: `` [திட்டம்] `` அட்டவணையில் அனுமதிக்கப்பட்ட உள்ளடக்கத்தின் முழு " +"விவரக்குறிப்புக்கு `pyproject-project-table`." #: ../source/guides/modernize-setup-py-project.rst:169 msgid "How to handle dynamic metadata?" -msgstr "" +msgstr "மாறும் மெட்டாடேட்டாவை எவ்வாறு கையாள்வது?" #: ../source/guides/modernize-setup-py-project.rst:171 msgid "" "If some packaging metadata fields are not static they need to be listed as " "``dynamic`` in this ``[project]`` table." msgstr "" +"சில பேக்கேசிங் மேனிலை தரவு புலங்கள் நிலையானதாக இல்லாவிட்டால், இந்த `` திட்டத்தில்] `` " +"அட்டவணையில் அவை `` டைனமிக்`` என பட்டியலிடப்பட வேண்டும்." #: ../source/guides/modernize-setup-py-project.rst:191 msgid "can be modernized as follows:" -msgstr "" +msgstr "பின்வருமாறு நவீனமயமாக்கலாம்:" #: ../source/guides/modernize-setup-py-project.rst:223 msgid ":ref:`declaring-project-metadata-dynamic`" -msgstr "" +msgstr ": குறிப்பு: `அறிவித்தல்-திட்ட-மெட்டாடேட்டா-டைனமிக்`" #: ../source/guides/modernize-setup-py-project.rst:227 msgid "What if something that can not be changed expects a ``setup.py`` file?" -msgstr "" +msgstr "மாற்ற முடியாத ஒன்று `` setup.py`` கோப்பை எதிர்பார்க்கிறது என்றால் என்ன செய்வது?" #: ../source/guides/modernize-setup-py-project.rst:229 msgid "" "For example, a process exists that can not be changed easily and it needs to " "execute a command such as ``python setup.py --name``." msgstr "" +"எடுத்துக்காட்டாக, எளிதாக மாற்ற முடியாத ஒரு செயல்முறை உள்ளது, மேலும் இது `` பைதான் " +"setup.py --name`` போன்ற கட்டளையை இயக்க வேண்டும்." #: ../source/guides/modernize-setup-py-project.rst:232 msgid "" @@ -6435,18 +9492,21 @@ msgid "" "tree even after all its content has been moved to :file:`pyproject.toml`. " "This file can be as minimalistic as this:" msgstr "" +"ஒரு: கோப்பு: `setup.py` கோப்பை திட்ட மூல மரத்தில் அதன் அனைத்து உள்ளடக்கங்களும் நகர்த்திய " +"பின்னரும் விட்டுவிடுவது மிகவும் நல்லது: கோப்பு:` pyproject.toml`. இந்த கோப்பு இதைப் " +"போலவே மிகச்சிறியதாக இருக்கலாம்:" #: ../source/guides/modernize-setup-py-project.rst:246 msgid ":ref:`pyproject-toml-spec`" -msgstr "" +msgstr ": ref: `pyproject-toml-spec`" #: ../source/guides/modernize-setup-py-project.rst:248 msgid ":doc:`setuptools:build_meta`" -msgstr "" +msgstr ": டாக்: `செட்ப்டூல்ச்: பில்ட்_மெட்டா`" #: ../source/guides/multi-version-installs.rst:6 msgid "Multi-version installs" -msgstr "" +msgstr "பல பதிப்பு நிறுவல்கள்" #: ../source/guides/multi-version-installs.rst:11 msgid "" @@ -6455,6 +9515,9 @@ msgid "" "must ``require`` the appropriate version of the project at run time (using " "``pkg_resources``)." msgstr "" +"ஈசி_ச்டால் ஒரே திட்டத்தின் வெவ்வேறு பதிப்புகளை ஒரே நேரத்தில் பல நிரல்களால் பகிரப்பட்ட " +"ஒற்றை சூழலில் நிறுவ அனுமதிக்கிறது, இது திட்டத்தின் பொருத்தமான பதிப்பை இயக்க நேரத்தில் " +"(`` pkg_resources`` ஐப் பயன்படுத்த வேண்டும்)." #: ../source/guides/multi-version-installs.rst:16 msgid "" @@ -6464,6 +9527,10 @@ msgid "" "environment shared by multiple applications, such as the system Python in a " "Linux distribution." msgstr "" +"பல பயன்பாட்டு நிகழ்வுகளுக்கு, மெய்நிகர் சூழல்கள் இந்த தேவையை `` தேவை` 'கட்டளை இல்லாமல் " +"நிவர்த்தி செய்கின்றன. இருப்பினும், ஒரே சூழலுக்குள் இணையான நிறுவல்களின் நன்மை என்னவென்றால், " +"இது லினக்ச் விநியோகத்தில் கணினி பைதான் போன்ற பல பயன்பாடுகளால் பகிரப்பட்ட சூழலுக்கு வேலை " +"செய்கிறது." #: ../source/guides/multi-version-installs.rst:22 msgid "" @@ -6479,6 +9546,14 @@ msgid "" "available by default, so the subsequent ``require`` call in your own code " "fails with a spurious version conflict." msgstr "" +"`` பி.கே. இது சிக்கல்களை ஏற்படுத்தக்கூடும், ஏனெனில் `` setuptools`` உருவாக்கிய கட்டளை " +"வரி ச்கிரிப்ட்கள் `` pkg_resources`` ஐப் பயன்படுத்துகின்றன. இதன் பொருள், " +"எடுத்துக்காட்டாக, `` மூக்கு`` அல்லது `` `` குனிகார்ன்`` மூலம் பயன்படுத்தப்பட்ட `` தேவை` " +"சோதனைகளை நீங்கள் பயன்படுத்த முடியாது, உங்கள் விண்ணப்பத்திற்கு கிடைக்கக்கூடிய எதையும் " +"தாக்குதல் அல்லாத பதிப்பு தேவைப்பட்டால் நிலையான `` sys.bath`` - முதன்மையான " +"பயன்பாட்டிற்கான ச்கிரிப்ட் ரேப்பர் இயல்புநிலையாக கிடைக்கும் பதிப்பில் பூட்டப்படும், எனவே " +"அடுத்தடுத்த `` தேவை` உங்கள் சொந்த குறியீட்டில் அழைப்பு ஒரு மோசமான பதிப்பு மோதலுடன் " +"தோல்வியடைகிறது." #: ../source/guides/multi-version-installs.rst:34 msgid "" @@ -6489,20 +9564,25 @@ msgid "" "script or use ``python3 -c ''`` to invoke the application's main " "entry point directly." msgstr "" +"முதல் முறையாக `` பி.கே. தனிப்பயன் ரேப்பர் ச்கிரிப்டை எழுத தேவை அல்லது பயன்பாட்டின் " +"முதன்மையான நுழைவு புள்ளியை நேரடியாக அழைக்க `` பைதான் 3 -c '' `` " +"பயன்படுத்த வேண்டும்." #: ../source/guides/multi-version-installs.rst:41 msgid "" "Refer to the `pkg_resources documentation `__ for more details." msgstr "" +"மேலும் விவரங்களுக்கு `pkg_resources ஆவணங்கள் `_) is not " "available." msgstr "" +". வெறுமனே, கொடுக்கப்பட்ட கணினியில் முடுக்கப்பட்ட பதிப்பு கிடைக்கவில்லை என்றால், முடுக்கி " +"தொகுதிகள் எப்போதுமே ஒரு தூய பைத்தானைக் கொண்டிருக்கும். Cpython நிலையான நூலகம் " +"முடுக்கி தொகுதிகளை விரிவாகப் பயன்படுத்துகிறது. . செயல்படுத்தல் (`_datetimemodule.c " +" _ _) " +"கிடைக்கவில்லை." #: ../source/guides/packaging-binary-extensions.rst:37 msgid "" @@ -6552,6 +9644,12 @@ msgid "" "module wrapper for `_functoolsmodule.c `_." msgstr "" +"** ரேப்பர் தொகுதிகள் **: இந்த தொகுதிகள் தற்போதுள்ள சி இடைமுகங்களை பைதான் குறியீட்டிற்கு " +"வெளிப்படுத்த உருவாக்கப்படுகின்றன. அவை அடிப்படை சி இடைமுகத்தை நேரடியாக " +"அம்பலப்படுத்தலாம், இல்லையெனில் பநிஇ பயன்படுத்த எளிதாக்குவதற்கு பைதான் மொழி அம்சங்களைப் " +"பயன்படுத்தும் அதிக \"பைத்தானிக்\" பநிஇ அம்பலப்படுத்தலாம். Cpython நிலையான நூலகம் ரேப்பர் " +"தொகுதிகளை விரிவாகப் பயன்படுத்துகிறது. . com/python/cpython/blob/main/தொகுதிகள்/" +"_functoolsmodule.c> `_." #: ../source/guides/packaging-binary-extensions.rst:45 msgid "" @@ -6564,6 +9662,11 @@ msgid "" "which comes from `sysmodule.c `_." msgstr "" +"** குறைந்த-நிலை கணினி அணுகல் **: இந்த தொகுதிகள் CPython இயக்க நேரம், இயக்க முறைமை " +"அல்லது அடிப்படை வன்பொருளின் கீழ் நிலை அம்சங்களை அணுக உருவாக்கப்படுகின்றன. இயங்குதள " +"குறிப்பிட்ட குறியீடு மூலம், நீட்டிப்பு தொகுதிகள் தூய பைதான் குறியீட்டில் சாத்தியமில்லாத " +"விசயங்களை அடையக்கூடும். மொழி மட்டத்தில் வெளிப்படுத்தப்படாத மொழிபெயர்ப்பாளர் உட்புறங்களை " +"அணுகுவதற்காக பல CPYTHON நிலையான நூலக தொகுதிகள் C இல் எழுதப்பட்டுள்ளன. ." #: ../source/guides/packaging-binary-extensions.rst:54 msgid "" @@ -6572,6 +9675,10 @@ msgid "" "global interpreter lock around long-running operations (regardless of " "whether those operations are CPU or IO bound)." msgstr "" +"சி நீட்டிப்புகளின் குறிப்பாக குறிப்பிடத்தக்க நற்பொருத்தம் என்னவென்றால், அவர்கள் " +"மொழிபெயர்ப்பாளர் இயக்க நேரத்திற்கு திரும்ப அழைக்கத் தேவையில்லை, அவர்கள் சிபிதானின் " +"உலகளாவிய மொழிபெயர்ப்பாளர் பூட்டை நீண்டகால செயல்பாடுகளைச் சுற்றி வெளியிடலாம் (அந்த " +"செயல்பாடுகள் சிபியு அல்லது IO பிணைப்பு என்பதைப் பொருட்படுத்தாமல்)." #: ../source/guides/packaging-binary-extensions.rst:59 msgid "" @@ -6583,10 +9690,17 @@ msgid "" "concurrent execution of vectorised operations and to tightly control the " "exact memory layout of created objects." msgstr "" +"எல்லா நீட்டிப்பு தொகுதிகளும் மேலே உள்ள வகைகளுக்கு அழகாக பொருந்தாது. NUMPY உடன் " +"சேர்க்கப்பட்ட நீட்டிப்பு தொகுதிகள், எடுத்துக்காட்டாக, மூன்று பயன்பாட்டு நிகழ்வுகளையும் " +"பரப்புகின்றன - அவை வேக காரணங்களுக்காக உள் சுழல்களை C க்கு நகர்த்துகின்றன, C, Fortran " +"மற்றும் பிற மொழிகளில் எழுதப்பட்ட வெளிப்புற நூலகங்களை போர்த்துகின்றன, மேலும் CPyThon " +"மற்றும் அடிப்படை இரண்டிற்கும் குறைந்த அளவிலான கணினி இடைமுகங்களைப் பயன்படுத்துகின்றன " +"திசையன் செய்யப்பட்ட செயல்பாடுகளை ஒரே நேரத்தில் செயல்படுத்துவதற்கும், உருவாக்கப்பட்ட " +"பொருட்களின் சரியான நினைவக அமைப்பை இறுக்கமாகக் கட்டுப்படுத்துவதற்கும் செயல்பாட்டு அமைப்பு." #: ../source/guides/packaging-binary-extensions.rst:69 msgid "Disadvantages" -msgstr "" +msgstr "குறைபாடுகள்" #: ../source/guides/packaging-binary-extensions.rst:71 msgid "" @@ -6597,28 +9711,38 @@ msgid "" "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 "" +msgstr "This means that இருமம் extensions:" #: ../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 "" +msgstr "Cpython குறிப்பு மொழிபெயர்ப்பாளரின் வெவ்வேறு கட்டடங்களுடன் பொருந்தாது" #: ../source/guides/packaging-binary-extensions.rst:86 msgid "" "often will not work correctly with alternative interpreters such as PyPy, " "IronPython or Jython" msgstr "" +"பைபி, அயர்ன் பிதான் அல்லது சைத்தான் போன்ற மாற்று மொழிபெயர்ப்பாளர்களுடன் பெரும்பாலும் " +"சரியாக வேலை செய்யாது" #: ../source/guides/packaging-binary-extensions.rst:89 msgid "" @@ -6626,6 +9750,9 @@ msgid "" "be familiar not only with Python, but also with the language used to create " "the binary extension, as well as with the details of the CPython C API." msgstr "" +"ஏண்ட்கோட் செய்யப்பட்டால், பராமரிப்பாளர்கள் பைத்தானுடன் மட்டுமல்லாமல், பைனரி நீட்டிப்பை " +"உருவாக்கப் பயன்படுத்தப்படும் மொழியுடனும், சிபிதான் சி பநிஇ விவரங்களுடனும் தெரிந்திருக்க " +"வேண்டும் என்று தேவைப்படுவதன் மூலம் பராமரிப்பை மிகவும் கடினமாக்குங்கள்." #: ../source/guides/packaging-binary-extensions.rst:94 msgid "" @@ -6634,6 +9761,10 @@ msgid "" "introducing additional complexity in the test suite to ensure both versions " "are always executed." msgstr "" +"ஒரு தூய பைதான் குறைவடையும் செயல்படுத்தல் வழங்கப்பட்டால், இரண்டு இடங்களில் மாற்றங்கள் " +"செயல்படுத்தப்பட வேண்டும் என்று தேவைப்படுவதன் மூலம் பராமரிப்பை மிகவும் கடினமாக்குங்கள், " +"மேலும் இரண்டு பதிப்புகளும் எப்போதும் செயல்படுத்தப்படுவதை உறுதிசெய்ய சோதனை தொகுப்பில் " +"கூடுதல் சிக்கலை அறிமுகப்படுத்துகின்றன." #: ../source/guides/packaging-binary-extensions.rst:99 msgid "" @@ -6642,10 +9773,14 @@ msgid "" "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 "" +msgstr "ஏண்ட்கோட் செய்யப்பட்ட முடுக்கி தொகுதிகளுக்கு மாற்று வழிகள்" #: ../source/guides/packaging-binary-extensions.rst:108 msgid "" @@ -6654,6 +9789,9 @@ msgid "" "additional maintenance effort), a number of other alternatives should also " "be considered:" msgstr "" +"குறியீட்டை வேகமாக இயக்க நீட்டிப்பு தொகுதிகள் பயன்படுத்தப்படும்போது (விவரக்குறிப்பு கூடுதல் " +"பராமரிப்பு முயற்சிக்கு மதிப்புள்ள குறியீட்டை விவரக்குறிப்பு அடையாளம் கண்டுள்ள பிறகு), பல " +"மாற்றுகளும் கருத்தில் கொள்ளப்பட வேண்டும்:" #: ../source/guides/packaging-binary-extensions.rst:113 msgid "" @@ -6664,6 +9802,12 @@ msgid "" "appropriate choice of standard library or third party module can avoid the " "need to create your own accelerator module." msgstr "" +"இருக்கும் உகந்த மாற்றுகளைத் தேடுங்கள். CPython நிலையான நூலகத்தில் பல உகந்த தரவு " +"கட்டமைப்புகள் மற்றும் வழிமுறைகள் (குறிப்பாக பில்டின்ச் மற்றும் `` சேகரிப்புகள்` மற்றும் `` " +"itertools`` தொகுதிகள்) உள்ளன. பைதான் தொகுப்பு குறியீடு கூடுதல் மாற்றுகளையும் " +"வழங்குகிறது. சில நேரங்களில், நிலையான நூலகம் அல்லது மூன்றாம் தரப்பு தொகுதியின் " +"பொருத்தமான தேர்வு உங்கள் சொந்த முடுக்கி தொகுதியை உருவாக்க வேண்டிய அவசியத்தைத் " +"தவிர்க்கலாம்." #: ../source/guides/packaging-binary-extensions.rst:120 msgid "" @@ -6677,6 +9821,15 @@ msgid "" "having one live reference instead of two often won't break anything, but no " "references instead of one is a major problem)." msgstr "" +"க்கு long running applications, the JIT compiled `PyPy interpreter `__ சி-வைகாசி offer a suitable alternative பெறுநர் the தரநிலை " +"CPython runtime. The main barrier பெறுநர் adopting PyPy is typically reliance " +"on மற்றொன்று இருமம் extension தொகுதிகள் - while PyPy does emulate the CPython C " +"பநிஇ, தொகுதிகள் that rely on that cause problems க்கு the PyPy JIT, and the " +"போன்மம் layer can often expose latent defects in extension தொகுதிகள் that " +"CPython currently tolerates (frequently around குறிப்பு counting errors - an " +"பொருள் having one live குறிப்பு instead of two often won't இடைவேளை anything, " +"but இல்லை குறிப்புகள் instead of one is a major problem)." #: ../source/guides/packaging-binary-extensions.rst:130 msgid "" @@ -6689,6 +9842,14 @@ msgid "" "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 "" @@ -6699,10 +9860,15 @@ msgid "" "code is running, but can provide significant speed increases, especially for " "operations that are amenable to vectorisation." msgstr "" +"`Numba ` __ என்பது ஒரு புதிய கருவியாகும், இது விஞ்ஞான " +"பைதான் சமூகத்தின் உறுப்பினர்களால் உருவாக்கப்பட்டது, இது ஒரு பைதான் பயன்பாட்டின் துண்டுகளை " +"தேர்ந்தெடுக்கப்பட்ட தொகுப்பை சொந்த இயந்திரக் குறியீட்டிற்கு அனுமதிக்க எல்.எல்.வி.எம் இயக்க " +"நேரம். குறியீடு இயங்கும் கணினியில் எல்.எல்.வி.எம் கிடைக்க வேண்டும், ஆனால் குறிப்பிடத்தக்க " +"வேக அதிகரிப்புகளை வழங்க முடியும், குறிப்பாக திசையன்மயமாக்கலுக்கு ஏற்ற செயல்பாடுகளுக்கு." #: ../source/guides/packaging-binary-extensions.rst:148 msgid "Alternatives to handcoded wrapper modules" -msgstr "" +msgstr "ஏண்ட்கோட் செய்யப்பட்ட ரேப்பர் தொகுதிகளுக்கு மாற்று வழிகள்" #: ../source/guides/packaging-binary-extensions.rst:150 msgid "" @@ -6712,6 +9878,11 @@ msgid "" "to tap into that functionality. However, wrapping modules by hand is quite " "tedious, so a number of other alternative approaches should be considered." msgstr "" +"சி பநிஇ (பயன்பாட்டு பைனரி இடைமுகம்) பல பயன்பாடுகளுக்கு இடையில் செயல்பாட்டைப் " +"பகிர்வதற்கான பொதுவான தரமாகும். Cpython C பநிஇ (பயன்பாட்டு நிரலாக்க இடைமுகம்) இன் " +"பலங்களில் ஒன்று பைத்தான் பயனர்களை அந்த செயல்பாட்டைத் தட்ட அனுமதிக்கிறது. இருப்பினும், " +"தொகுதிகளை கையால் மடக்குவது மிகவும் கடினமானது, எனவே பல மாற்று அணுகுமுறைகள் கருத்தில் " +"கொள்ளப்பட வேண்டும்." #: ../source/guides/packaging-binary-extensions.rst:156 msgid "" @@ -6719,6 +9890,9 @@ msgid "" "but they *can* significantly reduce the maintenance burden of keeping " "wrapper modules up to date." msgstr "" +"கீழே விவரிக்கப்பட்டுள்ள அணுகுமுறைகள் விநியோக வழக்கை எளிதாக்குவதில்லை, ஆனால் அவை " +"போர்வுற்ற தொகுதிகளை புதுப்பித்த நிலையில் வைத்திருப்பதற்கான பராமரிப்பு சுமையை கணிசமாகக் " +"குறைக்க முடியும்." #: ../source/guides/packaging-binary-extensions.rst:160 msgid "" @@ -6731,6 +9905,14 @@ msgid "" "automatic wrapping with Cython. It also supports performance-oriented Python " "implementations that provide a CPython-like C-API, such as PyPy and Pyston." msgstr "" +"முடுக்கி தொகுதிகள் உருவாக்க பயனுள்ளதாக இருப்பதோடு மட்டுமல்லாமல், சி அல்லது சி ++ " +"ஏபிஐகளுக்கான ரேப்பர் தொகுதிகள் உருவாக்க சைதான் __ __ பரவலாகப் " +"பயன்படுத்தப்படுகிறது. இது இடைமுகங்களை கையால் போர்த்துவதை உள்ளடக்கியது, இது ரேப்பர் " +"குறியீட்டை வடிவமைத்து மேம்படுத்துவதில் பரந்த அளவிலான சுதந்திரத்தை அளிக்கிறது, ஆனால் " +"மிகப் பெரிய ஏபிஐக்களை விரைவாக மடக்குவதற்கு நல்ல தேர்வாக இருக்காது. மூன்றாம் தரப்பு " +"கருவிகளின் பட்டியலைப் பார்க்கவும் " +"`_ சைதனுடன் தானியங்கி மடக்குதல். பைபி மற்றும் பிச்டன் போன்ற சிபிதான் போன்ற சி-ஏபிஐ " +"வழங்கும் செயல்திறன் சார்ந்த பைதான் செயலாக்கங்களையும் இது ஆதரிக்கிறது." #: ../source/guides/packaging-binary-extensions.rst:171 msgid "" @@ -6741,6 +9923,11 @@ msgid "" "`__, " "but doesn't require the Boost libraries or BJam." msgstr "" +". இதற்கு முன் செயலாக்க படி தேவையில்லை; இது முற்றிலும் வார்ப்புரு சி ++ இல் " +"எழுதப்பட்டுள்ளது. செட்டுப்டூல்கள் அல்லது செமேக் கட்டமைப்புகளுக்கு உதவியாளர்கள் " +"சேர்க்கப்பட்டுள்ளனர். இது `boost.python __, ஆனால் பூச்ட் நூலகங்கள் அல்லது பிசாம் " +"தேவையில்லை ." #: ../source/guides/packaging-binary-extensions.rst:178 msgid "" @@ -6750,6 +9937,8 @@ msgid "" "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 "" @@ -6757,6 +9946,9 @@ msgid "" "JIT, allowing CFFI wrapper modules to participate fully in PyPy's tracing " "JIT optimisations." msgstr "" +"`` Cffi`` இன் முக்கிய நன்மைகளில் ஒன்று, இது பைபி JIT உடன் இணக்கமானது, இது CFFI " +"ரேப்பர் தொகுதிகள் பைபியின் தடமறியும் JIT மேம்படுத்தல்களில் முழுமையாக பங்கேற்க " +"அனுமதிக்கிறது." #: ../source/guides/packaging-binary-extensions.rst:188 msgid "" @@ -6764,6 +9956,9 @@ msgid "" "a variety of programming languages, including Python, to interface with C " "and C++ code." msgstr "" +"`ச்விக் ____ என்பது ஒரு ரேப்பர் இடைமுக செனரேட்டர் ஆகும், இது " +"பைதான் உள்ளிட்ட பல்வேறு நிரலாக்க மொழிகளை சி மற்றும் சி ++ குறியீட்டுடன் இடைமுகப்படுத்த " +"அனுமதிக்கிறது." #: ../source/guides/packaging-binary-extensions.rst:192 msgid "" @@ -6778,10 +9973,20 @@ msgid "" "``cffi`` *can* operate directly at the C ABI level, it suffers from the same " "interface inconsistency problems as ``ctypes`` when it is used that way." msgstr "" +"நிலையான நூலகத்தின் `` ctypes`` தொகுதி, தலைப்பு செய்தி கிடைக்காதபோது சி நிலை " +"இடைமுகங்களை அணுகுவதற்கு பயனுள்ளதாக இருக்கும்போது, அது சி பநிஇ மட்டத்தில் மட்டுமே " +"இயங்குகிறது என்பதன் மூலம் பாதிக்கப்படுகிறது, இதனால் எந்த தானியங்கி நிலைத்தன்மையும் இல்லை " +"இடைமுகம் உண்மையில் நூலகத்தால் ஏற்றுமதி செய்யப்படுகிறது மற்றும் பைதான் குறியீட்டில் " +"அறிவிக்கப்பட்ட ஒன்று. இதற்கு நேர்மாறாக, மேலே உள்ள மாற்றுகள் அனைத்தும் சி * பநிஇ * " +"மட்டத்தில் செயல்பட முடியும், சி தலைப்பு கோப்புகளைப் பயன்படுத்தி நூலகத்தால் ஏற்றுமதி " +"செய்யப்படும் இடைமுகத்திற்கும் பைதான் ரேப்பர் தொகுதியால் எதிர்பார்க்கப்படுவதற்கும் இடையிலான " +"நிலைத்தன்மையை உறுதிசெய்கிறது. `` Cffi`` * * சி பநிஇ மட்டத்தில் நேரடியாக செயல்பட " +"முடியும் என்றாலும், அது அந்த வழியில் பயன்படுத்தப்படும்போது அதே இடைமுக முரண்பாடு " +"சிக்கல்களால் `` ctypes`` போன்றவற்றால் பாதிக்கப்படுகிறது." #: ../source/guides/packaging-binary-extensions.rst:206 msgid "Alternatives for low level system access" -msgstr "" +msgstr "குறைந்த அளவிலான கணினி அணுகலுக்கான மாற்று வழிகள்" #: ../source/guides/packaging-binary-extensions.rst:208 msgid "" @@ -6793,6 +9998,13 @@ msgid "" "like ``ctypes`` or ``cffi`` is used to obtain access to the relevant C API " "interfaces." msgstr "" +"குறைந்த அளவிலான கணினி அணுகல் தேவைப்படும் பயன்பாடுகளுக்கு (காரணத்தைப் பொருட்படுத்தாமல்), " +"ஒரு பைனரி நீட்டிப்பு தொகுதி பெரும்பாலும் * அதைப் பற்றிச் செல்ல சிறந்த வழியாகும். " +"சிபிதான் இயக்க நேரத்திற்கான குறைந்த அளவிலான அணுகலுக்கு இது குறிப்பாக உண்மை, ஏனெனில் " +"சில செயல்பாடுகள் (உலகளாவிய மொழிபெயர்ப்பாளர் பூட்டை வெளியிடுவது போன்றவை) " +"மொழிபெயர்ப்பாளர் குறியீட்டை இயக்கும்போது வெறுமனே செல்லாது, `` ctypes`` அல்லது `` " +"cffi` போன்ற ஒரு தொகுதி கூட இருந்தாலும் கூட தொடர்புடைய சி பநிஇ இடைமுகங்களுக்கான " +"அணுகலைப் பெற `பயன்படுத்தப்படுகிறது." #: ../source/guides/packaging-binary-extensions.rst:216 msgid "" @@ -6803,10 +10015,16 @@ msgid "" "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 "" +msgstr "பைனரி நீட்டிப்புகளை செயல்படுத்துகிறது" #: ../source/guides/packaging-binary-extensions.rst:227 msgid "" @@ -6814,16 +10032,21 @@ msgid "" "includes an introduction to writing a :doc:`custom extension module in C " "`." msgstr "" +"Cpython: doc: `விரிவாக்குதல் மற்றும் உட்பொதித்தல் <பைதான்: விரிவாக்குதல்/குறியீட்டு>` " +"வழிகாட்டியை எழுதுவதற்கான ஒரு அறிமுகம் அடங்கும்: doc: `C <பைதானில் தனிப்பயன் நீட்டிப்பு " +"தொகுதி: நீட்டித்தல்/நீட்டித்தல்>`." #: ../source/guides/packaging-binary-extensions.rst:231 msgid "" "FIXME: Elaborate that all this is one of the reasons why you probably " "*don't* want to handcode your extension modules :)" msgstr "" +"Fixme: உங்கள் நீட்டிப்பு தொகுதிகளை நீங்கள் கையால் வைக்க விரும்பாததற்கு இவை அனைத்தும் ஒரு " +"காரணம் என்பதை விரிவாகக் கூறுங்கள் :)" #: ../source/guides/packaging-binary-extensions.rst:236 msgid "Extension module lifecycle" -msgstr "" +msgstr "நீட்டிப்பு தொகுதி வாழ்க்கை சுழற்சி" #: ../source/guides/packaging-binary-extensions.rst:238 #: ../source/guides/packaging-binary-extensions.rst:244 @@ -6831,23 +10054,23 @@ msgstr "" #: ../source/guides/packaging-binary-extensions.rst:256 #: ../source/guides/packaging-binary-extensions.rst:376 msgid "FIXME: This section needs to be fleshed out." -msgstr "" +msgstr "Fixme: இந்த பகுதியை வெளியேற்ற வேண்டும்." #: ../source/guides/packaging-binary-extensions.rst:242 msgid "Implications of shared static state and subinterpreters" -msgstr "" +msgstr "பகிரப்பட்ட நிலையான நிலை மற்றும் துணை விளக்கக்காரர்களின் தாக்கங்கள்" #: ../source/guides/packaging-binary-extensions.rst:248 msgid "Implications of the GIL" -msgstr "" +msgstr "கிலின் தாக்கங்கள்" #: ../source/guides/packaging-binary-extensions.rst:254 msgid "Memory allocation APIs" -msgstr "" +msgstr "நினைவக ஒதுக்கீடு பநிஇ கள்" #: ../source/guides/packaging-binary-extensions.rst:262 msgid "ABI Compatibility" -msgstr "" +msgstr "ABI பொருந்தக்கூடிய தன்மை" #: ../source/guides/packaging-binary-extensions.rst:264 msgid "" @@ -6856,6 +10079,10 @@ msgid "" "module against one version of Python, it is only guaranteed to work with the " "same minor version of Python and not with any other minor versions." msgstr "" +"சிறிய வெளியீடுகளுக்கு (3.2, 3.3, 3.4, முதலியன) இடையே பநிஇ நிலைத்தன்மைக்கு சிபிதான் " +"சி பநிஇ பொறுப்பு அளிக்காது. இதன் பொருள், பொதுவாக, பைத்தானின் ஒரு பதிப்பிற்கு எதிராக " +"நீட்டிப்பு தொகுதியை நீங்கள் உருவாக்கினால், பைத்தானின் அதே சிறிய பதிப்போடு வேலை செய்வது " +"மட்டுமே பொறுப்பு அளிக்கப்படுகிறது, வேறு எந்த சிறிய பதிப்புகளுடனும் அல்ல." #: ../source/guides/packaging-binary-extensions.rst:270 msgid "" @@ -6865,6 +10092,12 @@ msgid "" "Wheels containing extensions built against the stable ABI use the ``abi3`` " "ABI tag, to reflect that they're compatible with all Python 3.x versions." msgstr "" +"பைதான் 3.2 வரையறுக்கப்பட்ட பநிஇ ஐ அறிமுகப்படுத்தியது, இது பைத்தானின் சி பநிஇ நன்கு " +"வரையறுக்கப்பட்ட துணைக்குழு ஆகும். வரையறுக்கப்பட்ட பநிஇ க்கு தேவையான சின்னங்கள் \"நிலையான " +"ABI\" ஐ உருவாக்குகின்றன, இது அனைத்து பைதான் 3.x பதிப்புகளிலும் இணக்கமாக இருக்கும் " +"என்று பொறுப்பு அளிக்கப்படுகிறது. நிலையான ஏபிஐக்கு எதிராக கட்டப்பட்ட நீட்டிப்புகளைக் கொண்ட " +"சக்கரங்கள் `` அபி 3`` பநிஇ குறிச்சொல்லைப் பயன்படுத்துகின்றன, அவை அனைத்து பைதான் 3. ஃச் " +"பதிப்புகளுடன் பொருந்தக்கூடியவை என்பதை பிரதிபலிக்க." #: ../source/guides/packaging-binary-extensions.rst:277 msgid "" @@ -6872,18 +10105,21 @@ msgid "" "information about the API / ABI stability guarantees, how to use the Limited " "API and the exact contents of the \"Limited API\"." msgstr "" +"Cpythons: Doc: `C பநிஇ நிலைத்தன்மை <பைதான்: சி-ஏபிஐ / ச்டேபிள்>` பக்கம் பநிஇ / பநிஇ " +"ச்திரத்தன்மை உத்தரவாதங்கள், வரையறுக்கப்பட்ட பநிஇ மற்றும் \"வரையறுக்கப்பட்ட பநிஇ\" இன் " +"சரியான உள்ளடக்கங்களை எவ்வாறு பயன்படுத்துவது என்பது பற்றிய விரிவான தகவல்களை வழங்குகிறது." #: ../source/guides/packaging-binary-extensions.rst:283 msgid "Building binary extensions" -msgstr "" +msgstr "பைனரி நீட்டிப்புகளை உருவாக்குதல்" #: ../source/guides/packaging-binary-extensions.rst:285 msgid "FIXME: Cover the build-backends available for building extensions." -msgstr "" +msgstr "Fixme: கட்டிட நீட்டிப்புகளுக்கு கிடைக்கக்கூடிய பில்ட்-பேக்கெண்டுகளை மறைக்கவும்." #: ../source/guides/packaging-binary-extensions.rst:288 msgid "Building extensions for multiple platforms" -msgstr "" +msgstr "பல தளங்களுக்கான நீட்டிப்புகளை உருவாக்குதல்" #: ../source/guides/packaging-binary-extensions.rst:290 msgid "" @@ -6893,6 +10129,11 @@ msgid "" "build highly redistributable binaries from CI; these include :ref:" "`cibuildwheel` and :ref:`multibuild`." msgstr "" +"உங்கள் நீட்டிப்பை விநியோகிக்க நீங்கள் திட்டமிட்டால், நீங்கள் வழங்க வேண்டும்: கால: `சக்கரங்கள் " +"` நீங்கள் ஆதரிக்க விரும்பும் அனைத்து தளங்களுக்கும். இவை பொதுவாக தொடர்ச்சியான " +"ஒருங்கிணைப்பு (சிஐ) அமைப்புகளில் கட்டப்பட்டுள்ளன. தொஒ இலிருந்து அதிக மறுபகிர்வு " +"செய்யக்கூடிய இருமங்களை உருவாக்க உதவும் கருவிகள் உள்ளன; இவை பின்வருவனவற்றை " +"உள்ளடக்குகின்றன: ref: `cibuildwheel` மற்றும்: ref:` மல்டிபில்ட்`." #: ../source/guides/packaging-binary-extensions.rst:296 msgid "" @@ -6900,6 +10141,8 @@ msgid "" "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 "" @@ -6909,10 +10152,15 @@ msgid "" "eliminating one dimension of the matrix. It also removes the need to " "generate new wheels for each new minor version of Python." msgstr "" +"Cpython ஐப் பயன்படுத்துதல்: ref: `நிலையான அபி ` நீங்கள் வழங்க " +"வேண்டிய சக்கரங்களின் எண்ணிக்கையை கணிசமாகக் குறைக்க உதவும், ஏனெனில் ஒரு மேடையில் ஒரு " +"சக்கரத்தை அனைத்து பைதான் சிறிய பதிப்புகளிலும் பயன்படுத்தலாம்; மேட்ரிக்சின் ஒரு பரிமாணத்தை " +"நீக்குகிறது. பைத்தானின் ஒவ்வொரு புதிய சிறிய பதிப்பிற்கும் புதிய சக்கரங்களை உருவாக்க " +"வேண்டிய அவசியத்தையும் இது நீக்குகிறது." #: ../source/guides/packaging-binary-extensions.rst:309 msgid "Binary extensions for Windows" -msgstr "" +msgstr "சாளரங்களுக்கான பைனரி நீட்டிப்புகள்" #: ../source/guides/packaging-binary-extensions.rst:311 msgid "" @@ -6923,6 +10171,12 @@ msgid "" "extensions, install `Visual Studio Community Edition `__ - any recent version is fine." msgstr "" +"பைனரி நீட்டிப்பை உருவாக்குவதற்கு முன், உங்களிடம் பொருத்தமான தொகுப்பி கிடைப்பதை உறுதி " +"செய்வது தேவை. சாளரங்களில், விசுவல் சி அதிகாரப்பூர்வ CPyThon மொழிபெயர்ப்பாளரை உருவாக்க " +"பயன்படுகிறது, மேலும் இணக்கமான பைனரி நீட்டிப்புகளை உருவாக்க பயன்படுத்தப்பட வேண்டும். " +"பைனரி நீட்டிப்புகளுக்கு ஒரு உருவாக்க சூழலை அமைக்க, `விசுவல் ச்டுடியோ சமூக பதிப்பை " +" __ __ - எந்த அண்மைக் கால " +"பதிப்பும் நன்றாக உள்ளது." #: ../source/guides/packaging-binary-extensions.rst:318 msgid "" @@ -6933,6 +10187,13 @@ msgid "" "that do not include this extra file. To avoid this, you can add the compile-" "time argument ``/d2FH4-``. Recent versions of Python may include this file." msgstr "" +"ஒரு எச்சரிக்கை: நீங்கள் விசுவல் ச்டுடியோ 2019 அல்லது அதற்குப் பிறகு பயன்படுத்தினால், உங்கள் " +"நீட்டிப்பு ஒரு \"கூடுதல்\" கோப்பைப் பொறுத்தது, `` vcruntime140_1.dll``, `` " +"vcruntime140.dll`` உடன் கூடுதலாக 2015 க்கு முந்தைய அனைத்து பதிப்புகளும் சார்ந்துள்ளது " +"ஆன். இந்த கூடுதல் கோப்பை சேர்க்காத CPyThon இன் பதிப்புகளில் உங்கள் நீட்டிப்பைப் " +"பயன்படுத்துவதற்கு இது கூடுதல் தேவையைச் சேர்க்கும். இதைத் தவிர்க்க, நீங்கள் தொகுக்கும் நேர " +"வாதத்தை ``/d2fh4 -`` சேர்க்கலாம். பைத்தானின் அண்மைக் கால பதிப்புகளில் இந்த கோப்பை " +"உள்ளடக்கியிருக்கலாம்." #: ../source/guides/packaging-binary-extensions.rst:326 msgid "" @@ -6945,10 +10206,18 @@ msgid "" "structures, and so on. Tools for generating extension modules usually avoid " "these things for you." msgstr "" +"3.5 க்கு முன்னர் பைத்தானைக் கட்டுவது ஊக்கமளிக்கிறது, ஏனெனில் விசுவல் ச்டுடியோவின் பழைய " +"பதிப்புகள் மைக்ரோசாப்டிலிருந்து இனி கிடைக்காது. பழைய பதிப்புகளை நீங்கள் உருவாக்க வேண்டும் " +"என்றால், நீங்கள் `` distutils_use_sdk = 1` மற்றும் `` mssdk = 1`` ஆகியவற்றை " +"அமைக்கலாம், தற்போது செயல்படுத்தப்பட்ட MSVC இன் பதிப்பைக் கண்டுபிடிக்கும்படி " +"கட்டாயப்படுத்தலாம், மேலும் உங்கள் நீட்டிப்பை வடிவமைக்கும்போது கவனிப்பைப் பயன்படுத்த வேண்டும் " +"வெவ்வேறு நூலகங்களில் மல்லோக்/இலவச நினைவகத்திற்கு அல்ல, மாற்றப்பட்ட தரவு கட்டமைப்புகளை " +"நம்புவதைத் தவிர்க்கவும், மற்றும் பல. நீட்டிப்பு தொகுதிகளை உருவாக்குவதற்கான கருவிகள் " +"பொதுவாக உங்களுக்காக இந்த விசயங்களைத் தவிர்க்கின்றன." #: ../source/guides/packaging-binary-extensions.rst:337 msgid "Binary extensions for Linux" -msgstr "" +msgstr "லினக்சிற்கான பைனரி நீட்டிப்புகள்" #: ../source/guides/packaging-binary-extensions.rst:339 msgid "" @@ -6957,10 +10226,14 @@ msgid "" "images provide a build environment with a glibc old enough to support most " "current Linux distributions on common architectures." msgstr "" +"லினக்ச் பைனரிகள் பழைய விநியோகங்களுடன் இணக்கமாக இருக்க போதுமான பழைய GLIBC ஐப் " +"பயன்படுத்த வேண்டும். `மேனிலினக்ச் ` _ கப்பல்துறை " +"படங்கள் பொதுவான கட்டமைப்புகளில் பெரும்பாலான தற்போதைய லினக்ச் விநியோகங்களை ஆதரிக்கும் " +"அளவுக்கு ஒரு GLIBC உடன் உருவாக்கும் சூழலை வழங்குகின்றன." #: ../source/guides/packaging-binary-extensions.rst:345 msgid "Binary extensions for macOS" -msgstr "" +msgstr "MACOS க்கான பைனரி நீட்டிப்புகள்" #: ../source/guides/packaging-binary-extensions.rst:347 msgid "" @@ -6973,10 +10246,15 @@ msgid "" "Spinning Wheels wiki `_." msgstr "" +"மாகோ களில் பைனரி பொருந்தக்கூடிய தன்மை இலக்கு குறைந்தபட்ச வரிசைப்படுத்தல் முறையால் " +"தீர்மானிக்கப்படுகிறது, எ.கா. *10. செட்டுப்டூல்கள் / தொலைதூரங்களுடன் கட்டும் போது, " +"வரிசைப்படுத்தல் இலக்கு ``-பிளாட்-பெயர்``, எ.கா. `` MACOSX-10.9-X86_64``. மேகோச் " +"பைதான் விநியோகங்களுக்கான பொதுவான வரிசைப்படுத்தல் இலக்குகளுக்கு, `மேக்பிதான் ச்பின்னிங் " +"சக்கரங்கள் விக்கி ` _." #: ../source/guides/packaging-binary-extensions.rst:357 msgid "Publishing binary extensions" -msgstr "" +msgstr "பைனரி நீட்டிப்புகளை வெளியிடுகிறது" #: ../source/guides/packaging-binary-extensions.rst:359 msgid "" @@ -6985,10 +10263,14 @@ msgid "" "using the build-backend and upload it to PyPI using :doc:`twine `." msgstr "" +"PYPI மூலம் பைனரி நீட்டிப்புகளை வெளியிடுவது தூய பைதான் தொகுப்புகளை வெளியிடுவது போன்ற " +"அதே பதிவேற்ற வழிமுறைகளைப் பயன்படுத்துகிறது. பில்ட்-பேக்கெண்டைப் பயன்படுத்தி உங்கள் " +"நீட்டிப்புக்கு ஒரு சக்கரக் கோப்பை உருவாக்கி, அதை பைபியில் பதிவேற்றவும்: டாக்: `ட்வைன் " +"<கயிறு: குறியீட்டு>`." #: ../source/guides/packaging-binary-extensions.rst:365 msgid "Avoid binary-only releases" -msgstr "" +msgstr "பைனரி மட்டும் வெளியீடுகளைத் தவிர்க்கவும்" #: ../source/guides/packaging-binary-extensions.rst:367 msgid "" @@ -6998,14 +10280,19 @@ msgid "" "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 "" +msgstr "பலவீனமான இணைப்பு" #: ../source/guides/packaging-binary-extensions.rst:379 msgid "Additional resources" -msgstr "" +msgstr "கூடுதல் ஆதாரங்கள்" #: ../source/guides/packaging-binary-extensions.rst:381 msgid "" @@ -7016,10 +10303,16 @@ msgid "" "for developers looking to understand more about the underlying binary " "interfaces that those systems rely on at runtime." msgstr "" +"குறுக்கு-தளம் மேம்பாடு மற்றும் நீட்டிப்பு தொகுதிகளின் வழங்கல் ஒரு சிக்கலான தலைப்பு, எனவே " +"இந்த வழிகாட்டி முதன்மையாக அடிப்படை தொழில்நுட்ப சவால்களைக் கையாள்வதை தானியக்கமாக்கும் " +"பல்வேறு கருவிகளுக்கு சுட்டிகள் வழங்குவதில் கவனம் செலுத்துகிறது. இந்த பிரிவில் உள்ள " +"கூடுதல் ஆதாரங்கள் அதற்கு பதிலாக அந்த அமைப்புகள் இயக்க நேரத்தில் நம்பியிருக்கும் அடிப்படை " +"பைனரி இடைமுகங்களைப் பற்றி மேலும் புரிந்து கொள்ள விரும்பும் டெவலப்பர்களுக்காக " +"வடிவமைக்கப்பட்டுள்ளன." #: ../source/guides/packaging-binary-extensions.rst:388 msgid "Cross-platform wheel generation with scikit-build" -msgstr "" +msgstr "ச்கிகிட்-கட்டமைப்போடு குறுக்கு-தளம் சக்கர விளைவாக்கம்" #: ../source/guides/packaging-binary-extensions.rst:390 msgid "" @@ -7030,36 +10323,44 @@ msgid "" "system generator `_ for Python binary extension modules." msgstr "" +"`Scikit-build _ _ தொகுப்பு " +"சுருக்க குறுக்கு-தளம் உருவாக்கும் செயல்பாடுகளுக்கு உதவுகிறது மற்றும் பைனரி நீட்டிப்பு " +"தொகுப்புகளை உருவாக்கும்போது கூடுதல் திறன்களை வழங்குகிறது. கூடுதல் ஆவணங்கள் `சி இயக்க " +"நேரம், கம்பைலர் மற்றும் உருவாக்க கணினி செனரேட்டர் ` _ பைதான் பைனரி விரிவாக்க தொகுதிகளிலும் " +"கிடைக்கிறது." #: ../source/guides/packaging-binary-extensions.rst:398 msgid "Introduction to C/C++ extension modules" -msgstr "" +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 "" +"டெபியன் அமைப்பில் CPython ஆல் நீட்டிப்பு தொகுதிகள் எவ்வாறு பயன்படுத்தப்படுகின்றன என்பதற்கான " +"ஆழமான விளக்கத்திற்கு, பின்வரும் கட்டுரைகளைப் பார்க்கவும்:" #: ../source/guides/packaging-binary-extensions.rst:403 msgid "" "`What are (c)python extension modules? `_" -msgstr "" +msgstr "`(சி) பைதான் நீட்டிப்பு தொகுதிகள் என்றால் என்ன? இப்போது" #: ../source/guides/packaging-binary-extensions.rst:404 msgid "`Releasing the gil `_" -msgstr "" +msgstr "`கில் ` _" #: ../source/guides/packaging-binary-extensions.rst:405 msgid "" "`Writing cpython extension modules using C++ `_" -msgstr "" +msgstr "C ++ `_" #: ../source/guides/packaging-binary-extensions.rst:408 msgid "Additional considerations for binary wheels" -msgstr "" +msgstr "பைனரி சக்கரங்களுக்கான கூடுதல் பரிசீலனைகள்" #: ../source/guides/packaging-binary-extensions.rst:410 msgid "" @@ -7068,6 +10369,10 @@ msgid "" "aims to provide an overview of the most important packaging issues for such " "projects, with in-depth explanations and references." msgstr "" +"`Pypackaging-native ` _ வலைத்தளமானது " +"பைதான் தொகுப்புகளை சொந்தக் குறியீட்டைக் கொண்டு பேக்கேசிங் செய்வதில் கூடுதல் பாதுகாப்பு " +"உள்ளது. ஆழ்ந்த விளக்கங்கள் மற்றும் குறிப்புகளுடன், இதுபோன்ற திட்டங்களுக்கு மிக முக்கியமான " +"பேக்கேசிங் சிக்கல்களின் கண்ணோட்டத்தை வழங்குவதை இது நோக்கமாகக் கொண்டுள்ளது." #: ../source/guides/packaging-binary-extensions.rst:415 msgid "" @@ -7075,10 +10380,13 @@ msgid "" "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 "" +msgstr "பேக்கேசிங் பெயர்வெளி தொகுப்புகள்" #: ../source/guides/packaging-namespace-packages.rst:7 msgid "" @@ -7088,18 +10396,25 @@ msgid "" "**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 "" +msgstr "இந்த தொகுப்பை உங்கள் குறியீட்டில் பயன்படுத்துகிறீர்கள் ::" #: ../source/guides/packaging-namespace-packages.rst:31 msgid "Then you can break these sub-packages into two separate distributions:" -msgstr "" +msgstr "இந்த துணை தொகுப்புகளை நீங்கள் இரண்டு தனித்தனி விநியோகங்களாக உடைக்கலாம்:" #: ../source/guides/packaging-namespace-packages.rst:50 msgid "Each sub-package can now be separately installed, used, and versioned." msgstr "" +"ஒவ்வொரு துணைத் தொகுப்பையும் இப்போது தனித்தனியாக நிறுவலாம், பயன்படுத்தலாம் மற்றும் பதிப்பு " +"செய்யலாம்." #: ../source/guides/packaging-namespace-packages.rst:52 msgid "" @@ -7111,16 +10426,25 @@ msgid "" "mynamespace_subpackage_a`` (you could even use ``import " "mynamespace_subpackage_a as subpackage_a`` to keep the import object short)." msgstr "" +"தளர்வான தொடர்புடைய தொகுப்புகளின் பெரிய சேகரிப்புக்கு பெயர்வெளி தொகுப்புகள் பயனுள்ளதாக " +"இருக்கும் (ஒரு நிறுவனத்திடமிருந்து பல தயாரிப்புகளுக்கான கிளையன்ட் நூலகங்களின் பெரிய " +"கார்பச் போன்றவை). இருப்பினும், பெயர்வெளி தொகுப்புகள் பல எச்சரிக்கைகளுடன் வருகின்றன, அவை " +"எல்லா நிகழ்வுகளிலும் பொருத்தமானவை அல்ல. ஒரு எளிய மாற்று என்னவென்றால், `` " +"mynamespace_subpackage_a`` போன்ற உங்கள் விநியோகங்கள் அனைத்திலும் ஒரு முன்னொட்டைப் " +"பயன்படுத்துவது (நீங்கள் `` mynamespace_subpackage_a ஐ subpackage_a ஆக இறக்குமதி " +"செய்யலாம்) இறக்குமதி பொருளை குறுகியதாக வைத்திருக்க)." #: ../source/guides/packaging-namespace-packages.rst:62 msgid "Creating a namespace package" -msgstr "" +msgstr "பெயர்வெளி தொகுப்பை உருவாக்குதல்" #: ../source/guides/packaging-namespace-packages.rst:64 msgid "" "There are currently two different approaches to creating namespace packages, " "from which the latter is discouraged:" msgstr "" +"பெயர்வெளி தொகுப்புகளை உருவாக்குவதற்கு தற்போது இரண்டு வெவ்வேறு அணுகுமுறைகள் உள்ளன, " +"அவற்றில் இருந்து பிந்தையது ஊக்கமளிக்கிறது:" #: ../source/guides/packaging-namespace-packages.rst:67 msgid "" @@ -7129,16 +10453,23 @@ msgid "" "if packages in your namespace only ever need to support Python 3 and " "installation via ``pip``." msgstr "" +"`சொந்த பெயர்வெளி தொகுப்புகள்`_ ஐப் பயன்படுத்தவும். இந்த வகை பெயர்வெளி தொகுப்பு இதில் " +"வரையறுக்கப்பட்டுள்ளது: PEP: `420` மற்றும் பைதான் 3.3 மற்றும் அதற்குப் பிறகு கிடைக்கிறது. " +"உங்கள் பெயர்வெளியில் உள்ள தொகுப்புகள் எப்போதாவது பைதான் 3 மற்றும் நிறுவலை `` பிப்`` " +"வழியாக மட்டுமே ஆதரிக்க வேண்டும் என்றால் இது பரிந்துரைக்கப்படுகிறது." #: ../source/guides/packaging-namespace-packages.rst:71 msgid "" "Use `legacy namespace packages`_. This comprises `pkgutil-style namespace " "packages`_ and `pkg_resources-style namespace packages`_." msgstr "" +"`மரபு பெயர்வெளி தொகுப்புகள்`_ ஐப் பயன்படுத்தவும். இது `pkgutil- பாணி பெயர்வெளி " +"தொகுப்புகள்`_ மற்றும்` pkg_resources- பாணி பெயர்வெளி தொகுப்புகள்`_ ஆகியவற்றைக் " +"கொண்டுள்ளது." #: ../source/guides/packaging-namespace-packages.rst:75 msgid "Native namespace packages" -msgstr "" +msgstr "சொந்த பெயர்வெளி தொகுப்புகள்" #: ../source/guides/packaging-namespace-packages.rst:77 msgid "" @@ -7147,6 +10478,10 @@ msgid "" "`__init__.py` from the namespace package directory. An example file " "structure (following :ref:`src-layout `):" msgstr "" +"பைதான் 3.3 சேர்க்கப்பட்டது ** மறைமுக ** பெயர்வெளி தொகுப்புகள்: பெப்: `420`. ஒரு சொந்த " +"பெயர்வெளி தொகுப்பை உருவாக்க தேவையானது என்னவென்றால், நீங்கள் தவிர்க்கவும்: கோப்பு: `__init " +"__. பெயர்வெளி தொகுப்பு கோப்பகத்திலிருந்து. ஒரு எடுத்துக்காட்டு கோப்பு அமைப்பு " +"(பின்வருமாறு: குறிப்பு: `எச்.ஆர்.சி-லேஅவுட் <செட்டப்டூல்ச்: எச்.ஆர்.சி-லேஅவுட்>`):" #: ../source/guides/packaging-namespace-packages.rst:94 msgid "" @@ -7155,6 +10490,10 @@ msgid "" "`__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 "" +"பெயர்வெளி தொகுப்பைப் பயன்படுத்தும் ஒவ்வொரு விநியோகமும் பின்வாங்குவது மிகவும் முக்கியம்: " +"கோப்பு: `__init __. Py` அல்லது pkgutil- பாணியைப் பயன்படுத்துகிறது: கோப்பு:` __init " +"__. Py`. எந்தவொரு விநியோகமும் இல்லையென்றால், அது பெயர்வெளி வழக்கு தோல்வியடையும், மற்ற " +"துணை தொகுப்புகள் இறக்குமதி செய்யப்படாது." #: ../source/guides/packaging-namespace-packages.rst:99 msgid "" @@ -7164,26 +10503,35 @@ msgid "" "exclusions or inclusions of packages yourself, this is possible to be " "configured in the top-level :file:`pyproject.toml`:" msgstr "" +"`` எச்.ஆர்.சி-லேஅவுட்`` அடைவு அமைப்பு பெரும்பாலானவற்றால் தொகுப்புகளை தானாக " +"கண்டுபிடிப்பதை அனுமதிக்கிறது: கால: `பின்தளத்தில் உருவாக்கு <பின்தளத்தில் உருவாக்கு>`. " +"காண்க: குறிப்பு: மேலும் தகவலுக்கு `எச்.ஆர்.சி-லேஅவுட்-வி.எச்-பிளாட்-லேஅவுட்`. " +"எவ்வாறாயினும், தொகுப்புகளின் விலக்குகள் அல்லது சேர்த்தல்களை நீங்களே நிர்வகிக்க விரும்பினால், " +"இது உயர் மட்டத்தில் கட்டமைக்க முடியும்: கோப்பு: `pyproject.toml`:" #: ../source/guides/packaging-namespace-packages.rst:117 msgid "The same can be accomplished with a :file:`setup.cfg`:" -msgstr "" +msgstr "ஒரு: கோப்பு: `setup.cfg`:" #: ../source/guides/packaging-namespace-packages.rst:129 msgid "Or :file:`setup.py`:" -msgstr "" +msgstr "அல்லது: கோப்பு: `setup.py`:" #: ../source/guides/packaging-namespace-packages.rst:142 msgid "" ":ref:`setuptools` will search the directory structure for implicit namespace " "packages by default." msgstr "" +":ref:`setuptools` will தேடல் the directory structure க்கு implicit பெயர்வெளி " +"தொகுப்பு by default." #: ../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 "" @@ -7192,10 +10540,14 @@ msgid "" "Python 3 and pkgutil-style namespace packages in the distributions that need " "to support Python 2 and 3." msgstr "" +"பூர்வீக மற்றும் PKGUTIL- பாணி பெயர்வெளி தொகுப்புகள் பெரும்பாலும் இணக்கமானவை என்பதால், " +"பைத்தான் 2 மற்றும் 3 ஐ ஆதரிக்க வேண்டிய விநியோகங்களில் பைதான் 3 மற்றும் PKGUTIL- பாணி " +"பெயர்வெளி தொகுப்புகளை மட்டுமே ஆதரிக்கும் விநியோகங்களில் நீங்கள் சொந்த பெயர்வெளி " +"தொகுப்புகளைப் பயன்படுத்தலாம்." #: ../source/guides/packaging-namespace-packages.rst:158 msgid "Legacy namespace packages" -msgstr "" +msgstr "மரபு பெயர்வெளி தொகுப்புகள்" #: ../source/guides/packaging-namespace-packages.rst:160 msgid "" @@ -7204,12 +10556,18 @@ msgid "" "need compatibility with packages already using this method. Also, :doc:" "`pkg_resources ` has been deprecated." msgstr "" +"இதற்கு முன்னர் பெயர்வெளி தொகுப்புகளை உருவாக்கப் பயன்படுத்தப்பட்ட இந்த இரண்டு முறைகள்: PEP: " +"`420`, இப்போது வழக்கற்றுப் போய்விட்டதாகக் கருதப்படுகின்றன, மேலும் இந்த முறையைப் " +"பயன்படுத்தும் தொகுப்புகளுடன் உங்களுக்கு பொருந்தக்கூடிய தன்மை தேவைப்பட்டால் " +"பயன்படுத்தப்படக்கூடாது. மேலும், டிஓசி: `பி.கே." #: ../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 "" @@ -7218,10 +10576,14 @@ msgid "" "compatible with the other methods. It's inadvisable to use different methods " "in different distributions that provide packages to the same namespace." msgstr "" +"சொந்த பெயர்வெளி தொகுப்புகள் மற்றும் PKGUTIL- பாணி பெயர்வெளி தொகுப்புகள் பெரும்பாலும் " +"இணக்கமானவை என்றாலும், PKG_RESOURCES- பாணி பெயர்வெளி தொகுப்புகள் மற்ற முறைகளுடன் " +"பொருந்தாது. ஒரே பெயர்வெளிக்கு தொகுப்புகளை வழங்கும் வெவ்வேறு விநியோகங்களில் வெவ்வேறு " +"முறைகளைப் பயன்படுத்துவது தவிர்க்க முடியாதது." #: ../source/guides/packaging-namespace-packages.rst:174 msgid "pkgutil-style namespace packages" -msgstr "" +msgstr "Pkgutil- பாணி பெயர்வெளி தொகுப்புகள்" #: ../source/guides/packaging-namespace-packages.rst:176 msgid "" @@ -7231,12 +10593,19 @@ msgid "" "and Python 3. This is the recommended approach for the highest level of " "compatibility." msgstr "" +"பைதான் 2.3 அறிமுகப்படுத்தியது: டாக்: `pkgutil ` தொகுதி " +"மற்றும்: py: func: `python: pkgutil.extend_path` செயல்பாடு. பைதான் 2.3+ மற்றும் " +"பைதான் 3 ஆகிய இரண்டிற்கும் இணக்கமாக இருக்க வேண்டிய பெயர்வெளி தொகுப்புகளை அறிவிக்க இதைப் " +"பயன்படுத்தலாம். இது மிக உயர்ந்த பொருந்தக்கூடிய அளவிற்கு பரிந்துரைக்கப்பட்ட " +"அணுகுமுறையாகும்." #: ../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 "" +"ஒரு pkgutil- பாணி பெயர்வெளி தொகுப்பை உருவாக்க, நீங்கள் ஒரு: கோப்பு: `__init __. " +"பெயர்வெளி தொகுப்புக்கான கோப்பு:" #: ../source/guides/packaging-namespace-packages.rst:195 #: ../source/guides/packaging-namespace-packages.rst:242 @@ -7244,6 +10613,8 @@ msgid "" "The :file:`__init__.py` file for the namespace package needs to contain the " "following:" msgstr "" +"தி: கோப்பு: `__init __. பெயர்வெளி தொகுப்புக்கான கோப்பு பின்வருவனவற்றைக் கொண்டிருக்க " +"வேண்டும்:" #: ../source/guides/packaging-namespace-packages.rst:202 #: ../source/guides/packaging-namespace-packages.rst:249 @@ -7253,16 +10624,22 @@ msgid "" "namespace logic to fail and the other sub-packages will not be importable. " "Any additional code in :file:`__init__.py` will be inaccessible." msgstr "" +"** பெயர்வெளி தொகுப்பைப் பயன்படுத்தும் ஒவ்வொரு ** விநியோகமும் அத்தகைய: கோப்பு: __init " +"__. Py`. எந்தவொரு விநியோகமும் இல்லையென்றால், அது பெயர்வெளி வழக்கு தோல்வியடையும், மற்ற " +"துணை தொகுப்புகள் இறக்குமதி செய்யப்படாது. ஏதேனும் கூடுதல் குறியீடு: கோப்பு: `__init " +"__. Py` அணுக முடியாததாக இருக்கும்." #: ../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 "" +"இரண்டு Pkgutil- பாணி பெயர்வெளி தொகுப்புகளின் முழுமையான வேலை உதாரணத்தை `pkgutil " +"பெயர்வெளி எடுத்துக்காட்டு திட்டம்`_ இல் காணலாம்." #: ../source/guides/packaging-namespace-packages.rst:217 msgid "pkg_resources-style namespace packages" -msgstr "" +msgstr "PKG_RESOURCES-பாணி பெயர்வெளி தொகுப்புகள்" #: ../source/guides/packaging-namespace-packages.rst:219 msgid "" @@ -7275,18 +10652,28 @@ msgid "" "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 "" +"PKG_RESOURCES- பாணி பெயர்வெளி தொகுப்பை உருவாக்க, நீங்கள் ஒரு: கோப்பு: `__init __. " +"பெயர்வெளி தொகுப்புக்கான கோப்பு:" #: ../source/guides/packaging-namespace-packages.rst:254 msgid "" "Some older recommendations advise the following in the namespace package :" "file:`__init__.py`:" msgstr "" +"சில பழைய பரிந்துரைகள் பெயர்வெளி தொகுப்பில் பின்வருவனவற்றை அறிவுறுத்துகின்றன: கோப்பு: " +"`__init __. Py`:" #: ../source/guides/packaging-namespace-packages.rst:264 msgid "" @@ -7296,23 +10683,34 @@ msgid "" "cross-compatible. If the presence of setuptools is a concern then the " "package should just explicitly depend on setuptools via ``install_requires``." msgstr "" +"இதன் பின்னணியில் உள்ள சிந்தனை என்னவென்றால், செட்டுப்டூல்ச் கிடைக்காத அரிதான விசயத்தில் " +"தொகுப்புகள் PKGUTIL- பாணி தொகுப்புகளுக்கு விழும். இது நல்லதல்ல, ஏனெனில் PKGUTIL " +"மற்றும் PKG_RESOURCES-பாணி பெயர்வெளி தொகுப்புகள் குறுக்கு இணக்கமானவை அல்ல. " +"செட்ப்டூல்களின் இருப்பு ஒரு கவலையாக இருந்தால், தொகுப்பு `` install_requires`` வழியாக " +"செட்டுப்டூல்களை வெளிப்படையாக சார்ந்து இருக்க வேண்டும்." #: ../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 "" +"இறுதியாக, ஒவ்வொரு விநியோகமும் `` பெயர்வெளி_பேக்கேச்கள்` வாதத்தை வழங்க வேண்டும்: func: " +"`~ setuptools.setup` இல்: கோப்பு:` setup.py`. உதாரணமாக:" #: ../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 "" +"இரண்டு pkg_resources- பாணி பெயர்வெளி தொகுப்புகளின் முழுமையான வேலை எடுத்துக்காட்டு " +"`pkg_resources பெயர்வெளி எடுத்துக்காட்டு திட்டம்`_ இல் காணலாம்." #: ../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 "" @@ -7324,6 +10722,14 @@ msgid "" "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 "" @@ -7332,10 +10738,14 @@ msgid "" "details of building platform specific projects. If you have binary " "components, check out :ref:`cibuildwheel`'s GitHub Action examples." msgstr "" +"இந்த வழிகாட்டி *உங்களிடம் ஏற்கனவே ஒரு திட்டம் உள்ளது என்று கருதுகிறது. இந்த வழிகாட்டி " +"தளமான குறிப்பிட்ட திட்டங்களை உருவாக்குவதற்கான விவரங்களையும் தவிர்க்கிறது. உங்களிடம் " +"பைனரி கூறுகள் இருந்தால், பாருங்கள்: குறிப்பு: `cibuildwheel` இன் அறிவிலிமையம் அதிரடி " +"எடுத்துக்காட்டுகள்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:25 msgid "Configuring trusted publishing" -msgstr "" +msgstr "நம்பகமான வெளியீட்டை உள்ளமைத்தல்" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:27 msgid "" @@ -7347,6 +10757,13 @@ msgid "" "doc:`devpi `, you may need to provide a username/password " "combination." msgstr "" +"இந்த வழிகாட்டி `கிதுப் செயல்கள் CI/CD`_ உடன் இணைக்க PYPI இன்` நம்பகமான வெளியீடு`_ " +"செயல்படுத்தலை நம்பியுள்ளது. பாதுகாப்பு காரணங்களுக்காக இது பரிந்துரைக்கப்படுகிறது, " +"ஏனெனில் உங்கள் ஒவ்வொரு திட்டத்திற்கும் தனித்தனியாக உருவாக்கப்பட்ட டோக்கன்கள் உருவாக்கப்பட்டு " +"தானாகவே காலாவதியாகின்றன. இல்லையெனில், நீங்கள் PYPI மற்றும் TestPypi இரண்டிற்கும் `API " +"டோக்கன்`_ ஐ உருவாக்க வேண்டும். மூன்றாம் தரப்பு குறியீடுகளுக்கு வெளியிடினால்: DOC: " +"`devpi `, நீங்கள் ஒரு பயனர்பெயர்/கடவுச்சொல் கலவையை வழங்க " +"வேண்டியிருக்கலாம்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:35 msgid "" @@ -7356,6 +10773,12 @@ msgid "" "`. However it is also possible to add `trusted publishing`_ to any " "pre-existing project, if you are its owner." msgstr "" +"இந்த வழிகாட்டி PYPI மற்றும் TestPypi இரண்டிலும் பதிவேற்றுவதை நிரூபிக்கும் என்பதால், " +"எங்களுக்கு கட்டமைக்கப்பட்ட இரண்டு நம்பகமான வெளியீட்டாளர்கள் தேவை. உங்கள் புதிய: கால: `PYPI " +"திட்டம் <திட்டம்>` `பைபி திட்டம்:` பைபி திட்டம்: `பைபி திட்டம்:` PYPI திட்டம்: `பைபி " +"திட்டம்:` பைபி திட்டம்: `பைபி திட்டம்:` பைபி திட்டம்: `பைபி திட்டம்: எவ்வாறாயினும், நீங்கள் " +"அதன் உரிமையாளராக இருந்தால், முன்பே இருக்கும் எந்தவொரு திட்டத்திலும் `நம்பகமான பப்ளிசிங்`_ " +"ஐச் சேர்க்கவும் முடியும்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:44 msgid "" @@ -7365,14 +10788,19 @@ msgid "" "repository and revoke them in your PyPI and TestPyPI account settings in " "case you are replacing your old setup with the new one." msgstr "" +"இந்த வழிகாட்டியின் முந்தைய பதிப்புகளை நீங்கள் பின்பற்றினால், நேரடி பைபி மற்றும் டெச்ட்பிஐ " +"அணுகலுக்காக `` pypi_api_token`` மற்றும் `` test_pypi_api_token` ஆகியவற்றை நீங்கள் " +"உருவாக்கியுள்ளீர்கள். இவை இப்போது வழக்கற்றுப் போய்விட்டன, அவற்றை உங்கள் அறிவிலிமையம் " +"களஞ்சியத்திலிருந்து அகற்றி, உங்கள் பழைய அமைப்பை புதியதாக மாற்றினால் அவற்றை உங்கள் பைபி " +"மற்றும் டெச்ட்பிஐ கணக்கு அமைப்புகளில் ரத்து செய்ய வேண்டும்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:51 msgid "Let's begin! 🚀" -msgstr "" +msgstr "ஆரம்பிக்கலாம்! ." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:53 msgid "Go to https://pypi.org/manage/account/publishing/." -msgstr "" +msgstr "Https://pypi.org/manage/account/publishing/ க்குச் செல்லவும்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:54 msgid "" @@ -7384,6 +10812,12 @@ msgid "" "(``pypi``) we're going set up under your repository. Register the trusted " "publisher." msgstr "" +"உங்கள் புதியதை வெளியிட விரும்பும் பெயரை நிரப்பவும்: கால: `பைபி திட்டம் <திட்டம்>` கீழ் " +"(உங்கள் `` setup.cfg`` அல்லது `` pyproject.toml``), Kithub களஞ்சிய உரிமையாளரின் " +"பெயர் (org அல்லது பயனர்), மற்றும் களஞ்சிய பெயர், மற்றும் `` .github/`` இன் கீழ் வெளியீட்டு " +"பணிப்பாய்வு கோப்பின் பெயர் கோப்புறை, காண்க: குறிப்பு: `பணிப்பாய்வு-வரையறை`. இறுதியாக, " +"அறிவிலிமையம் சூழலின் பெயரைச் சேர்க்கவும் (`` பைபி``) நாங்கள் உங்கள் களஞ்சியத்தின் கீழ் " +"அமைக்கப் போகிறோம். நம்பகமான வெளியீட்டாளரை பதிவு செய்யுங்கள்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:63 msgid "" @@ -7391,18 +10825,26 @@ msgid "" "second step, but this time, enter ``testpypi`` as the name of the GitHub " "Environment." msgstr "" +"இப்போது, https://test.pypi.org/manage/account/publishing/ க்குச் சென்று இரண்டாவது " +"படியை மீண்டும் செய்யவும், ஆனால் இந்த நேரத்தில், அறிவிலிமையம் சூழலின் பெயராக `` " +"டெச்ட்பைபி`` ஐ உள்ளிடவும்." #: ../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 "" +"உங்களிடம் டெச்ட்பை கணக்கு இல்லையென்றால், நீங்கள் அதை உருவாக்க வேண்டும். இது வழக்கமான PYPI " +"கணக்கைப் போலவே இல்லை." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:78 msgid "" @@ -7411,58 +10853,75 @@ msgid "" "environments-for-deployment#deployment-protection-rules>`_ on each run for " "the ``pypi`` environment." msgstr "" +"பாதுகாப்பு காரணங்களுக்காக, உங்களுக்கு `கையேடு ஒப்புதல் தேவை ` _ on ஒவ்வொன்றும் `` " +"பைபி`` சூழலுக்கு ஓடுகின்றன." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 msgid "Creating a workflow definition" -msgstr "" +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 "" +"Kithub CI/CD பணிப்பாய்வுகள் `` .github/பணிப்பாய்வு/`` உங்கள் களஞ்சியத்தின் கோப்பகத்தில் " +"சேமிக்கப்பட்ட YAML கோப்புகளில் அறிவிக்கப்படுகின்றன." #: ../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 "" +msgstr "`` .Github/பணிப்பாய்வு/வெளியீடு-க்கு-சோதனை-pypi.yml`` கோப்பை உருவாக்குவோம்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:93 msgid "" "Start it with a meaningful name and define the event that should make GitHub " "run this workflow:" msgstr "" +"இதை ஒரு அர்த்தமுள்ள பெயருடன் தொடங்கி, இந்த பணிப்பாய்வுகளை அறிவிலிமையம் இயக்க வேண்டிய " +"நிகழ்வை வரையறுக்கவும்:" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:101 msgid "Checking out the project and building distributions" -msgstr "" +msgstr "திட்டத்தை சரிபார்த்து, கட்டிட விநியோகங்களை உருவாக்குதல்" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:103 msgid "" "We will have to define two jobs to publish to PyPI and TestPyPI " "respectively, and an additional job to build the distribution packages." msgstr "" +"முறையே PYPI மற்றும் TestPypi க்கு வெளியிட இரண்டு வேலைகள் மற்றும் விநியோக தொகுப்புகளை " +"உருவாக்க கூடுதல் வேலை ஆகியவற்றை வரையறுக்க வேண்டும்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst: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 "" +"இது உங்கள் களஞ்சியத்தை தொஒ ரன்னரில் பதிவிறக்கம் செய்து பின்னர் கிடைக்கக்கூடிய புதிய பைதான் " +"3 வெளியீட்டை நிறுவி செயல்படுத்தும்." #: ../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 "" +msgstr "பணிப்பாய்வு வேலை சூழலை வரையறுத்தல்" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:130 msgid "" @@ -7474,20 +10933,29 @@ msgid "" "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 "" +"தற்போதைய கமிட் குறிக்கப்பட்டால் மட்டுமே PYPI பப்ளிசிங் பணிப்பாய்வு தூண்டப்படுவதை இது " +"உறுதி செய்யும்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:148 msgid "Publishing the distribution to PyPI" -msgstr "" +msgstr "PYPI க்கு விநியோகத்தை வெளியிடுகிறது" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:150 msgid "Finally, add the following steps at the end:" -msgstr "" +msgstr "இறுதியாக, முடிவில் பின்வரும் படிகளைச் சேர்க்கவும்:" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:157 msgid "" @@ -7496,10 +10964,14 @@ msgid "" "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:163 msgid "Signing the distribution packages" -msgstr "" +msgstr "விநியோக தொகுப்புகளில் கையொப்பமிடுதல்" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:165 msgid "" @@ -7507,6 +10979,9 @@ msgid "" "artifact signing system `used to sign CPython `_." msgstr "" +"பின்வரும் வேலை விநியோக தொகுப்புகளை `சிக்ச்டோர்`_ உடன் கையொப்பமிடுகிறது, அதே " +"கலைப்பொருள் கையொப்பமிடும் அமைப்பு` cpython `_ இல் கையொப்பமிடப் பயன்படுகிறது." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:168 msgid "" @@ -7516,6 +10991,12 @@ msgid "" "further customised. See the `gh release documentation `_ as a reference." msgstr "" +"முதலாவதாக, விநியோக தொகுப்புகளில் கையெழுத்திட இது `சிக்ச்டோர்/சிஎச்-ஆக்சன்-சிக்ச்டோர்-" +"பைதான் அறிவிலிமையம் அதிரடி`_ ஐப் பயன்படுத்துகிறது. அடுத்த கட்டத்தில், தற்போதைய " +"குறிச்சொல்லிலிருந்து வெற்று அறிவிலிமையம் வெளியீடு `` gh`` Cli ஐப் பயன்படுத்தி " +"உருவாக்கப்படுகிறது. இந்த படி மேலும் தனிப்பயனாக்கப்படலாம் என்பதை நினைவில் கொள்க. `சிஎச் " +"வெளியீட்டு ஆவணங்கள் _ _ ஒரு குறிப்பாகப் " +"பார்க்கவும்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:176 msgid "" @@ -7527,10 +11008,17 @@ msgid "" "instructions. Specifically, the token needs the ``contents: write`` " "permission." msgstr "" +"அறிவிலிமையம் வெளியீட்டை உருவாக்க உங்கள் `` github_token`` அனுமதிகளை நிர்வகிக்க " +"வேண்டியிருக்கலாம். `கிட்அப் ஆவணங்கள் `_ அறிவுறுத்தல்களுக்கு. குறிப்பாக, டோக்கனுக்கு `` " +"உள்ளடக்கங்கள்: எழுது `அனுமதி தேவை." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:182 msgid "Finally, the signed distributions are uploaded to the GitHub Release." msgstr "" +"இறுதியாக, கையொப்பமிடப்பட்ட விநியோகங்கள் அறிவிலிமையம் வெளியீட்டில் பதிவேற்றப்படுகின்றன." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:192 msgid "" @@ -7538,16 +11026,21 @@ msgid "" "`removed from PyPI `_. " "However, this job is not mandatory for uploading to PyPI and can be omitted." msgstr "" +"இது சிபிசி கையொப்பங்களுக்கு மாற்றாக உள்ளது, இதற்காக பைபி `_ இலிருந்து உதவி அகற்றப்பட்டுள்ளது. இருப்பினும், " +"இந்த வேலை PYPI இல் பதிவேற்றுவதற்கு கட்டாயமில்லை, மேலும் தவிர்க்கப்படலாம்." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:198 msgid "Separate workflow for publishing to TestPyPI" -msgstr "" +msgstr "டெச்ட்பிபிக்கு வெளியிடுவதற்கு பணிப்பாய்வு தனி" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:200 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:210 msgid "" @@ -7555,19 +11048,24 @@ msgid "" "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:214 msgid "The whole CI/CD workflow" -msgstr "" +msgstr "முழு சிஐ/சிடி பணிப்பாய்வு" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:216 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:224 msgid "That's all, folks!" -msgstr "" +msgstr "அவ்வளவுதான், எல்லோரும்!" #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:226 msgid "" @@ -7576,6 +11074,10 @@ msgid "" "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:234 msgid "" @@ -7585,45 +11087,52 @@ msgid "" "increased, but a better solution may constitute to use a PyPI-compatible " "server like :ref:`pypiserver` in the CI for testing purposes." msgstr "" +"உங்கள் களஞ்சியத்தில் அடிக்கடி செயல்படும் செயல்பாடு இருந்தால், ஒவ்வொரு உந்துதலும் " +"விவரிக்கப்பட்டுள்ளபடி டெச்ட்பைட்டில் பதிவேற்றப்பட்டால், திட்டம் `PYPI திட்ட அளவு வரம்பை " +"` _. வரம்பை அதிகரிக்க முடியும், ஆனால் " +"ஒரு சிறந்த தீர்வு ஒரு பைபி-இணக்கமான சேவையகத்தைப் பயன்படுத்தலாம்: குறிப்பு நோக்கங்களுக்காக " +"தொஒ இல் `பைபிசெவர்`." #: ../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:242 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 "" +msgstr "கட்டிடம் மற்றும் வெளியீடு" #: ../source/guides/section-hosting.rst:3 msgid "Hosting" -msgstr "" +msgstr "ஓச்டிங்" #: ../source/guides/section-install.rst:3 msgid "Installation" -msgstr "" +msgstr "நிறுவல்" #: ../source/guides/single-sourcing-package-version.rst:-1 msgid "0; url=../../discussions/single-source-version/" -msgstr "" +msgstr "0; முகவரி = ../../விவாதங்கள்/ஒற்றை-மூல பதிப்பு/" #: ../source/guides/single-sourcing-package-version.rst:6 msgid "Redirecting stale single-source package version link..." -msgstr "" +msgstr "பழமையான ஒற்றை மூல தொகுப்பு பதிப்பு இணைப்பை திருப்பிவிடுதல் ..." #: ../source/guides/single-sourcing-package-version.rst:8 msgid "" "If the page doesn't automatically refresh, see :ref:`single-source-version`." -msgstr "" +msgstr "பக்கம் தானாகவே புதுப்பிக்கவில்லை என்றால், காண்க: குறிப்பு: `ஒற்றை-மூல-பதிப்பு`." #: ../source/guides/supporting-multiple-python-versions.rst:7 msgid "Supporting multiple Python versions" -msgstr "" +msgstr "பல பைதான் பதிப்புகளை ஆதரிக்கிறது" #: ../source/guides/supporting-multiple-python-versions.rst:10 msgid "2014-12-24" -msgstr "" +msgstr "2014-12-24" #: ../source/guides/supporting-multiple-python-versions.rst:36 msgid "" @@ -7633,6 +11142,11 @@ msgid "" "standard library packages, and the changes between Python versions 2.x and 3." "x include changes in the language syntax." msgstr "" +"பைதான் தொகுப்பை உருவாக்க தேவையான வேலைக்கு கூடுதலாக, பைத்தானின் வெவ்வேறு பதிப்புகளில் " +"தொகுப்பு கிடைக்க வேண்டும் என்பது பெரும்பாலும் தேவை. வெவ்வேறு பைதான் பதிப்புகளில் " +"வெவ்வேறு (அல்லது மறுபெயரிடப்பட்ட) நிலையான நூலக தொகுப்புகள் இருக்கலாம், மேலும் பைதான் " +"பதிப்புகள் 2.x மற்றும் 3.x க்கு இடையிலான மாற்றங்கள் மொழி தொடரியல் மாற்றங்களை " +"உள்ளடக்குகின்றன." #: ../source/guides/supporting-multiple-python-versions.rst:42 msgid "" @@ -7641,10 +11155,14 @@ msgid "" "time-consuming. Fortunately, several tools are available for dealing with " "this, and these will briefly be discussed here." msgstr "" +"கைமுறையாக நிகழ்த்தப்பட்டது, அனைத்து இலக்கு பைதான் பதிப்புகளிலும் (மற்றும் OSS!) தொகுப்பு " +"சரியாக செயல்படுவதை உறுதிசெய்ய தேவையான அனைத்து சோதனைகளும் மிகவும் நேரத்தை " +"எடுத்துக்கொள்ளக்கூடும். அதிர்ச்டவசமாக, இதைக் கையாள்வதற்கு பல கருவிகள் கிடைக்கின்றன, இவை " +"சுருக்கமாக இங்கே விவாதிக்கப்படும்." #: ../source/guides/supporting-multiple-python-versions.rst:48 msgid "Automated testing and continuous integration" -msgstr "" +msgstr "தானியங்கு சோதனை மற்றும் தொடர்ச்சியான ஒருங்கிணைப்பு" #: ../source/guides/supporting-multiple-python-versions.rst:50 msgid "" @@ -7653,6 +11171,8 @@ msgid "" "github.com>`_ 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 "" @@ -7660,6 +11180,9 @@ msgid "" "*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 "" @@ -7668,6 +11191,10 @@ msgid "" "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 "" @@ -7675,12 +11202,17 @@ msgid "" "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 "" +"`டிராவிச் சி ` _ லினக்ச் மற்றும் மேகோச் சூழல் இரண்டையும் " +"வழங்குகிறது. லினக்ச் சூழல் உபுண்டு 12.04 எல்.டி.எச் சர்வர் பதிப்பு 64 பிட் ஆகும், அதே " +"நேரத்தில் மேகோச் 10.9.2 ஆகும்." #: ../source/guides/supporting-multiple-python-versions.rst:68 msgid "" "`Appveyor `_ provides a Windows environment " "(Windows Server 2012)." msgstr "" +"`Appveyor ` _ சாளரங்கள் சூழலை வழங்குகிறது (விண்டோச் " +"சர்வர் 2012)." #: ../source/guides/supporting-multiple-python-versions.rst:79 msgid "" @@ -7688,16 +11220,22 @@ msgid "" "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 "" +"ஒற்றை மூல மூலோபாயத்துடன் பைதான் 2 மற்றும் 3 இரண்டிலும் பயன்படுத்தப்பட வேண்டிய பைதான் " +"திட்டங்களுக்கு, பல விருப்பங்கள் உள்ளன." #: ../source/guides/supporting-multiple-python-versions.rst:88 msgid "Tools for single-source Python packages" -msgstr "" +msgstr "ஒற்றை மூல பைதான் தொகுப்புகளுக்கான கருவிகள்" #: ../source/guides/supporting-multiple-python-versions.rst:90 msgid "" @@ -7710,6 +11248,13 @@ msgid "" "Armin Ronacher, can be used to automatically apply the code modifications " "provided by six_." msgstr "" +"`ஆறு ` _ என்பது பைதான் 2 மற்றும் பைதான் 3 க்கு " +"இடையிலான வேறுபாடுகளை மடக்குவதற்காக பெஞ்சமின் பீட்டர்சன் உருவாக்கிய ஒரு கருவியாகும். " +"சிக்ச்_ தொகுப்பு பரவலான பயன்பாட்டை அனுபவித்துள்ளது மற்றும் ஒரு பைதான் 2 மற்றும் 3 " +"இரண்டிலும் பயன்படுத்தக்கூடிய ஒற்றை மூல பைதான் தொகுதியை எழுத நம்பகமான வழி. சிக்ச்_ " +"தொகுதி பயன்படுத்தப்படலாம் பைதான் 2.5 வரை. `நவீனமயமாக்கல் ` _, அர்மின் ரோனாச்சரால் உருவாக்கப்பட்டது, ஆறு_ வழங்கிய குறியீடு மாற்றங்களை " +"தானாகவே பயன்படுத்த பயன்படுத்தலாம்." #: ../source/guides/supporting-multiple-python-versions.rst:99 msgid "" @@ -7719,14 +11264,19 @@ msgid "" "interoperability between Python 2 and Python 3 with a language syntax that " "matches one of the two Python versions: one may use" msgstr "" +"சிக்ச்_, `பைதான்-ஃபியூச்சர் ` _ என்பது " +"பைதான் 2 மற்றும் பைதான் 3 மூலக் குறியீட்டிற்கு இடையில் பொருந்தக்கூடிய அடுக்கை வழங்கும் ஒரு " +"தொகுப்பு; இருப்பினும், சிக்ச்_ போலல்லாமல், இந்த தொகுப்பு பைதான் 2 மற்றும் பைதான் 3 க்கு " +"இடையில் இரண்டு பைதான் பதிப்புகளில் ஒன்றோடு பொருந்தக்கூடிய மொழி தொடரியல் மூலம் " +"இயங்குதளத்தை வழங்குவதை நோக்கமாகக் கொண்டுள்ளது: ஒருவர் பயன்படுத்தலாம்" #: ../source/guides/supporting-multiple-python-versions.rst:106 msgid "a Python 2 (by syntax) module in a Python 3 project." -msgstr "" +msgstr "பைதான் 3 திட்டத்தில் ஒரு பைதான் 2 (தொடரியல் மூலம்) தொகுதி." #: ../source/guides/supporting-multiple-python-versions.rst:107 msgid "a Python 3 (by syntax) module in a *Python 2* project." -msgstr "" +msgstr "* பைதான் 2 * திட்டத்தில் ஒரு பைதான் 3 (தொடரியல் மூலம்) தொகுதி." #: ../source/guides/supporting-multiple-python-versions.rst:109 msgid "" @@ -7737,6 +11287,12 @@ msgid "" "``futurize`` and ``pasteurize`` that can be applied to either a Python 2 " "module or a Python 3 module respectively." msgstr "" +"இரு திசை காரணமாக, பைதான் 2 தொகுப்பை பைதான் 3 தொடரியல் தொகுதி-மூலம்-தொகுதிக்கு " +"மாற்றுவதற்கான பாதையை பைதான்-ஃபியூட்ர்_ வழங்குகிறது. இருப்பினும், சிக்ச்_ க்கு மாறாக, " +"பைதான்-ஃபியூச்சர்_ பைதான் 2.6 இலிருந்து மட்டுமே ஆதரிக்கப்படுகிறது. சிக்ச்_ க்கு " +"நவீனமயமாக்கல்_ ஐப் போலவே, பைதான்-ஃபியூட்யூர்_ இரண்டு ச்கிரிப்டுகளுடன் `` எதிர்காலம்`` " +"மற்றும் `` பேசூரைச்`` என அழைக்கப்படுகிறது, இது முறையே பைதான் 2 தொகுதி அல்லது பைதான் " +"3 தொகுதிக்கு பயன்படுத்தப்படலாம்." #: ../source/guides/supporting-multiple-python-versions.rst:116 msgid "" @@ -7746,10 +11302,15 @@ msgid "" "provides for forward-compatibility to Python 3. Any remaining compatibility " "problems would require manual changes." msgstr "" +"சிக்ச்_ அல்லது பைதான்-ஃபுட்யூர்_ இன் பயன்பாடு உங்கள் தொகுப்புக்கு கூடுதல் இயக்க நேர " +"சார்புநிலையைச் சேர்க்கிறது: பைதான்-ஃபியூட்யூர்_ உடன், `` எதிர்காலம்` ச்கிரிப்டை ``-ச்டேச் " +"1`` விருப்பத்துடன் அழைக்கலாம், இது ஒரு பைதான் 2.6+ மாற்றங்களை மட்டுமே பயன்படுத்துகிறது " +"பைதானுக்கு முன்னோக்கி-இணக்கத்தன்மைக்கு ஏற்கனவே வழங்குகிறது. மீதமுள்ள பொருந்தக்கூடிய " +"சிக்கல்களுக்கு கையேடு மாற்றங்கள் தேவைப்படும்." #: ../source/guides/supporting-multiple-python-versions.rst:123 msgid "What's in which Python?" -msgstr "" +msgstr "எந்த பைதான் என்ன?" #: ../source/guides/supporting-multiple-python-versions.rst:125 msgid "" @@ -7760,14 +11321,17 @@ msgid "" "com/blog/201803/whats_in_which_python_3436.html>`__. These lists may be used " "to check whether any changes between Python versions may affect your package." msgstr "" +"`பைதான் 2 ` " +"__, __, `பைதான் 3.0-3.3 இப்போது பைதான் பதிப்புகளுக்கு இடையில் ஏதேனும் மாற்றங்கள் உங்கள் " +"தொகுப்பைப் பாதிக்குமா என்பதைச் சரிபார்க்க இந்த பட்டியல்கள் பயன்படுத்தப்படலாம்." #: ../source/guides/supporting-windows-using-appveyor.rst:5 msgid "Supporting Windows using Appveyor" -msgstr "" +msgstr "AppWeyor ஐப் பயன்படுத்தி சாளரங்களை ஆதரித்தல்" #: ../source/guides/supporting-windows-using-appveyor.rst:8 msgid "2015-12-03" -msgstr "" +msgstr "2015-12-03" #: ../source/guides/supporting-windows-using-appveyor.rst:10 msgid "" @@ -7776,6 +11340,10 @@ msgid "" "the code on Windows, and building Windows-targeted binaries for projects " "that use C extensions." msgstr "" +"உங்கள் திட்டத்திற்கான சாளரங்கள் ஆதரவை வழங்க இலவச `AppVeyor`_ தொடர்ச்சியான ஒருங்கிணைப்பு " +"சேவையை எவ்வாறு பயன்படுத்துவது என்பதை இந்த பிரிவு உள்ளடக்கியது. சாளரங்களில் குறியீட்டைச் " +"சோதிப்பது மற்றும் சி நீட்டிப்புகளைப் பயன்படுத்தும் திட்டங்களுக்கான விண்டோச்-இலக்கு பைனரிகளை " +"உருவாக்குவது இதில் அடங்கும்." #: ../source/guides/supporting-windows-using-appveyor.rst:19 msgid "" @@ -7783,6 +11351,9 @@ msgid "" "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 "" @@ -7792,6 +11363,11 @@ msgid "" "are Windows hosts and have the necessary compilers installed to build Python " "extensions." msgstr "" +"AppVeair பணி என்பது தொடர்ச்சியான ஒருங்கிணைப்பு சேவையாகும், இது நன்கு அறியப்பட்ட " +"`டிராவிச்`_ சேவையைப் போன்றது, இது பொதுவாக` கிதுப்`_ இல் வழங்கப்பட்ட திட்டங்களால் " +"சோதனைக்கு பயன்படுத்தப்படுகிறது. இருப்பினும், டிராவிசைப் போலல்லாமல், ஆப்சியரில் உள்ள " +"தொழிலாளர்கள் சாளரங்கள் ஓச்ட்கள் மற்றும் பைதான் நீட்டிப்புகளை உருவாக்க தேவையான கம்பைலர்கள் " +"நிறுவப்பட்டுள்ளன." #: ../source/guides/supporting-windows-using-appveyor.rst:29 msgid "" @@ -7802,10 +11378,16 @@ msgid "" "for testing) it is possible for projects without a dedicated Windows " "environment to provide Windows-targeted binaries." msgstr "" +"சாளரங்கள் பயனர்களுக்கு பொதுவாக சி கம்பைலருக்கு அணுகல் இல்லை, எனவே `` பைதான் -எம் பிஐபி " +"நிறுவல் `` வழியாக வழங்கல் நிறுவக்கூடிய வகையில் பைபியில் பைனரி சக்கரங்களை " +"விநியோகிக்கும் சி நீட்டிப்புகளைப் பயன்படுத்தும் திட்டங்களை நம்பியுள்ளது. AppWeyor ஐ " +"உருவாக்க சேவையாகப் பயன்படுத்துவதன் மூலம் (அதை சோதனைக்கு பயன்படுத்தாவிட்டாலும் கூட) " +"பிரத்யேக சாளரங்கள் சூழல் இல்லாத திட்டங்களுக்கு விண்டோச்-இலக்கு கொண்ட இருமங்களை வழங்க " +"முடியும்." #: ../source/guides/supporting-windows-using-appveyor.rst:37 msgid "Setting up" -msgstr "" +msgstr "அமைத்தல்" #: ../source/guides/supporting-windows-using-appveyor.rst:39 msgid "" @@ -7814,6 +11396,10 @@ msgid "" "given in `the Appveyor documentation `__. " "The free tier of account is perfectly adequate for open source projects." msgstr "" +"உங்கள் திட்டத்திற்கான சாளரங்கள் சக்கரங்களை உருவாக்க AppWeyor ஐப் பயன்படுத்த, சேவையில் " +"உங்களிடம் ஒரு கணக்கு இருக்க வேண்டும். ஒரு கணக்கை அமைப்பதற்கான வழிமுறைகள் `AppVeior " +"ஆவணத்தில் __ __ இல் கொடுக்கப்பட்டுள்ளன. திறந்த மூல " +"திட்டங்களுக்கு கணக்கின் இலவச அடுக்கு போதுமானது." #: ../source/guides/supporting-windows-using-appveyor.rst:44 msgid "" @@ -7821,6 +11407,9 @@ msgid "" "your project is hosted on one of those two services, setting up Appveyor " "integration is straightforward." msgstr "" +"AppVeyor `github`_ மற்றும்` BitBucket`_ உடன் ஒருங்கிணைப்பை வழங்குகிறது, எனவே உங்கள் " +"திட்டம் அந்த இரண்டு சேவைகளில் ஒன்றில் புரவலன் செய்யப்படும் வரை, AppWeair ஒருங்கிணைப்பை " +"அமைப்பது நேரடியானது." #: ../source/guides/supporting-windows-using-appveyor.rst:48 msgid "" @@ -7828,10 +11417,13 @@ msgid "" "will automatically build your project each time a commit occurs. This " "behaviour will be familiar to users of Travis." msgstr "" +"உங்கள் ஆப்சேயர் கணக்கை அமைத்து, உங்கள் திட்டத்தைச் சேர்த்தவுடன், ஒவ்வொரு முறையும் ஒரு கமிட் " +"நிகழும் போது AppWeyor தானாகவே உங்கள் திட்டத்தை உருவாக்கும். இந்த நடத்தை டிராவிசின் " +"பயனர்களுக்கு தெரிந்திருக்கும்." #: ../source/guides/supporting-windows-using-appveyor.rst:53 msgid "Adding Appveyor support to your project" -msgstr "" +msgstr "உங்கள் திட்டத்தில் AppWeyor ஆதரவைச் சேர்ப்பது" #: ../source/guides/supporting-windows-using-appveyor.rst:55 msgid "" @@ -7840,6 +11432,10 @@ msgid "" "be included in the file are covered in the Appveyor documentation. This " "guide will provide the details necessary to set up wheel builds." msgstr "" +"உங்கள் திட்டத்தை Appveyor எவ்வாறு உருவாக்க வேண்டும் என்பதை வரையறுக்க, உங்கள் திட்டத்தில் " +"ஒரு: கோப்பு: `appweyear.yml` கோப்பைச் சேர்க்க வேண்டும். கோப்பில் என்ன சேர்க்கப்படலாம் " +"என்பதற்கான முழு விவரங்களும் AppWayor ஆவணத்தில் உள்ளன. இந்த வழிகாட்டி சக்கர கட்டமைப்புகளை " +"அமைக்க தேவையான விவரங்களை வழங்கும்." #: ../source/guides/supporting-windows-using-appveyor.rst:60 msgid "" @@ -7851,10 +11447,17 @@ msgid "" "version of Visual Studio used includes 64-bit compilers with no additional " "setup)." msgstr "" +"பைத்தானுக்கான நீட்டிப்புகளை உருவாக்க தேவையான அனைத்து கம்பைலர் கருவித்தொகுப்புகளையும் " +"இயல்பாகவே AppWeyor அடங்கும். 3.3 மற்றும் 3.4 இன் பைதான் 2.7, 3.5+ மற்றும் 32-பிட் " +"பதிப்புகளுக்கு, கருவிகள் பெட்டியின் வெளியே செயல்படுகின்றன. ஆனால் பைதான் 3.3 மற்றும் 3.4 " +"இன் 64-பிட் பதிப்புகளுக்கு, 64-பிட் கம்பைலர்களை எங்கு கண்டுபிடிப்பது என்பதை " +"தொலைதூரங்களுக்கு தெரியப்படுத்த ஒரு சிறிய அளவு கூடுதல் உள்ளமைவு தேவை. (3.5 முதல், " +"பயன்படுத்தப்படும் விசுவல் ச்டுடியோவின் பதிப்பில் கூடுதல் அமைப்பு இல்லாத 64-பிட் கம்பைலர்கள் " +"உள்ளன)." #: ../source/guides/supporting-windows-using-appveyor.rst:68 msgid "appveyor.yml" -msgstr "" +msgstr "appweyor.yml" #: ../source/guides/supporting-windows-using-appveyor.rst:74 msgid "" @@ -7862,12 +11465,16 @@ msgid "" "pypa/python-packaging-user-guide/master/source/guides/appveyor-sample/" "appveyor.yml>`__." 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 "" +"தி: கோப்பு: `appveyor.yml` கோப்பு உங்கள் திட்டத்தின் ரூட் கோப்பகத்தில் இருக்க வேண்டும். " +"இது `` யம்ல்` `வடிவத்தில் உள்ளது, மேலும் பல பிரிவுகளைக் கொண்டுள்ளது." #: ../source/guides/supporting-windows-using-appveyor.rst:79 msgid "" @@ -7879,6 +11486,13 @@ msgid "" "support 2.6 in this document (as Windows users still using Python 2 are " "generally able to move to Python 2.7 without too much difficulty)." msgstr "" +"உங்கள் சக்கரங்கள் உருவாக்கப்படும் பைதான் பதிப்புகளை வரையறுப்பதற்கான முக்கிய நற்பொருத்தம் `` " +"சூழல்`` பிரிவு. 32-பிட் மற்றும் 64-பிட் கட்டமைப்புகளில் பைதான் 2.6, 2.7, 3.3, 3.4 " +"மற்றும் 3.5 நிறுவப்பட்ட பைதான் 2.6, நிறுவப்பட்டுள்ளது. பைதான் 2.6 தவிர இந்த சூழல்கள் " +"அனைத்திற்கும் எடுத்துக்காட்டு கோப்பு உருவாகிறது. பைதான் 2.6 க்கு நிறுவுவது மிகவும் " +"சிக்கலானது, ஏனெனில் இது பிஐபி சேர்க்கப்படவில்லை. இந்த ஆவணத்தில் நாங்கள் 2.6 ஐ " +"ஆதரிக்கவில்லை (விண்டோச் பயனர்கள் இன்னும் பைதான் 2 ஐப் பயன்படுத்துவதால் பொதுவாக பைதான் 2.7 " +"க்கு அதிக தொல்லை இல்லாமல் செல்ல முடியும்)." #: ../source/guides/supporting-windows-using-appveyor.rst:87 msgid "" @@ -7888,18 +11502,27 @@ msgid "" "circumstances (for example, to install additional build packages such as " "``Cython``, or test tools such as ``tox``)." msgstr "" +"திட்டத்திற்குத் தேவைப்படும் கூடுதல் மென்பொருளை நிறுவ `` நிறுவல்` பிரிவு PIP ஐப் " +"பயன்படுத்துகிறது. சக்கரங்களை உருவாக்குவதற்கான ஒரே தேவை `` சக்கரம்`` திட்டமாகும், ஆனால் " +"திட்டங்கள் இந்த குறியீட்டை சில சூழ்நிலைகளில் தனிப்பயனாக்க விரும்பலாம் (எடுத்துக்காட்டாக, `` " +"சைதான்`` போன்ற கூடுதல் பில்ட் தொகுப்புகளை நிறுவ அல்லது `` போன்ற சோதனைக் கருவிகளை " +"நிறுவவும் விரும்பலாம் நச்சு``)." #: ../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 "" @@ -7912,6 +11535,14 @@ msgid "" "you are using ``tox`` there are some additional configuration changes you " "will need to consider, which are described below." msgstr "" +"உங்கள் திட்டத்தின் சோதனைகளை இயக்கும் இடம் `` டெச்ட்_ச்கிரிப்ட்`` பிரிவு. வழங்கப்பட்ட கோப்பு " +"`` setup.py test`` ஐப் பயன்படுத்தி உங்கள் சோதனை தொகுப்பை இயக்குகிறது. நீங்கள் சக்கரங்களை " +"உருவாக்குவதில் மட்டுமே ஆர்வமாக இருந்தால், சாளரங்களில் உங்கள் சோதனைகளை இயக்குவதில் அல்ல, " +"இந்த பகுதியை `` எதிரொலி தவிர்க்கப்பட்ட சோதனைகள்` போன்ற போலி கட்டளையுடன் மாற்றலாம். `` " +"மூக்கு`` அல்லது: கோப்பு: `py.test` போன்ற மற்றொரு சோதனை கருவியைப் பயன்படுத்த " +"விரும்பலாம். அல்லது `` டாக்ச்`` போன்ற சோதனை இயக்கியைப் பயன்படுத்த விரும்பலாம் - " +"இருப்பினும் நீங்கள் `` டோக்ச்`` ஐப் பயன்படுத்துகிறீர்கள் என்றால், நீங்கள் கருத்தில் கொள்ள வேண்டிய " +"சில கூடுதல் உள்ளமைவு மாற்றங்கள் உள்ளன, அவை கீழே விவரிக்கப்பட்டுள்ளன." #: ../source/guides/supporting-windows-using-appveyor.rst:108 msgid "" @@ -7920,16 +11551,23 @@ msgid "" "(specifically, ``setuptools``) then the ``setup.py bdist_wheel`` command " "will build your wheels." msgstr "" +"உங்கள் சோதனைகள் முடிந்ததும் `` after_test`` இயங்கும், அவ்வாறே சக்கரங்கள் கட்டப்பட வேண்டும். " +"உங்கள் திட்டம் பரிந்துரைக்கப்பட்ட கருவிகளைப் பயன்படுத்துகிறது (குறிப்பாக, `` " +"setuptools``) பின்னர் `` setup.py.py bdist_wheel`` கட்டளை உங்கள் சக்கரங்களை " +"உருவாக்கும்." #: ../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 "" +msgstr "ச்கிரிப்ட் உதவி" #: ../source/guides/supporting-windows-using-appveyor.rst:120 msgid "" @@ -7938,6 +11576,10 @@ msgid "" "and 3.4. For projects which do not need a compiler, or which don't support " "3.3 or 3.4 on 64-bit Windows, only the :file:`appveyor.yml` file is needed." msgstr "" +"தி: கோப்பு: `appveyor.yml` கோப்பு ஒரு உதவி ச்கிரிப்டை நம்பியுள்ளது, இது பைதான் 3.3 " +"மற்றும் 3.4 இல் 64-பிட் கட்டமைப்புகளுக்கு SDK கம்பைலரைப் பயன்படுத்த சூழலை அமைக்கிறது. " +"ஒரு கம்பைலர் தேவையில்லை, அல்லது 64-பிட் சாளரங்களில் 3.3 அல்லது 3.4 ஐ ஆதரிக்காத " +"திட்டங்களுக்கு, மட்டுமே: கோப்பு: `appveyor.yml` கோப்பு தேவை." #: ../source/guides/supporting-windows-using-appveyor.rst:125 msgid "" @@ -7950,16 +11592,22 @@ msgid "" "Python 3.3 or 3.4, so don't set the environment variable for any other " "builds." msgstr "" +". தேர்ந்தெடுக்கப்பட்ட பைதான் பதிப்பிற்கு பொருத்தமான தொகுப்பாளருடன் சூழலில் கட்டளையிடவும். " +"நீங்கள் செய்ய வேண்டியதெல்லாம், ஒற்றை சூழல் மாறியை `` Distutils_use_sdk`` `` 1`` " +"மதிப்புக்கு அமைப்பதோடு, மீதமுள்ள ச்கிரிப்ட் செய்கிறது. இது பைதான் 3.3 அல்லது 3.4 இன் 64-" +"பிட் கட்டங்களுக்கு தேவையான SDK ஐ அமைக்கிறது, எனவே வேறு எந்த கட்டமைப்பிற்கும் சூழல் " +"மாறியை அமைக்க வேண்டாம்." #: ../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 "" +msgstr "கட்டப்பட்ட சக்கரங்களுக்கான அணுகல்" #: ../source/guides/supporting-windows-using-appveyor.rst:138 msgid "" @@ -7971,10 +11619,16 @@ msgid "" "architecture. You can download those wheels and upload them to PyPI as part " "of your release process." msgstr "" +"உங்கள் உருவாக்கம் முடிந்ததும், உங்கள் திட்டத்திற்கான AppWayer கட்டுப்பாட்டு குழுவிலிருந்து " +"கட்டப்பட்ட சக்கரங்கள் கிடைக்கும். ஒவ்வொரு கட்டமைப்பிற்கும் உருவாக்க நிலை பக்கத்திற்குச் செல்வதன் " +"மூலம் அவற்றைக் காணலாம். உருவாக்க வெளியீட்டின் உச்சியில் தொடர்ச்சியான இணைப்புகள் உள்ளன, " +"அவற்றில் ஒன்று \"கலைப்பொருட்கள்\". அந்த பக்கத்தில் அந்த பைதான் பதிப்பு / கட்டிடக்கலைக்கான " +"சக்கரங்களுக்கான இணைப்புகளின் பட்டியல் இருக்கும். உங்கள் வெளியீட்டு செயல்முறையின் ஒரு " +"பகுதியாக அந்த சக்கரங்களை பதிவிறக்கம் செய்து அவற்றை PYPI இல் பதிவேற்றலாம்." #: ../source/guides/supporting-windows-using-appveyor.rst:149 msgid "Testing with tox" -msgstr "" +msgstr "டாக்சுடன் சோதனை" #: ../source/guides/supporting-windows-using-appveyor.rst:151 msgid "" @@ -7982,6 +11636,9 @@ msgid "" "ensures that tests are run in an isolated environment using the exact files " "that will be distributed by the project." msgstr "" +"பல திட்டங்கள்: DOC: `TOX ` அவர்களின் சோதனைகளை இயக்க கருவி " +"பயன்படுத்துகின்றன. திட்டத்தால் விநியோகிக்கப்படும் சரியான கோப்புகளைப் பயன்படுத்தி " +"தனிமைப்படுத்தப்பட்ட சூழலில் சோதனைகள் இயக்கப்படுவதை இது உறுதி செய்கிறது." #: ../source/guides/supporting-windows-using-appveyor.rst:155 msgid "" @@ -7989,6 +11646,9 @@ msgid "" "considerations (in actual fact, these issues are not specific to Appveyor, " "and may well affect other CI systems)." msgstr "" +"AppWeyor இல் `` டோக்ச்`` ஐப் பயன்படுத்துவதற்கு இரண்டு கூடுதல் பரிசீலனைகள் உள்ளன " +"(உண்மையில், இந்த சிக்கல்கள் AppWeyor க்கு குறிப்பிட்டவை அல்ல, மேலும் பிற தொஒ அமைப்புகளை " +"பாதிக்கலாம்)." #: ../source/guides/supporting-windows-using-appveyor.rst:159 msgid "" @@ -7997,6 +11657,10 @@ msgid "" "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 "" @@ -8005,22 +11669,26 @@ msgid "" "list the additional environment variables to be passed to the subprocess. " "For the SDK compilers, you need" msgstr "" +"தேவையான சுற்றுச்சூழல் மாறிகளை துணை செயலாக்கத்திற்கு அனுப்ப `` டோக்ச்`` கட்டாயப்படுத்த, " +"துணை செயலாக்கத்திற்கு அனுப்பப்பட வேண்டிய கூடுதல் சுற்றுச்சூழல் மாறிகள் பட்டியலிட `` " +"டோக்ச்` உள்ளமைவு விருப்பத்தை `` பயணிகள்`` அமைக்க வேண்டும். SDK கம்பைலர்களுக்கு, உங்களுக்கு " +"தேவை" #: ../source/guides/supporting-windows-using-appveyor.rst:169 msgid "``DISTUTILS_USE_SDK``" -msgstr "" +msgstr "`` Distutils_use_sdk``" #: ../source/guides/supporting-windows-using-appveyor.rst:170 msgid "``MSSdk``" -msgstr "" +msgstr "`` Mssdk``" #: ../source/guides/supporting-windows-using-appveyor.rst:171 msgid "``INCLUDE``" -msgstr "" +msgstr "`` சேர்க்கவும்``" #: ../source/guides/supporting-windows-using-appveyor.rst:172 msgid "``LIB``" -msgstr "" +msgstr "`` லிப்``" #: ../source/guides/supporting-windows-using-appveyor.rst:174 msgid "" @@ -8030,6 +11698,10 @@ msgid "" "supplied :file:`build.cmd` script does this by default whenever " "``DISTUTILS_USE_SDK`` is set." msgstr "" +"`` பயணிகள்`` விருப்பத்தை உங்கள்: கோப்பில் அமைக்கலாம்: `Tox.ini`, அல்லது உங்கள் பொதுவான " +"திட்டக் கோப்புகளில் விண்டோச்-குறிப்பிட்ட அமைப்புகளைச் சேர்ப்பதைத் தவிர்க்க விரும்பினால்,` " +"`Tox_testenv_passenv`` சுற்றுச்சூழல் மாறி. வழங்கப்பட்ட: கோப்பு: `` `` " +"`distutils_use_sdk`` அமைக்கும்போதெல்லாம் இயல்புநிலையாக இதைச் செய்கிறது." #: ../source/guides/supporting-windows-using-appveyor.rst:180 msgid "" @@ -8041,6 +11713,13 @@ msgid "" "specify which environment to use (there are default environments for most " "versions of Python)." msgstr "" +"ஊடாடும் வகையில் பயன்படுத்தும்போது, `` டோக்ச்`` பல சூழல்களுக்கு எதிராக உங்கள் சோதனைகளை " +"இயக்க உங்களை அனுமதிக்கிறது (பெரும்பாலும், இதன் பொருள் பல பைதான் பதிப்புகள்). டிராவிச் " +"அல்லது ஆப்சியர் போன்ற தொஒ சூழலில் இந்த நற்பொருத்தம் பயனுள்ளதாக இருக்காது, அங்கு அனைத்து " +"சோதனைகளும் ஒவ்வொரு உள்ளமைவுக்கும் தனிமைப்படுத்தப்பட்ட சூழல்களில் இயக்கப்படுகின்றன. இதன் " +"விளைவாக, எந்த சூழலைப் பயன்படுத்த வேண்டும் என்பதைக் குறிப்பிடுவதற்கு திட்டங்கள் பெரும்பாலும் " +"`` -e envname`` க்கு `` டோக்ச்`` க்கு வழங்குகின்றன (பைத்தானின் பெரும்பாலான " +"பதிப்புகளுக்கு இயல்புநிலை சூழல்கள் உள்ளன)." #: ../source/guides/supporting-windows-using-appveyor.rst:187 msgid "" @@ -8048,6 +11727,9 @@ msgid "" "where there are (for example) two installations of Python 3.4 (32-bit and 64-" "bit) available, but only one ``py34`` environment in ``tox``." msgstr "" +"இருப்பினும், இது APPWEYOR போன்ற சாளரங்கள் தொஒ அமைப்புடன் நன்றாக வேலை செய்யாது, அங்கு " +"பைதான் 3.4 (32-பிட் மற்றும் 64-பிட்) இரண்டு நிறுவல்கள் உள்ளன, ஆனால் ஒரு `` py34`` சூழல் " +"மட்டுமே `` டாக்ச்``." #: ../source/guides/supporting-windows-using-appveyor.rst:191 msgid "" @@ -8056,6 +11738,11 @@ msgid "" "that was used to run ``tox``. This will ensure that when Appveyor runs the " "tests, they will be run with the configured interpreter." msgstr "" +"எனவே, `` டோக்ச்`` ஐப் பயன்படுத்தி சோதனைகளை இயக்குவதற்கு, திட்டங்கள் இயல்புநிலை `` பை`` " +"சூழலை `` டோக்ச்`` இல் பயன்படுத்த வேண்டும், இது பைதான் மொழிபெயர்ப்பாளரைப் " +"பயன்படுத்துகிறது, இது `` டாக்ச்`` ஐ இயக்க பயன்படுத்தப்பட்டது. AppWeyor சோதனைகளை " +"இயக்கும்போது, அவை உள்ளமைக்கப்பட்ட மொழிபெயர்ப்பாளருடன் இயக்கப்படும் என்பதை இது உறுதி " +"செய்யும்." #: ../source/guides/supporting-windows-using-appveyor.rst:196 msgid "" @@ -8064,10 +11751,13 @@ msgid "" "their :file:`tox.ini` file. Doing so is, however, outside the scope of this " "document." msgstr "" +"`` பை`` சூழலின் கீழ் இயங்குவதை ஆதரிக்க, சிக்கலான `` டோக்ச்`` உள்ளமைவுகளைக் கொண்ட " +"திட்டங்கள் அவற்றின்: கோப்பு: `Tox.ini` கோப்பை மாற்ற வேண்டியிருக்கலாம். இருப்பினும், " +"அவ்வாறு செய்வது இந்த ஆவணத்தின் எல்லைக்கு வெளியே உள்ளது." #: ../source/guides/supporting-windows-using-appveyor.rst:202 msgid "Automatically uploading wheels" -msgstr "" +msgstr "தானாகவே சக்கரங்களை பதிவேற்றும்" #: ../source/guides/supporting-windows-using-appveyor.rst:204 msgid "" @@ -8076,6 +11766,11 @@ msgid "" "(for example) copy the built artifacts to a FTP site, or an Amazon S3 " "instance. Documentation on how to do this is included in the Appveyor guides." msgstr "" +"சக்கரங்களை தானாக பதிவேற்ற AppWeyor ஐக் கோர முடியும். ஒரு `` வரிசைப்படுத்தல்`` படி " +"கிடைக்கிறது: கோப்பு: `appveyor.yml` இது பயன்படுத்தப்படலாம் (எடுத்துக்காட்டாக) " +"கட்டமைக்கப்பட்ட கலைப்பொருட்களை ஒரு FTP தளத்திற்கு நகலெடுக்கவும் அல்லது அமேசான் S3 " +"உதாரணமாகவோ. இதை எப்படி செய்வது என்பது குறித்த ஆவணங்கள் AppWayer வழிகாட்டிகளில் " +"சேர்க்கப்பட்டுள்ளன." #: ../source/guides/supporting-windows-using-appveyor.rst:209 msgid "" @@ -8084,16 +11779,22 @@ msgid "" "clear that uploading new wheels after every commit is desirable (although " "some projects may wish to do this)." msgstr "" +"மாற்றாக, கட்டமைப்பிற்கு `` கயிறு பதிவேற்றம்` படி சேர்க்க முடியும். வழங்கப்பட்ட: கோப்பு: " +"`appveyor.yml` இதைச் செய்யாது, ஏனெனில் ஒவ்வொரு உறுதிப்பாட்டிற்கும் பிறகு புதிய " +"சக்கரங்களை பதிவேற்றுவது விரும்பத்தக்கது என்பது தெளிவாகத் தெரியவில்லை (சில திட்டங்கள் " +"இதைச் செய்ய விரும்பினாலும்)." #: ../source/guides/supporting-windows-using-appveyor.rst:215 msgid "External dependencies" -msgstr "" +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 "" +"வழங்கப்பட்ட ச்கிரிப்ட்கள் 3 வது தரப்பு வெளிப்புற நூலகங்களை நம்பாத எந்தவொரு விநியோகத்தையும் " +"வெற்றிகரமாக உருவாக்கும்." #: ../source/guides/supporting-windows-using-appveyor.rst:220 msgid "" @@ -8104,22 +11805,27 @@ msgid "" "to the compiler. However, this level of configuration is beyond the scope of " "this document." msgstr "" +"விநியோகத்திற்குத் தேவையான வெளிப்புற நூலகங்களை பதிவிறக்கம் மற்றும்/அல்லது " +"உருவாக்குவதற்கு: கோப்பு: `appveyor.yml` உள்ளமைவு (பொதுவாக\" நிறுவு \"பிரிவில்) " +"படிகளைச் சேர்க்க முடியும். தேவைப்பட்டால், இந்த நூலகங்களின் இருப்பிடத்தை கம்பைலருக்கு " +"வழங்குவதற்கு கூடுதல் உள்ளமைவைச் சேர்க்க முடியும். இருப்பினும், இந்த நிலை உள்ளமைவு இந்த " +"ஆவணத்தின் எல்லைக்கு அப்பாற்பட்டது." #: ../source/guides/supporting-windows-using-appveyor.rst:229 msgid "Support scripts" -msgstr "" +msgstr "ச்கிரிப்ட்களை ஆதரிக்கவும்" #: ../source/guides/supporting-windows-using-appveyor.rst:231 msgid "For reference, the SDK setup support script is listed here:" -msgstr "" +msgstr "குறிப்புக்கு, SDK அமைவு உதவி ச்கிரிப்ட் இங்கே பட்டியலிடப்பட்டுள்ளது:" #: ../source/guides/supporting-windows-using-appveyor.rst:233 msgid "``appveyor-sample/build.cmd``" -msgstr "" +msgstr "`` appweyor-sample/build.cmd``" #: ../source/guides/tool-recommendations.rst:5 msgid "Tool recommendations" -msgstr "" +msgstr "கருவி பரிந்துரைகள்" #: ../source/guides/tool-recommendations.rst:7 msgid "" @@ -8134,10 +11840,19 @@ msgid "" "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 "" +msgstr "மெய்நிகர் சூழல்கள்" #: ../source/guides/tool-recommendations.rst:22 msgid "" @@ -8145,10 +11860,13 @@ msgid "" "`virtualenv` (PyPA project) and :doc:`venv ` (part of " "the Python standard library, though missing some features of virtualenv)." msgstr "" +"மெய்நிகர் சூழல்களை கைமுறையாக உருவாக்குவதற்கும் பயன்படுத்துவதற்கும் நிலையான கருவிகள்: " +"ref: `மெய்நிகர்என்வ்` (பைபா திட்டம்) மற்றும்: டாக்:` வெவி <பைதான்: நூலகம்/வெவி> `(பைதான் " +"நிலையான நூலகத்தின் ஒரு பகுதி, மெய்நிகர்என்வின் சில அம்சங்களைக் காணவில்லை என்றாலும்) ." #: ../source/guides/tool-recommendations.rst:28 msgid "Installing packages" -msgstr "" +msgstr "தொகுப்புகளை நிறுவுதல்" #: ../source/guides/tool-recommendations.rst:30 msgid "" @@ -8158,6 +11876,10 @@ msgid "" "in most Python installations through the standard library package :doc:" "`ensurepip `." msgstr "" +". இதற்கான பைப்பின் பரிந்துரைகளை நீங்கள் படிக்க விரும்பலாம்: DOC: `பாதுகாப்பான நிறுவல்கள் " +"`. நிலையான நூலக தொகுப்பு மூலம் பெரும்பாலான " +"பைதான் நிறுவல்களில் பிஐபி இயல்பாகவே கிடைக்கிறது: டிஓசி: `உறுதிப்படுத்தல் <பைதான்: " +"நூலகம்/உறுதி>`." #: ../source/guides/tool-recommendations.rst:36 msgid "" @@ -8169,15 +11891,21 @@ msgid "" "wide applications making use of the same Python interpreter (especially on " "Linux)." msgstr "" +"மாற்றாக. PIPX என்பது PIP மற்றும் WVV ஐச் சுற்றியுள்ள ஒரு ரேப்பர் ஆகும், இது ஒவ்வொரு " +"பயன்பாட்டையும் ஒரு பிரத்யேக மெய்நிகர் சூழலில் நிறுவுகிறது. இது வெவ்வேறு பயன்பாடுகளின் " +"சார்புகளுக்கிடையேயான மோதல்களைத் தவிர்க்கிறது, மேலும் கணினி அளவிலான பயன்பாடுகளுடன் அதே " +"பைதான் மொழிபெயர்ப்பாளரை (குறிப்பாக லினக்சில்) பயன்படுத்துகிறது." #: ../source/guides/tool-recommendations.rst:43 msgid "" "For scientific software specifically, consider :ref:`Conda` or :ref:`Spack`." msgstr "" +"குறிப்பாக விஞ்ஞான மென்பொருளுக்கு, கவனியுங்கள்: ref: `conda` அல்லது: ref:` spack`." #: ../source/guides/tool-recommendations.rst:45 msgid "Write a \"pip vs. Conda\" comparison, here or in a new discussion." msgstr "" +"இங்கே அல்லது ஒரு புதிய விவாதத்தில் ஒரு \"பிப் வெர்சச் காண்டா\" ஒப்பீட்டை எழுதுங்கள்." #: ../source/guides/tool-recommendations.rst:47 msgid "" @@ -8187,10 +11915,13 @@ msgid "" "develop``, which are also deprecated (see :ref:`setup-py-deprecated` for " "background and :ref:`modernize-setup-py-project` for migration advice)." msgstr "" +"** அல்ல ** `` ஈசி_இன்ச்டால்`` ஐப் பயன்படுத்தவும் (இதன் பகுதி: குறிப்பு: `செடிப்டூல்ச்`), " +"இது பிஐக்கு ஆதரவாக நீக்கப்பட்டது (விவரங்களுக்கு பார்க்க: குறிப்பு:` பிப் vs ஈசி_இன்ச்டால்` " +"விவரங்களுக்கு). அதேபோல், ** செய்ய வேண்டாம் ** `` பைதான் அமைவு. ." #: ../source/guides/tool-recommendations.rst:55 msgid "Lock files" -msgstr "" +msgstr "கோப்புகளைப் பூட்டவும்" #: ../source/guides/tool-recommendations.rst:57 msgid "" @@ -8198,10 +11929,13 @@ msgid "" "files, which contain the exact versions of all packages installed into an " "environment, for reproducibility purposes." msgstr "" +":ref:`pip-tools` and :ref:`Pipenv` அரே two recognized கருவிகள் பெறுநர் create " +"lock files, which contain the exact versions of அனைத்தும் தொகுப்பு installed " +"into an environment, க்கு reproducibility purposes." #: ../source/guides/tool-recommendations.rst:63 msgid "Build backends" -msgstr "" +msgstr "பின்தளத்தில் உருவாக்குங்கள்" #: ../source/guides/tool-recommendations.rst:67 msgid "" @@ -8209,12 +11943,17 @@ msgid "" "particular tool, only to enumerate common tools. Different use cases often " "need specialized workflows." msgstr "" +"தயவுசெய்து, நினைவில் கொள்ளுங்கள்: இந்த ஆவணம் வாசகரை ஒரு குறிப்பிட்ட கருவியை நோக்கி " +"நகர்த்த முற்படுவதில்லை, பொதுவான கருவிகளைக் கணக்கிட மட்டுமே. வெவ்வேறு பயன்பாட்டு " +"வழக்குகளுக்கு பெரும்பாலும் சிறப்பு பணிப்பாய்வு தேவைப்படுகிறது." #: ../source/guides/tool-recommendations.rst:71 msgid "" "Popular :term:`build backends ` for pure-Python packages " "include, in alphabetical order:" msgstr "" +"பிரபலமானது: கால: `பின்தளத்தில் உருவாக்குங்கள் <பின்தளத்தில் உருவாக்கு>` தூய-பைதான் " +"தொகுப்புகளுக்கு அகர வரிசைப்படி அடங்கும்:" #: ../source/guides/tool-recommendations.rst:74 msgid "" @@ -8222,24 +11961,32 @@ msgid "" "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 "" +"அட்ச்லிங்_ - உருவாக்கப்பட்டது ஆனால் தனித்தனியாக: ref: `அட்ச்`. செருகுநிரல்களை " +"ஆதரிக்கிறது." #: ../source/guides/tool-recommendations.rst:79 msgid "" "PDM-backend_ -- developed with but separate from :ref:`PDM`. Supports " "plugins." msgstr "" +"PDM-Backend_-உருவாக்கப்பட்டது ஆனால் தனித்தனியாக: ref: `PDM`. செருகுநிரல்களை " +"ஆதரிக்கிறது." #: ../source/guides/tool-recommendations.rst:81 msgid "" "Poetry-core_ -- developed with but separate from :ref:`Poetry`. Supports " "plugins." msgstr "" +"கவிதை-கோர்_-உருவாக்கப்பட்டது ஆனால் தனித்தனியாக: ref: `கவிதை`. செருகுநிரல்களை " +"ஆதரிக்கிறது." #: ../source/guides/tool-recommendations.rst:84 msgid "" @@ -8247,11 +11994,14 @@ msgid "" "standard :ref:`[project] table ` (it uses a " "different format, in the ``[tool.poetry]`` table)." msgstr "" +"இந்த பட்டியலில் உள்ள மற்ற பின்தளத்தில் போலல்லாமல், கவிதை-கோர் தரத்தை ஆதரிக்காது: ref: " +"`[திட்டம்] அட்டவணை <எழுதுதல்-பைபிரோசெக்ட்-டாம்>` (இது `` [கருவி.பொயெட்ரி] `` அட்டவணை " +"ஆகியவற்றில் வேறு வடிவத்தைப் பயன்படுத்துகிறது )." #: ../source/guides/tool-recommendations.rst:88 msgid "" ":ref:`setuptools`, which used to be the only build backend. Supports plugins." -msgstr "" +msgstr ". செருகுநிரல்களை ஆதரிக்கிறது." #: ../source/guides/tool-recommendations.rst:92 msgid "" @@ -8259,6 +12009,9 @@ msgid "" "standardisation efforts are now deprecated and only *temporarily kept* for " "compatibility." msgstr "" +"நீங்கள் செட்ப்டூல்களைப் பயன்படுத்தினால், தரப்படுத்தல் முயற்சிகளுக்கு முன்னறிவிக்கும் சில " +"நற்பொருத்தங்கள் இப்போது நீக்கப்பட்டுள்ளன, மேலும் * தற்காலிகமாக * மட்டுமே பொருந்தக்கூடிய " +"தன்மைக்காக வைக்கப்பட்டுள்ளன என்பதை நினைவில் கொள்க." #: ../source/guides/tool-recommendations.rst:96 msgid "" @@ -8269,6 +12022,12 @@ msgid "" "`setup.cfg`) whenever possible and keep :file:`setup.py` only if " "programmatic configuration is needed. See :ref:`setup-py-deprecated`." msgstr "" +"குறிப்பாக, ** செய்ய வேண்டாம் ** நேரடி `` பைதான் setup.py`` அழைப்புகளை பயன்படுத்தவும். " +"மறுபுறம், செடிப்டூல்களை ஒரு: கோப்பு: `setup.py` கோப்பு இன்னும் முழுமையாக " +"ஆதரிக்கப்படுகிறது, இருப்பினும் நவீனத்தைப் பயன்படுத்த பரிந்துரைக்கப்படுகிறது: குறிப்பு:` " +"[திட்டம்] பைபிரொசெக்ட். `(அல்லது: கோப்பு:` setup.cfg`) முடிந்த போதெல்லாம் மற்றும் " +"வைத்திருங்கள்: கோப்பு: `setup.py` நிரல் உள்ளமைவு தேவைப்பட்டால் மட்டுமே. காண்க: ref: " +"`setup-py- deprecated`." #: ../source/guides/tool-recommendations.rst:103 msgid "" @@ -8277,6 +12036,11 @@ msgid "" "table ` in :file:`pyproject.toml` " "instead), and the ``easy_install`` command (cf. :ref:`pip vs easy_install`)." msgstr "" +"நீங்கள் நீக்கப்பட்ட அம்சங்களின் பிற எடுத்துக்காட்டுகள் ** அல்ல ** பயன்பாடு `` " +"setup_requires`` வாதத்தை `` அமைவு () `` (பயன்படுத்தவும்: ref: `[பில்ட்-சிச்டம்] " +"அட்டவணை `இல்: கோப்பு:` pyproject.toml` " +"அதற்கு பதிலாக), மற்றும் `` Ease_install`` கட்டளை (cf. : Ref: `PIP vs " +"Ease_install`)." #: ../source/guides/tool-recommendations.rst:108 msgid "" @@ -8284,6 +12048,9 @@ msgid "" "from the standard library in Python 3.12, although it still remains " "available from setuptools." msgstr "" +"செய்யுங்கள் ** அல்ல ** பயன்பாடு: குறிப்பு: `டிச்டிடில்ச்`, இது நீக்கப்பட்டது, மேலும் " +"பைத்தான் 3.12 இல் உள்ள நிலையான நூலகத்திலிருந்து அகற்றப்பட்டது, இருப்பினும் இது இன்னும் " +"செட்டுப்டூல்களிலிருந்து கிடைக்கிறது." #: ../source/guides/tool-recommendations.rst:112 msgid "" @@ -8291,32 +12058,41 @@ msgid "" "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 "" +":ref:`setuptools` -- natively supports C and C++ (with third-party " +"செருகுநிரல்கள் க்கு Go and Rust)," #: ../source/guides/tool-recommendations.rst:117 msgid "" ":ref:`meson-python` -- C, C++, Fortran, Rust, and other languages supported " "by Meson," msgstr "" +":ref:`meson-python` -- C, C++, Fortran, Rust, and மற்றொன்று மொழிகள் supported " +"by Meson," #: ../source/guides/tool-recommendations.rst:118 msgid "" ":ref:`scikit-build-core` -- C, C++, Fortran, and other languages supported " "by CMake," msgstr "" +":ref:`scikit-build-core` -- C, C++, Fortran, and மற்றொன்று மொழிகள் supported by " +"CMake," #: ../source/guides/tool-recommendations.rst:119 msgid ":ref:`maturin` -- Rust, via Cargo." -msgstr "" +msgstr ": ref: `` Maturin` - ரச்ட், சரக்கு வழியாக." #: ../source/guides/tool-recommendations.rst:123 msgid "Building distributions" -msgstr "" +msgstr "கட்டிட வழங்கல்" #: ../source/guides/tool-recommendations.rst:125 msgid "" @@ -8325,6 +12101,10 @@ msgid "" "`build`. It will invoke whichever build backend you :ref:`declared " "` in :file:`pyproject.toml`." msgstr "" +"உருவாக்குவதற்கான நிலையான கருவி: கால: `மூல வழங்கல் <மூல வழங்கல் (அல்லது\" SDIST " +"\")>` மற்றும்: கால: `சக்கரங்கள் ` PYPI இல் பதிவேற்றுவதற்கு: ref: `build`. " +"இது உங்களை பின்தளத்தில் கட்டியெழுப்புவதைத் தூண்டும்: குறிப்பு: `அறிவிக்கப்பட்ட ` இல்: கோப்பு: `pyproject.toml`." #: ../source/guides/tool-recommendations.rst:130 msgid "" @@ -8332,6 +12112,8 @@ msgid "" "for this task. All direct invocations of :file:`setup.py` are :ref:" "`deprecated `." msgstr "" +"** செய்ய வேண்டாம் ** இந்த பணிக்கு `` பைதான் அமைவு. அனைத்து நேரடி அழைப்புகளும்: கோப்பு: " +"`setup.py`: ref:` நீக்கப்பட்ட `." #: ../source/guides/tool-recommendations.rst:134 msgid "" @@ -8339,10 +12121,13 @@ msgid "" "distribute wheels for multiple platforms, use :ref:`cibuildwheel` as part of " "your CI setup to build distributable wheels." msgstr "" +"உங்களிடம் இருந்தால்: சொல்: `நீட்டிப்பு தொகுதிகள் <நீட்டிப்பு தொகுதி>` மற்றும் பல " +"தளங்களுக்கான சக்கரங்களை விநியோகிக்க விரும்பினால், பயன்படுத்தவும்: ref: `cibuildwheel` " +"உங்கள் தொஒ அமைப்பின் ஒரு பகுதியாக விநியோகிக்கக்கூடிய சக்கரங்களை உருவாக்க." #: ../source/guides/tool-recommendations.rst:140 msgid "Uploading to PyPI" -msgstr "" +msgstr "PYPI இல் பதிவேற்றுகிறது" #: ../source/guides/tool-recommendations.rst:142 msgid "" @@ -8351,44 +12136,52 @@ msgid "" "allows the package to be securely uploaded to PyPI from a CI/CD workflow " "without a manually configured API token." msgstr "" +"ஆதரிக்கப்பட்ட சிஐ/சிடி இயங்குதளங்கள் வழியாக புரவலன் செய்யப்பட்ட அல்லது வெளியிடப்பட்ட " +"திட்டங்களுக்கு, பயன்படுத்த பரிந்துரைக்கப்படுகிறது: rew: `நம்பகமான வெளியீடு <நம்பகமான-" +"வெளியீட்டு>`, இது ஒரு சிஐ/சிடி பணிப்பாய்வுகளிலிருந்து பைபிக்கு பாதுகாப்பாக பதிவேற்ற " +"அனுமதிக்கிறது கைமுறையாக கட்டமைக்கப்பட்ட பநிஇ கிள்ளாக்கு." #: ../source/guides/tool-recommendations.rst:147 msgid "" "As of November 2024, PyPI supports the following platforms as Trusted " "Publishing providers:" msgstr "" +"நவம்பர் 2024 நிலவரப்படி, நம்பகமான வெளியீட்டு வழங்குநர்களாக பின்வரும் தளங்களை PYPI " +"ஆதரிக்கிறது:" #: ../source/guides/tool-recommendations.rst:150 msgid "GitHub Actions (on ``https://github.com``)" -msgstr "" +msgstr "Github செயல்கள் (`` https: // github.com`` இல்)" #: ../source/guides/tool-recommendations.rst:151 msgid "GitLab CI/CD (on ``https://gitlab.com``)" -msgstr "" +msgstr "Gitlab ci/cd (`https: // gitlab.com` இல்)" #: ../source/guides/tool-recommendations.rst:152 msgid "ActiveState" -msgstr "" +msgstr "செயல்பாட்டு" #: ../source/guides/tool-recommendations.rst:153 msgid "Google Cloud" -msgstr "" +msgstr "கூகிள் முகில்" #: ../source/guides/tool-recommendations.rst:155 msgid "" "The other available method is to upload the package manually using :ref:" "`twine`." -msgstr "" +msgstr "கிடைக்கக்கூடிய மற்ற முறை, தொகுப்பை கைமுறையாகப் பயன்படுத்துவதே: ref: `கயிறு`." #: ../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 "" +"** ஒருபோதும் ** இந்த பணிக்கு `` பைதான் அமைவு. இருப்பதற்கு கூடுதலாக: ref: `நீக்கப்பட்ட " +"`, இது பாதுகாப்பற்றது." #: ../source/guides/tool-recommendations.rst:164 msgid "Workflow tools" -msgstr "" +msgstr "பணிப்பாய்வு கருவிகள்" #: ../source/guides/tool-recommendations.rst:166 msgid "" @@ -8400,44 +12193,53 @@ msgid "" "applications. They often call the tools mentioned above under the hood. In " "alphabetical order:" msgstr "" +"இந்த கருவிகள் ஒரு திட்டத்திற்கான மெய்நிகர் சூழல்களை தானாக நிர்வகிக்கும் சுற்றுச்சூழல் " +"மேலாளர்கள். அவை \"பணி ஓட்டப்பந்தய வீரர்களாகவும்\" செயல்படுகின்றன, சோதனைகளை இயக்குதல், " +"ஆவணங்களை தொகுத்தல், சில கோப்புகளை மீண்டும் உருவாக்குதல் போன்ற பணிகளை வரையறுக்கவும், " +"செயல்படுத்தவும் உங்களை அனுமதிக்கிறது. அவற்றில் சில விநியோகங்களை உருவாக்குவதற்கும் PYPI " +"இல் பதிவேற்றுவதற்கும் குறுக்குவழிகளை வழங்குகின்றன, மேலும் பயன்பாடுகளுக்கான சில உதவி " +"பூட்டு கோப்புகள் . அவர்கள் பெரும்பாலும் மேலே குறிப்பிட்ட கருவிகளை பேட்டை கீழ் " +"அழைக்கிறார்கள். அகர வரிசைப்படி:" #: ../source/guides/tool-recommendations.rst:174 msgid ":ref:`Flit`," -msgstr "" +msgstr ": Ref: `Flit`," #: ../source/guides/tool-recommendations.rst:175 msgid ":ref:`Hatch`," -msgstr "" +msgstr ": ref: `அட்ச்`," #: ../source/guides/tool-recommendations.rst:176 msgid ":doc:`nox `," -msgstr "" +msgstr ": DOC: `Nox `," #: ../source/guides/tool-recommendations.rst:177 msgid ":ref:`PDM`," -msgstr "" +msgstr ": Ref: `PDM`," #: ../source/guides/tool-recommendations.rst:178 msgid ":ref:`Pipenv`," -msgstr "" +msgstr ": ref: `பைபென்வ்`," #: ../source/guides/tool-recommendations.rst:179 msgid ":ref:`Poetry`," -msgstr "" +msgstr ": ref: `கவிதை`," #: ../source/guides/tool-recommendations.rst:180 msgid ":doc:`tox `." -msgstr "" +msgstr ": டாக்: `டாக்ச் <டோக்ச்: குறியீட்டு>`." #: ../source/guides/using-manifest-in.rst:5 msgid "Including files in source distributions with ``MANIFEST.in``" -msgstr "" +msgstr "`` Manifest.in`` உடன் மூல விநியோகங்களில் உள்ள கோப்புகளை உள்ளடக்கியது" #: ../source/guides/using-manifest-in.rst:7 msgid "" "The information on this page has moved to :doc:`setuptools:userguide/" "miscellaneous` in the setuptools documentation." msgstr "" +"இந்தப் பக்கத்தில் உள்ள தகவல்கள் நகர்ந்தன: DOC: `Setuptools: USerguide/Miscelliveane`` " +"செட்டுப்லூல்ச் ஆவணத்தில்." #: ../source/guides/using-testpypi.rst:7 msgid "" @@ -8446,10 +12248,14 @@ msgid "" "without worrying about affecting the real index. TestPyPI is hosted at `test." "pypi.org `_" msgstr "" +"`` TestPypi`` என்பது ஒரு தனி நிகழ்வு: கால: `பைதான் தொகுப்பு குறியீட்டு (PYPI)` இது " +"உண்மையான குறியீட்டை பாதிப்பதைப் பற்றி கவலைப்படாமல் விநியோக கருவிகளை முயற்சிக்கவும் " +"செயல்முறையாகவும் உங்களை அனுமதிக்கிறது. TestPypi `test.pypi.org _ _ இல் புரவலன் செய்யப்படுகிறது" #: ../source/guides/using-testpypi.rst:13 msgid "Registering your account" -msgstr "" +msgstr "உங்கள் கணக்கை பதிவு செய்தல்" #: ../source/guides/using-testpypi.rst:15 msgid "" @@ -8457,22 +12263,29 @@ msgid "" "separate user account specifically for TestPyPI. Go to https://test.pypi.org/" "account/register/ to register your account." msgstr "" +"டெச்ட்பிஐ லைவ் PYPI இலிருந்து ஒரு தனி தரவுத்தளத்தைக் கொண்டிருப்பதால், டெச்ட்பிஐக்கு " +"குறிப்பாக ஒரு தனி பயனர் கணக்கு தேவைப்படும். உங்கள் கணக்கை பதிவு செய்ய https://test." +"pypi.org/account/register/ க்குச் செல்லவும்." #: ../source/guides/using-testpypi.rst:19 msgid "" "The database for TestPyPI may be periodically pruned, so it is not unusual " "for user accounts to be deleted." msgstr "" +"டெச்ட்பிஐவுக்கான தரவுத்தளம் அவ்வப்போது கத்தரிக்கப்படலாம், எனவே பயனர் கணக்குகள் நீக்கப்படுவது " +"வழக்கத்திற்கு மாறானதல்ல." #: ../source/guides/using-testpypi.rst:24 msgid "Using TestPyPI with Twine" -msgstr "" +msgstr "கயிறுடன் டெச்ட்பை பயன்படுத்துதல்" #: ../source/guides/using-testpypi.rst:26 msgid "" "You can upload your distributions to TestPyPI using :ref:`twine` by " "specifying the ``--repository`` flag:" msgstr "" +"`` --Repository`` கொடியைக் குறிப்பிடுவதன் மூலம் ref: `ட்வைன்` உங்கள் விநியோகங்களை " +"டெச்ட்பைட்டில் பதிவேற்றலாம்:" #: ../source/guides/using-testpypi.rst:33 msgid "" @@ -8481,16 +12294,21 @@ msgid "" "``sampleproject`` is the name of your project that you uploaded. It may take " "a minute or two for your project to appear on the site." msgstr "" +"`` Https://test.pypi.org/project/ `` `` மாதிரி வெளியீட்டு`` " +"என்பது நீங்கள் பதிவேற்றிய உங்கள் திட்டத்தின் பெயர். உங்கள் திட்டம் தளத்தில் தோன்றுவதற்கு ஒரு " +"மணித்துளி அல்லது இரண்டு நேரம் ஆகலாம்." #: ../source/guides/using-testpypi.rst:39 msgid "Using TestPyPI with pip" -msgstr "" +msgstr "PIP உடன் டெச்ட்பைப்பைப் பயன்படுத்துதல்" #: ../source/guides/using-testpypi.rst:41 msgid "" "You can tell :ref:`pip` to download packages from TestPyPI instead of PyPI " "by specifying the ``--index-url`` flag:" msgstr "" +"நீங்கள் சொல்லலாம்: ref: `` --index-url`` கொடியைக் குறிப்பிடுவதன் மூலம் PYPI க்கு " +"பதிலாக டெச்ட்பிஐயிலிருந்து தொகுப்புகளை பதிவிறக்கம் செய்ய `பிப்`:" #: ../source/guides/using-testpypi.rst:56 msgid "" @@ -8498,20 +12316,25 @@ msgid "" "specify ``--extra-index-url`` to point to PyPI. This is useful when the " "package you're testing has dependencies:" msgstr "" +"PYPI இலிருந்து தொகுப்புகளையும் பதிவிறக்கம் செய்ய PIP ஐ அனுமதிக்க விரும்பினால், PYPI ஐ " +"சுட்டிக்காட்ட `` --extra-index-url`` ஐக் குறிப்பிடலாம். நீங்கள் சோதிக்கும் தொகுப்பில் " +"சார்புநிலைகள் இருக்கும்போது இது பயனுள்ளதாக இருக்கும்:" #: ../source/guides/using-testpypi.rst:73 msgid "Setting up TestPyPI in :file:`.pypirc`" -msgstr "" +msgstr "TestPypi ஐ அமைத்தல்: கோப்பு: `.pypirc`" #: ../source/guides/using-testpypi.rst:75 msgid "" "If you want to avoid being prompted for your username and password every " "time, you can configure TestPyPI in your :file:`$HOME/.pypirc`:" msgstr "" +"ஒவ்வொரு முறையும் உங்கள் பயனர்பெயர் மற்றும் கடவுச்சொல்லுக்கு கேட்கப்படுவதைத் தவிர்க்க " +"விரும்பினால், உங்கள்: கோப்பு: `$ home/.pypirc`:" #: ../source/guides/writing-pyproject-toml.rst:5 msgid "Writing your ``pyproject.toml``" -msgstr "" +msgstr "உங்கள் `` pyproject.toml`` எழுதுதல்" #: ../source/guides/writing-pyproject-toml.rst:7 msgid "" @@ -8519,6 +12342,9 @@ msgid "" "as other tools such as linters, type checkers, etc. There are three possible " "TOML tables in this file." msgstr "" +"`` pyproject.toml`` என்பது பேக்கேசிங் கருவிகளால் பயன்படுத்தப்படும் ஒரு உள்ளமைவு " +"கோப்பு, அதே போல் லிண்டர்கள், வகை செக்கர்ச் போன்ற பிற கருவிகளும் இந்த கோப்பில் மூன்று " +"சாத்தியமான டாம்ல் அட்டவணைகள் உள்ளன." #: ../source/guides/writing-pyproject-toml.rst:11 msgid "" @@ -8526,6 +12352,9 @@ msgid "" "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 "" @@ -8533,6 +12362,8 @@ msgid "" "specify your project's basic metadata, such as the dependencies, your name, " "etc." msgstr "" +"`` [திட்டம்] `` அட்டவணை என்பது உங்கள் திட்டத்தின் அடிப்படை மெட்டாடேட்டாவான சார்புநிலைகள், " +"உங்கள் பெயர் போன்றவற்றைக் குறிப்பிட பெரும்பாலான பின்தளத்தில் பயன்படுத்தும் வடிவமாகும்." #: ../source/guides/writing-pyproject-toml.rst:18 msgid "" @@ -8541,40 +12372,58 @@ msgid "" "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 "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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 "" +"ஒரு குறிப்பிடத்தக்க விதிவிலக்கு கவிதை_, இது பதிப்பு 2.0 க்கு முன் (சனவரி 5, 2025 " +"வெளியிடப்பட்டது) `` [திட்டம்] `` அட்டவணையைப் பயன்படுத்தவில்லை, இது அதற்கு பதிலாக `` " +"[கருவி.பொயெட்ரி] `` அட்டவணையைப் பயன்படுத்தியது. பதிப்பு 2.0 உடன், இது இரண்டையும் " +"ஆதரிக்கிறது. மேலும், Setuptools_ உருவாக்கு Enceded `` [திட்டம்] `` அட்டவணை, மற்றும் " +"பழைய வடிவம் `` setup.cfg`` அல்லது `` setup.py`` இரண்டையும் ஆதரிக்கிறது." -#: ../source/guides/writing-pyproject-toml.rst:37 +#: ../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 "" +"புதிய திட்டங்களுக்கு, `` [திட்டம்] `` அட்டவணையைப் பயன்படுத்தவும், சில நிரல் உள்ளமைவு " +"தேவைப்பட்டால் (சி நீட்டிப்புகளை உருவாக்குவது போன்றவை), ஆனால் `` setup.cfg`` மற்றும் ` " +"`setup.py`` வடிவங்கள் இன்னும் செல்லுபடியாகும். காண்க: ref: `setup-py- deprecated`." -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" -msgstr "" +msgstr "உருவாக்க பின்தளத்தில் அறிவித்தல்" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8583,68 +12432,91 @@ msgid "" "dependencies. You can also constrain the versions, e.g., ``requires = " "[\"setuptools >= 61.0\"]``." msgstr "" +"`` [பில்ட்-சிச்டம்] `` அட்டவணையில் ஒரு `` பில்ட்-பேக்கெண்ட்`` விசையைக் கொண்டுள்ளது, இது " +"பயன்படுத்த வேண்டிய பின்தளத்தில் குறிப்பிடுகிறது. இது ஒரு `` தேவைப்படும் `விசையும் " +"உள்ளது, இது திட்டத்தை உருவாக்கத் தேவையான சார்புகளின் பட்டியல் - இது பொதுவாக உருவாக்கும் " +"பின்தளத்தில் தொகுப்பாகும், ஆனால் அதில் கூடுதல் சார்புகளும் இருக்கலாம். பதிப்புகளையும் நீங்கள் " +"கட்டுப்படுத்தலாம், எ.கா., `` தேவை = [\"செட்டப்டூல்ச்> = 61.0\"] ``." -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" -msgstr "" +msgstr "நிலையான எதிராக மாறும் மேனிலை தரவு" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." -msgstr "" +msgstr "இந்த வழிகாட்டியின் மீதமுள்ளவை `` [திட்டம்] `` அட்டவணைக்கு அர்ப்பணிக்கப்பட்டுள்ளன." -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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 "" +"பெரும்பாலான நேரங்களில், நீங்கள் ஒரு `` [திட்டம்] `` புலத்தின் மதிப்பை நேரடியாக " +"எழுதுவீர்கள். எடுத்துக்காட்டாக: `` தேவை-பைதான் = \"> = 3.8\" ``, அல்லது `` பதிப்பு = " +"\"1.0\" ``." -#: ../source/guides/writing-pyproject-toml.rst:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" -msgstr "" +msgstr "அடிப்படை செய்தி" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" -msgstr "" +msgstr "`` பெயர்``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8652,193 +12524,289 @@ msgid "" "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:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." -msgstr "" +msgstr "உங்கள் திட்டத்தின் பதிப்பை வைக்கவும்." -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 msgid "" "Some more complicated version specifiers like ``2020.0.0a1`` (for an alpha " "release) are possible; see the :ref:`specification ` for " "full details." msgstr "" +"`` 2020.0.0A1`` (ஆல்பா வெளியீட்டிற்கு) போன்ற இன்னும் சில சிக்கலான பதிப்பு " +"குறிப்பிடப்பட்டவர்கள் சாத்தியமானவை; முழு விவரங்களுக்கு `விவரக்குறிப்பு <பதிப்பு-" +"விவரக்குறிப்புகள்>` ஐப் பார்க்கவும்." -#: ../source/guides/writing-pyproject-toml.rst:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" +"இந்த புலம் தேவைப்படுகிறது, இருப்பினும் இது பெரும்பாலும் மாறும் என்று குறிக்கப்பட்டுள்ளது" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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__`` பண்புக்கூறு அல்லது ஒரு அறிவிலி குறிச்சொல்லிலிருந்து பதிப்பை " +"நிரப்புவது போன்ற நிகழ்வுகளைப் பயன்படுத்த இது அனுமதிக்கிறது. மேலும் விவரங்களுக்கு `ஒற்றை-" +"மூல-பதிப்பு` கலந்துரையாடலை அணுகவும்." -#: ../source/guides/writing-pyproject-toml.rst:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" -msgstr "" +msgstr "சார்பு மற்றும் தேவைகள்" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" -msgstr "" +msgstr "`` சார்புகள்``/`` விருப்ப-சார்புநிலைகள்``" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" -msgstr "" +msgstr "உங்கள் திட்டத்திற்கு சார்பு இருந்தால், அவற்றை இப்படி பட்டியலிடுங்கள்:" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" +"காண்க: குறிப்பு: `சார்பு குறிப்பான்கள் <சார்பு-விவரக்குறிப்புகள்>` முழு தொடரியல் மூலம் " +"பதிப்புகளைக் கட்டுப்படுத்த நீங்கள் பயன்படுத்தலாம்." -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" -msgstr "" +msgstr "``-பைதான் தேவை`" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" +"நீங்கள் ஆதரிக்கும் பைத்தானின் குறைந்தபட்ச பதிப்பை அறிவிக்க இது உங்களை அனுமதிக்கிறது [#-" +"க்கு-பைதான்-மேல்-பிணைப்புகள் தேவை] _." -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" -msgstr "" +msgstr "இயங்கக்கூடிய ச்கிரிப்ட்களை உருவாக்குதல்" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" +"உங்கள் தொகுப்பின் ஒரு பகுதியாக ஒரு கட்டளையை நிறுவ, அதை `` [project.scripts] `` " +"அட்டவணையில் அறிவிக்கவும்." -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"be available. Executing this command will do the equivalent of ``import sys; " +"from spam import main_cli; sys.exit(main_cli())``." msgstr "" +"இந்த எடுத்துக்காட்டில், உங்கள் திட்டத்தை நிறுவிய பிறகு, ஒரு `` ச்பேம்-கிளி`` கட்டளை " +"கிடைக்கும். இந்த கட்டளையை செயல்படுத்துவது `` இறக்குமதி sys க்கு சமமானதாக இருக்கும்; " +"ச்பேம் இறக்குமதி Main_cli இலிருந்து; sys.exit (main_cli ()) ``." -#: ../source/guides/writing-pyproject-toml.rst:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 "" +"சாளரங்களில், இந்த வழியில் தொகுக்கப்பட்ட ச்கிரிப்ட்களுக்கு ஒரு முனையம் தேவை, எனவே நீங்கள் " +"அவற்றை ஒரு வரைகலை பயன்பாட்டிலிருந்து தொடங்கினால், அவை ஒரு முனையத்தை பாப் அப் செய்யும். " +"இது நிகழாமல் தடுக்க, `` [project.scripts] `` என்பதற்கு பதிலாக `` [project.gui-" +"scripts] `` அட்டவணையைப் பயன்படுத்தவும்." -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" +"`` [Project.scripts] `` மற்றும் `` [project.gui-scripts] `` ஆகியவற்றுக்கு " +"இடையேயான வேறுபாடு சாளரங்களில் மட்டுமே பொருத்தமானது." -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" -msgstr "" +msgstr "உங்கள் திட்டம் பற்றி" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" -msgstr "" +msgstr "`` ஆசிரியர்கள்`/`` பராமரிப்பாளர்கள்``" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" -msgstr "" +msgstr "`` விளக்கம்``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 msgid "" "This should be a one-line description of your project, to show as the " "\"headline\" of your project page on PyPI (`example `_), and " "other places such as lists of search results (`example `_)." msgstr "" +"இது உங்கள் திட்டத்தின் ஒரு வரி விளக்கமாக இருக்க வேண்டும், இது உங்கள் திட்ட பக்கத்தின் " +"\"தலைப்பு\" என்று பைபியில் (`எடுத்துக்காட்டு ` _), மற்றும் தேடல் " +"முடிவுகளின் பட்டியல்கள் போன்ற பிற இடங்கள் (`எடுத்துக்காட்டு < pypi-search-pip_> `_)." -#: ../source/guides/writing-pyproject-toml.rst:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" -msgstr "" +msgstr "`` ரீட்மே``" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 msgid "" "This is a longer description of your project, to display on your project " "page on PyPI. Typically, your project will have a ``README.md`` or ``README." "rst`` file and you just put its file name here." msgstr "" +"இது உங்கள் திட்டத்தின் நீண்ட விளக்கமாகும், இது உங்கள் திட்ட பக்கத்தில் PYPI இல் காண்பிக்க. " +"பொதுவாக, உங்கள் திட்டத்தில் `` readme.md`` அல்லது `` Readme.rst`` கோப்பைக் " +"கொண்டிருக்கும், மேலும் அதன் கோப்பு பெயரை இங்கே வைக்கவும்." -#: ../source/guides/writing-pyproject-toml.rst:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" -msgstr "" +msgstr "README இன் வடிவம் நீட்டிப்பிலிருந்து தானாக கண்டறியப்படுகிறது:" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," -msgstr "" +msgstr "`` Readme.md`` → `கிதுப்-சுவை கொண்ட மார்க் பேரூர் ` _," -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." -msgstr "" +msgstr "`` Readme.rst`` → `மறுசீரமைப்பு ` _ (Sphinx நீட்டிப்புகள் இல்லாமல்)." -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" -msgstr "" +msgstr "இது போன்ற வடிவமைப்பையும் நீங்கள் வெளிப்படையாகக் குறிப்பிடலாம்:" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" +msgstr "`` உரிமம்``" + +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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 "" +"இது செல்லுபடியாகும்: சொல்: `SPDX உரிம வெளிப்பாடு <உரிம வெளிப்பாடு>` ஒன்று அல்லது " +"அதற்கு மேற்பட்டவற்றைக் கொண்டது: கால: `உரிம அடையாளங்காட்டிகள் <உரிம அடையாளங்காட்டி>`. " +"முழு உரிம பட்டியல் `SPDX உரிம பட்டியல் பக்கத்தில் ` _ இல் " +"கிடைக்கிறது. ஆதரிக்கப்பட்ட பட்டியல் பதிப்பு 3.17 அல்லது பின்னர் இணக்கமான ஒன்றாகும்." -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 "" +"ஏற்கனவே உள்ள SPDX அடையாளங்காட்டி இல்லாத உரிமத்துடன் உங்கள் திட்டத்திற்கு உரிமம் " +"வழங்கப்பட்டால், நீங்கள் தனிப்பயன் ஒன்றை வடிவத்தில் உருவாக்கலாம் `` licenseref- [idstring] " +"``. தனிப்பயன் அடையாளங்காட்டிகள் SPDX விவரக்குறிப்பைப் பின்பற்ற வேண்டும், `பிரிவு 10.1 " +" _ _ _ _ _ _ அல்லது பின்னர் இணக்கமான ஏதேனும் ஒன்று." + +#: ../source/guides/writing-pyproject-toml.rst:367 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8847,31 +12815,106 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "`` உரிம-கோப்புகள்``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "குளோப் வடிவங்கள் விவரக்குறிப்பைப் பின்பற்ற வேண்டும்:" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" +"எண்ணெழுத்து எழுத்துக்கள், அடிக்கோடிட்டு (`` _``), ஐபன்கள் (`` -``) மற்றும் புள்ளிகள் (`` ." +"``) ஆகியவை சொற்களஞ்சியத்துடன் பொருந்தும்." + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" +"சிறப்பு எழுத்துக்கள்: ``*``, ``? ``, `` ** `` மற்றும் எழுத்து வரம்புகள்: [] " +"ஆதரிக்கப்படுகின்றன." + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "பாதை டிலிமிட்டர்கள் முன்னோக்கி ச்லாச் எழுத்துக்குறியாக இருக்க வேண்டும் (``/``)." + +#: ../source/guides/writing-pyproject-toml.rst:416 +msgid "" +"Patterns are relative to the directory containing :file:`pyproject.toml`, " +"and thus may not start with a slash character." +msgstr "" +"வடிவங்கள் கொண்ட கோப்பகத்துடன் தொடர்புடையவை: கோப்பு: `pyproject.toml`, இதனால் ஒரு ச்லாச் " +"பாத்திரத்துடன் தொடங்கக்கூடாது." + +#: ../source/guides/writing-pyproject-toml.rst:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "பெற்றோர் அடைவு குறிகாட்டிகள் (`` ..``) பயன்படுத்தப்படக்கூடாது." + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "ஒவ்வொரு குளோபும் குறைந்தது ஒரு கோப்பை பொருத்த வேண்டும்." + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" -msgstr "" +msgstr "`` முக்கிய வார்த்தைகள்``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" -msgstr "" +msgstr "`` வகைப்படுத்திகள்``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" +"உங்கள் திட்டத்திற்கு பொருந்தும் PYPI வகைப்படுத்திகளின் பட்டியல். `சாத்தியக்கூறுகளின் முழு " +"பட்டியலையும் சரிபார்க்கவும் <வகைப்படுத்தி-பட்டியல்_>` _." -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8879,102 +12922,134 @@ msgid "" "what Python versions a project can be installed on, use the :ref:`requires-" "python` argument." msgstr "" +"ஒரு திட்டம் ஆதரிக்கும் பைதான் பதிப்புகள் என்ன என்பதை அறிவிக்க வகைப்படுத்திகளின் பட்டியல் " +"பெரும்பாலும் பயன்படுத்தப்பட்டாலும், இந்த செய்தி திட்டங்களை நிறுவுவதற்கு அல்ல, PYPI இல் " +"திட்டங்களைத் தேடுவதற்கும் உலாவுவதற்கும் மட்டுமே பயன்படுத்தப்படுகிறது. ஒரு திட்டத்தை " +"நிறுவக்கூடிய பைதான் பதிப்புகளை உண்மையில் கட்டுப்படுத்த, பயன்படுத்தவும்: ref: `-பைதான் " +"தேவை." -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 msgid "" "To prevent a package from being uploaded to PyPI, use the special " "``Private :: Do Not Upload`` classifier. PyPI will always reject packages " "with classifiers beginning with ``Private ::``." msgstr "" +"ஒரு தொகுப்பு PYPI இல் பதிவேற்றப்படுவதைத் தடுக்க, சிறப்பு `` தனிப்பட்ட :: பதிவேற்ற " +"வேண்டாம்`` வகைப்படுத்தியைப் பயன்படுத்தவும். `` தனிப்பட்ட :: `` உடன் தொடங்கி " +"வகைப்படுத்திகளுடன் தொகுப்புகளை PYPI எப்போதும் நிராகரிக்கும்." -#: ../source/guides/writing-pyproject-toml.rst:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" -msgstr "" +msgstr "`` urls``" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 msgid "" "A list of URLs associated with your project, displayed on the left sidebar " "of your PyPI project page." msgstr "" +"உங்கள் திட்டத்துடன் தொடர்புடைய முகவரி களின் பட்டியல், உங்கள் PYPI திட்ட பக்கத்தின் இடது " +"பக்கப்பட்டியில் காட்டப்படும்." -#: ../source/guides/writing-pyproject-toml.rst:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 "" +"காண்க: குறிப்பு: பைபி மற்றும் பிற பேக்கேசிங் கருவிகள் குறிப்பாக அறிந்த லேபிள்களின் " +"பட்டியலுக்கு `நன்கு அறியப்பட்ட-லேபிள்கள்`, மற்றும்` பைபியின் திட்ட மேனிலை தரவு டாக்ச் " +" `_ PYPI- குறிப்பிட்ட " +"முகவரி செயலாக்கத்திற்கு." -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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 "" +"லேபிளில் இடைவெளிகள் இருந்தால், அதை மேற்கோள் காட்ட வேண்டும், எ.கா., `` வலைத்தளம் = " +"\"https://example.com\" ." -#: ../source/guides/writing-pyproject-toml.rst:430 +#: ../source/guides/writing-pyproject-toml.rst:504 msgid "" "Users are advised to use :ref:`well-known-labels` for their project URLs " "where appropriate, since consumers of metadata (like package indices) can " "specialize their presentation." msgstr "" +"பயனர்கள் பயன்படுத்த அறிவுறுத்தப்படுகிறார்கள்: ref: `நன்கு அறியப்பட்ட-லேபிள்கள்` தங்கள் திட்ட " +"முகவரி களுக்கு பொருத்தமான இடங்களில், மெட்டாடேட்டாவின் நுகர்வோர் (தொகுப்பு குறியீடுகள் " +"போன்றவை) தங்கள் விளக்கக்காட்சியை நிபுணத்துவம் பெற முடியும்." -#: ../source/guides/writing-pyproject-toml.rst:434 +#: ../source/guides/writing-pyproject-toml.rst:508 msgid "" "For example in the following metadata, neither ``MyHomepage`` nor " "``\"Download Link\"`` is a well-known label, so they will be rendered " "verbatim:" msgstr "" +"எடுத்துக்காட்டாக, பின்வரும் மெட்டாடேட்டாவில், `` MyHomePage`` அல்லது `` \"பதிவிறக்கம் " +"இணைப்பு\" `` என்பது ஒரு நன்கு அறியப்பட்ட சிட்டை, எனவே அவை சொற்களஞ்சியமாக வழங்கப்படும்:" -#: ../source/guides/writing-pyproject-toml.rst:444 +#: ../source/guides/writing-pyproject-toml.rst:518 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:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" -msgstr "" +msgstr "மேம்பட்ட செருகுநிரல்கள்" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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 "" +"சில தொகுப்புகளை செருகுநிரல்கள் மூலம் நீட்டிக்க முடியும். எடுத்துக்காட்டுகளில் பைடெச்ட்_ " +"மற்றும் பைக்மென்ட்ச்_ ஆகியவை அடங்கும். அத்தகைய சொருகி உருவாக்க, நீங்கள் அதை `` [Project." +"entry- புள்ளிகள்] `` இதைப் போன்ற ஒரு துணைப்பிரிவில் அறிவிக்க வேண்டும்:" -#: ../source/guides/writing-pyproject-toml.rst:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." -msgstr "" +msgstr "பார்க்க: ref: `சொருகி வழிகாட்டி <சொருகி-நுழைவு புள்ளிகள்>` மேலும் தகவலுக்கு." -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" -msgstr "" +msgstr "ஒரு முழு சான்று" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " "information regarding possible problems." msgstr "" +"``-பைதான் = \"<= 3.10\" `` இங்கே. `இந்த வலைப்பதிவு இடுகையில் <-பைதான்-பிளாக்-" +"போச்ட்_>` _ சாத்தியமான சிக்கல்கள் தொடர்பான சில தகவல்களைக் கொண்டுள்ளது." #: ../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 "" +msgstr "பைதான், பேக்கேசிங், வழிகாட்டி, பயிற்சி" #: ../source/index.rst:3 ../source/key_projects.rst:247 msgid "Python Packaging User Guide" -msgstr "" +msgstr "பைதான் பேக்கேசிங் பயனர் கையேடு" #: ../source/index.rst:25 msgid "" @@ -8982,6 +13057,8 @@ msgid "" "references to help you distribute and install Python packages with modern " "tools." msgstr "" +"நவீன கருவிகளுடன் பைதான் தொகுப்புகளை விநியோகிக்கவும் நிறுவவும் உதவும் பயிற்சிகள் மற்றும் " +"குறிப்புகளின் தொகுப்பான *பைதான் பேக்கேசிங் பயனர் கையேடு *க்கு வருக." #: ../source/index.rst:29 msgid "" @@ -8989,10 +13066,13 @@ msgid "" "Authority `. We happily accept :doc:`contributions and feedback " "`. 😊" msgstr "" +"இந்த வழிகாட்டி `கிதுப்`_ இல் பராமரிக்கப்படுகிறது: டாக்:` பைதான் பேக்கேசிங் ஆணையம் " +"<பைபா: குறியீட்டு> `. நாங்கள் மகிழ்ச்சியுடன் ஏற்றுக்கொள்கிறோம்: டாக்: `பங்களிப்புகள் மற்றும் " +"பின்னூட்டங்கள் <பங்களிப்பு>`. ." #: ../source/index.rst:36 msgid "Overview and Flow" -msgstr "" +msgstr "கண்ணோட்டம் மற்றும் ஓட்டம்" #: ../source/index.rst:40 msgid "" @@ -9000,6 +13080,9 @@ msgid "" "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 "" @@ -9009,12 +13092,19 @@ msgid "" "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 "" @@ -9022,23 +13112,31 @@ msgid "" "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 "" +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 "" @@ -9046,6 +13144,9 @@ msgid "" "users who are already familiar with Python packaging and are looking for " "specific information." msgstr "" +"வழிகாட்டிகள் ஒரு குறிப்பிட்ட பணியைச் செய்ய நடவடிக்கைகளை வழங்குகின்றன. பைதான் " +"பேக்கேசிங்கை ஏற்கனவே அறிந்த மற்றும் குறிப்பிட்ட தகவல்களைத் தேடும் பயனர்களுக்கு வழிகாட்டிகள் " +"அதிக கவனம் செலுத்துகின்றன." #: ../source/index.rst:75 msgid "" @@ -9053,62 +13154,74 @@ msgid "" "major areas: package installation; building and distributing packages; " "miscellaneous topics." msgstr "" +"தி: டாக்: `வழிகாட்டிகள்/குறியீட்டு` பிரிவு மூன்று முக்கிய பகுதிகளில்\" எப்படி " +"\"அறிவுறுத்தல்களை வழங்குகிறது: தொகுப்பு நிறுவல்; தொகுப்புகளை உருவாக்குதல் மற்றும் " +"விநியோகித்தல்; இதர தலைப்புகள்." #: ../source/index.rst:80 msgid "Explanations and Discussions" -msgstr "" +msgstr "விளக்கங்கள் மற்றும் விவாதங்கள்" #: ../source/index.rst:82 msgid "" "The :doc:`discussions/index` section for in-depth explanations and " "discussion about topics, such as:" msgstr "" +"தி: டாக்: `விவாதங்கள்/குறியீட்டு` பிரிவு போன்ற தலைப்புகள் பற்றிய விவாதங்களுக்கான " +"பிரிவு: போன்றவை:" #: ../source/index.rst:85 msgid ":doc:`discussions/deploying-python-applications`" -msgstr "" +msgstr ": டாக்: `விவாதங்கள்/வரிசைப்படுத்தல்-பைதான்-பயன்பாடுகள்`" #: ../source/index.rst:86 msgid ":doc:`discussions/pip-vs-easy-install`" -msgstr "" +msgstr ": டாக்: `விவாதங்கள்/பிஐபி-விஎச்-ஈசி-இன்ச்டால்`" #: ../source/index.rst:89 msgid "Reference" -msgstr "" +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 "" +"பட்டியல்: DOC: `பிற திட்டங்கள் ` பைதான் பேக்கேசிங் அதிகாரசபையின் " +"உறுப்பினர்களால் பராமரிக்கப்படுகிறது." #: ../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 "" +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 "" +msgstr "பைபா திட்டங்கள்" #: ../source/key_projects.rst:19 msgid "bandersnatch" -msgstr "" +msgstr "bandersnatch" #: ../source/key_projects.rst:21 msgid "" @@ -9116,6 +13229,9 @@ msgid "" "pypa/bandersnatch/issues>`__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் ` __ | `சிக்கல்கள் __ | `Github ` __ | `Pypi ____" #: ../source/key_projects.rst:26 msgid "" @@ -9125,10 +13241,16 @@ msgid "" "tests) and to prevent heavily loading PyPI's Content Delivery Network (CDN). " "Files can be served from a local directory or `AWS S3`_." msgstr "" +"`` bandersnatch`` என்பது PYPI இன் உள்ளடக்கங்களின் முழுமையான கண்ணாடியை திறம்பட " +"உருவாக்க வடிவமைக்கப்பட்ட ஒரு PYPI பிரதிபலிக்கும் கிளையன்ட் ஆகும். நிறுவனங்கள் இவ்வாறு " +"தொகுப்பு பதிவிறக்கங்களில் அலைவரிசை மற்றும் தாமதத்தை சேமிக்கின்றன (குறிப்பாக தானியங்கி " +"சோதனைகளின் சூழலில்) மற்றும் PYPI இன் உள்ளடக்க விநியோக நெட்வொர்க்கை (சி.டி.என்) பெரிதும் " +"ஏற்றுவதைத் தடுக்கவும். கோப்புகளை உள்ளக கோப்பகத்திலிருந்து அல்லது `AWS S3`_ இலிருந்து " +"வழங்கலாம்." #: ../source/key_projects.rst:37 msgid "build" -msgstr "" +msgstr "உருவாக்கு" #: ../source/key_projects.rst:39 msgid "" @@ -9136,16 +13258,21 @@ msgid "" "issues>`__ | `GitHub `__ | `PyPI `__" msgstr "" +": ஏதேனும்: `டாக்ச் <உருவாக்க: குறியீட்டு>` | `சிக்கல்கள் ` __ | `Github ` __ | `Pypi " +"` __" #: ../source/key_projects.rst:44 msgid "" "``build`` is a :pep:`517` compatible Python package builder. It provides a " "CLI to build packages, as well as a Python API." msgstr "" +"`` பில்ட்`` என்பது ஒரு: பெப்: `517` இணக்கமான பைதான் தொகுப்பு பில்டர். இது தொகுப்புகளை " +"உருவாக்க ஒரு சி.எல்.ஐ மற்றும் ஒரு பைதான் பநிஇ ஆகியவற்றை வழங்குகிறது." #: ../source/key_projects.rst:51 msgid "cibuildwheel" -msgstr "" +msgstr "cibuildwheel" #: ../source/key_projects.rst:53 msgid "" @@ -9155,6 +13282,11 @@ msgid "" "`Discussions `__ | " "`Discord #cibuildwheel `__" msgstr "" +"`டாக்ச் ` __ | `சிக்கல்கள் ` __ | `Github __ | `Pypi ` __ | " +"`விவாதங்கள் ` __ | `டிச்கார்ட் " +"#cibuildwheel ` __" #: ../source/key_projects.rst:60 msgid "" @@ -9162,10 +13294,13 @@ msgid "" "all common platforms and Python versions on most CI systems. Also see :ref:" "`multibuild`." msgstr "" +"`` cibuildwheel`` என்பது ஒரு பைதான் தொகுப்பாகும்: கால: `சக்கரங்கள் ` அனைத்து " +"பொதுவான தளங்களுக்கும் பெரும்பாலான தொஒ அமைப்புகளில் பைதான் பதிப்புகளுக்கும். மேலும் " +"காண்க: குறிப்பு: `மல்டிபில்ட்`." #: ../source/key_projects.rst:66 msgid "distlib" -msgstr "" +msgstr "தொலைதூர" #: ../source/key_projects.rst:68 msgid "" @@ -9173,6 +13308,9 @@ msgid "" "issues>`__ | `GitHub `__ | `PyPI `__" msgstr "" +": டாக்: `டாக்ச் <டிச்ட்லிப்: குறியீட்டு>` | `சிக்கல்கள் __ | `Github ` __ | `Pypi " +"` __" #: ../source/key_projects.rst:73 msgid "" @@ -9184,6 +13322,13 @@ msgid "" "interoperability, resolve dependencies, manage package resources, and do " "other similar functions." msgstr "" +"`` டிச்ட்லிப்`` என்பது பைதான் மென்பொருளின் பேக்கேசிங் மற்றும் விநியோகத்துடன் தொடர்புடைய " +"குறைந்த அளவிலான செயல்பாடுகளை செயல்படுத்தும் ஒரு நூலகம். `` டிச்ட்லிப்`` பல தொடர்புடைய " +"PEP களை (பைதான் மேம்பாட்டு முன்மொழிவு தரநிலைகள்) செயல்படுத்துகிறது மற்றும் மூன்றாம் " +"தரப்பு பேக்கேசிங் கருவிகளை உருவாக்கி பைனரி மற்றும் மூலத்தை உருவாக்குவதற்கும் " +"பதிவேற்றுவதற்கும் இது பயனுள்ளதாக இருக்கும்: கால: `விநியோகங்கள் <விநியோக தொகுப்பு>`, " +"இயங்குதளங்களை அடையலாம், சார்புகளைத் தீர்க்கவும், தொகுப்பு வளங்களை நிர்வகிக்கவும், பிற ஒத்த " +"செயல்பாடுகளைச் செய்யவும்." #: ../source/key_projects.rst:82 msgid "" @@ -9194,16 +13339,22 @@ msgid "" "standards and fall into the subset of packages that are incompatible with " "those standards." msgstr "" +"நவீன பைதான் பேக்கேசிங் இயங்குதள தரங்களை குறிப்பாக செயல்படுத்தும் கடுமையான: ref: " +"`பேக்கேசிங்` திட்டம் (கீழே) போலல்லாமல், நவீன இயங்குதன்மை தரநிலைகள் மற்றும் மரபு தொகுப்புகள் " +"மற்றும் மெட்டாடேட்டாவைக் கையாளும்படி கேட்கும்போது நியாயமான குறைவடையும் நடத்தைகளை வழங்க " +"முயற்சிக்கிறது. அந்த தரங்களுடன் பொருந்தாத தொகுப்புகளின் துணைக்குழுவில் விழுங்கள்." #: ../source/key_projects.rst:93 msgid "distutils" -msgstr "" +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 "" +"அசல் பைதான் பேக்கேசிங் அமைப்பு, பைதான் 2.0 இல் உள்ள நிலையான நூலகத்தில் சேர்க்கப்பட்டு 3.12 " +"இல் அகற்றப்பட்டது." #: ../source/key_projects.rst:98 msgid "" @@ -9215,6 +13366,10 @@ msgid "" "entry point declarations), it also provides a consistent build interface and " "feature set across all supported Python versions." msgstr "" +"அம்ச புதுப்பிப்புகள் மொழி இயக்க நேர புதுப்பிப்புகளுடன் இறுக்கமாக இணைக்கப்படும் ஒரு " +"பேக்கேசிங் முறையை பராமரிப்பதில் உள்ள சவால்கள் காரணமாக, நேரடி பயன்பாடு: ref: " +"`தொலைதூரங்கள்` தீவிரமாக ஊக்கமளிக்கப்பட்டுள்ளன, இதனுடன்: குறிப்பு:` செடிப்டூல்ச்` " +"விருப்பமான மாற்றாக இருப்பது. ." #: ../source/key_projects.rst:107 msgid "" @@ -9223,16 +13378,23 @@ msgid "" "in Python 3.12. Setuptools bundles the standalone copy of distutils, and it " "is injected even on Python < 3.12 if you import setuptools first or use pip." msgstr "" +"இதன் விளைவாக, குறிப்பு: `தொலைதூரங்கள்` பைத்தானில் 3.10 இல் நீக்கப்பட்டன: PEP: `632` " +"மற்றும் உள்ளது: DOC:` அகற்றப்பட்டது <பைத்தான்: வாட்ச்நியூ/3.12> `பைத்தானில் உள்ள நிலையான " +"நூலகத்திலிருந்து 3.12. Setuptools டிச்டிடில்களின் முழுமையான நகலை மூட்டுகிறது, " +"மேலும் நீங்கள் முதலில் செட்டப்டூல்களை இறக்குமதி செய்தால் அல்லது PIP ஐப் பயன்படுத்தினால் இது " +"பைதான் <3.12 இல் கூட செலுத்தப்படுகிறது." #: ../source/key_projects.rst:116 msgid "flit" -msgstr "" +msgstr "ஃபிளிட்" #: ../source/key_projects.rst:118 msgid "" "`Docs `__ | `Issues `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ` __ | `Pypi ` __" #: ../source/key_projects.rst:122 msgid "" @@ -9242,6 +13404,11 @@ msgid "" "quickly set up a simple project, build source distributions and wheels, and " "upload them to PyPI." msgstr "" +"தூய பைதான் தொகுப்புகள் மற்றும் தொகுதிகளை PYPI க்கு உருவாக்கி பதிவேற்ற ஒரு எளிய வழியை " +"FLIT வழங்குகிறது. இது `எளிதான விசயங்களை எளிதாக்குவதில் கவனம் செலுத்துகிறது <ஃபிளிட்-" +"ரேசன்_>` _ பேக்கேசிங்கிற்கு. ஒரு எளிய திட்டத்தை விரைவாக அமைக்கவும், மூல விநியோகங்கள் " +"மற்றும் சக்கரங்களை உருவாக்கவும், அவற்றை PYPI இல் பதிவேற்றவும் ஃபிளிட் ஒரு உள்ளமைவு கோப்பை " +"உருவாக்க முடியும்." #: ../source/key_projects.rst:127 msgid "" @@ -9250,6 +13417,11 @@ msgid "" "upload them to PyPI. Flit requires Python 3, but you can use it to " "distribute modules for Python 2, so long as they can be imported on Python 3." msgstr "" +"ஒரு திட்டத்தை உள்ளமைக்க FLIT `` pyproject.toml`` ஐப் பயன்படுத்துகிறது. ஃபிளிட் போன்ற " +"கருவிகளை நம்பவில்லை: குறிப்பு: விநியோகங்களை உருவாக்க `செடிப்டூல்ச்`, அல்லது: ref:` " +"ட்வைன்` அவற்றை பைபியில் பதிவேற்ற. ஃப்ளிட்டுக்கு பைதான் 3 தேவைப்படுகிறது, ஆனால் பைதான் 2 " +"க்கான தொகுதிகளை விநியோகிக்க நீங்கள் அதைப் பயன்படுத்தலாம், அவை பைதான் 3 இல் இறக்குமதி " +"செய்யப்படும் வரை." #: ../source/key_projects.rst:132 msgid "" @@ -9258,16 +13430,22 @@ msgid "" "com/lifter/search/pypi/flit>`__, and funds sent to the PSF and earmarked for " "PyPA usage." msgstr "" +"ஃபிளிட் தொகுப்பு `மத்தியாச் புச்சன்னியர் ` __ அக்டோபர் " +"2023 முதல் `டிடெலிஃப்ட் இயங்குதளத்தில் __, மற்றும் பி.எச்.எஃப் -க்கு அனுப்பப்பட்ட பொருள் மற்றும் பைபா பயன்பாட்டிற்காக " +"ஒதுக்கப்பட்டுள்ளது." #: ../source/key_projects.rst:142 msgid "hatch" -msgstr "" +msgstr "அட்ச்" #: ../source/key_projects.rst:144 msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் ` __ | `Github ` __ | `Pypi ____" #: ../source/key_projects.rst:148 msgid "" @@ -9277,10 +13455,16 @@ msgid "" "to configure, version, specify dependencies for, and publish packages to " "PyPI. Its plugin system allows for easily extending functionality." msgstr "" +"அட்ச் என்பது ஒரு ஒருங்கிணைந்த கட்டளை-வரி கருவியாகும், அதாவது பைதான் டெவலப்பர்களுக்கான " +"சார்புநிலைகள் மற்றும் சுற்றுச்சூழல் தனிமைப்படுத்தலை வசதியாக நிர்வகிப்பதாகும். பைதான் " +"தொகுப்பு உருவாக்குபவர்கள் அட்ச் மற்றும் அதன்: காலத்தைப் பயன்படுத்துகிறார்கள்: `பின்தளத்தில் " +"உருவாக்கு <பின்தளத்தில் உருவாக்கு>` கட்டமைக்க, பதிப்பு, சார்புநிலைகளை குறிப்பிடுதல் " +"மற்றும் PYPI க்கு தொகுப்புகளை வெளியிடுவது. அதன் சொருகி அமைப்பு செயல்பாட்டை எளிதில் " +"நீட்டிக்க அனுமதிக்கிறது." #: ../source/key_projects.rst:157 msgid "packaging" -msgstr "" +msgstr "பொதியாக்கம்" #: ../source/key_projects.rst:159 msgid "" @@ -9288,11 +13472,16 @@ msgid "" "issues>`__ | `GitHub `__ | `PyPI `__" msgstr "" +": டாக்: `டாக்ச் <பேக்கேசிங்: குறியீட்டு>` | `சிக்கல்கள் ` __ | `Github ` __ | " +"`Pypi ` __" #: ../source/key_projects.rst:164 msgid "" "Core utilities for Python packaging used by :ref:`pip` and :ref:`setuptools`." msgstr "" +"பயன்படுத்திய பைதான் பேக்கேசிங்கிற்கான முக்கிய பயன்பாடுகள்: ref: `பிப்` மற்றும்: குறிப்பு:" +"` செட்ப்டூல்ச்`." #: ../source/key_projects.rst:166 msgid "" @@ -9303,6 +13492,12 @@ msgid "" "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 "" @@ -9314,11 +13509,17 @@ msgid "" "reading of ambiguous metadata in cases where :ref:`packaging` will instead " "report on error." msgstr "" +"இந்த திட்டம் குறிப்பாக நவீன பைதான் பேக்கேசிங் இயங்குதன்மை தரங்களை செயல்படுத்துவதில் கவனம் " +"செலுத்துகிறது: குறிப்பு: ref: `பேக்கேசிங்-குறிப்பிட்டவை`, மேலும் அந்த தரங்களுடன் " +"பொருந்தாத போதுமான பழைய மரபு தொகுப்புகளுக்கான பிழைகளை புகாரளிக்கும். இதற்கு " +"நேர்மாறாக,: ref: `Distlib` திட்டம் என்பது மிகவும் அனுமதிக்கப்பட்ட நூலகமாகும், இது " +"தெளிவற்ற மெட்டாடேட்டாவை நம்பத்தகுந்த வாசிப்பை வழங்க முயற்சிக்கிறது: ref:` பேக்கேசிங்` " +"அதற்கு பதிலாக பிழையைப் புகாரளிக்கும்." #: ../source/key_projects.rst:186 #: ../source/specifications/platform-compatibility-tags.rst:142 msgid "pip" -msgstr "" +msgstr "பிப்" #: ../source/key_projects.rst:188 msgid "" @@ -9326,12 +13527,17 @@ msgid "" "issues>`__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ` __ | `Github ` __ | `Pypi ____" #: ../source/key_projects.rst:193 msgid "" "The most popular tool for installing Python packages, and the one included " "with modern versions of Python." msgstr "" +"பைதான் தொகுப்புகளை நிறுவுவதற்கான மிகவும் பிரபலமான கருவி, மற்றும் பைதானின் நவீன " +"பதிப்புகளுடன் சேர்க்கப்பட்டுள்ளது." #: ../source/key_projects.rst:196 msgid "" @@ -9340,10 +13546,14 @@ msgid "" "incorporated into a wide range of development workflows via its command-line " "interface (CLI)." msgstr "" +"இது PYPI மற்றும் பிற பைதான் தொகுப்பு குறியீடுகளிலிருந்து தொகுப்புகளைக் கண்டறிதல், " +"பதிவிறக்கம் செய்தல் மற்றும் நிறுவுவதற்கான அத்தியாவசிய முக்கிய அம்சங்களை வழங்குகிறது, " +"மேலும் அதன் கட்டளை-வரி இடைமுகம் (CLI) வழியாக பரந்த அளவிலான மேம்பாட்டு பணிப்பாய்வுகளில் " +"இணைக்கப்படலாம்." #: ../source/key_projects.rst:204 msgid "Pipenv" -msgstr "" +msgstr "பைபென்வ்" #: ../source/key_projects.rst:206 msgid "" @@ -9351,6 +13561,9 @@ msgid "" "`Issues `__ | `PyPI `__" msgstr "" +": டாக்: `டாக்ச் <பைபென்வி: குறியீட்டு>` | `மூல ` " +"__ | `சிக்கல்கள் __ | `Pypi ____" #: ../source/key_projects.rst:211 msgid "" @@ -9360,6 +13573,10 @@ msgid "" "txt`` and also check for CVEs in `Pipfile`_ using `safety `_." msgstr "" +"பைபென்வி என்பது ஒரு திட்டமாகும், இது அனைத்து பேக்கேசிங் உலகங்களையும் பைதான் உலகிற்கு " +"கொண்டு வருவதை நோக்கமாகக் கொண்டுள்ளது. இது பயன்படுத்துகிறது: ref: `பிப்ஃபைல்`,: " +"குறிப்பு:` பிப்`, மற்றும்: ref: `Virtualenv` ஒரு ஒற்றை கருவித்தொகுப்பில். இது `` " +"தேவைகள்." #: ../source/key_projects.rst:216 msgid "" @@ -9369,14 +13586,19 @@ msgid "" "with hash-locked dependency specifiers, and eases uninstallation of packages " "and dependencies." msgstr "" +"கட்டளை வரியில் சூழல்கள், சார்புநிலைகள் மற்றும் இறக்குமதி செய்யப்பட்ட தொகுப்புகளை நிர்வகிக்க " +"பயனர்களுக்கு உதவுவதை பைபென்வி நோக்கமாகக் கொண்டுள்ளது. ஆச்-பூட்டப்பட்ட சார்பு " +"குறிப்பான்களுடன் இணங்குவதை உறுதிசெய்ய, இது விண்டோசிலும் (பிற கருவிகள் பெரும்பாலும் " +"அடிக்கோடிட்டுக் காட்டும்), கோப்பு ஆச்களை உருவாக்கி சரிபார்க்கிறது, மேலும் தொகுப்புகள் " +"மற்றும் சார்புகளை நிறுவல் நீக்குவதை எளிதாக்குகிறது." #: ../source/key_projects.rst:225 msgid "Pipfile" -msgstr "" +msgstr "பிப்ஃபைல்" #: ../source/key_projects.rst:227 msgid "`Source `__" -msgstr "" +msgstr "`ஆதாரம் ` __" #: ../source/key_projects.rst:229 msgid "" @@ -9384,42 +13606,54 @@ msgid "" "application-centric alternative to :ref:`pip`'s lower-level :file:" "`requirements.txt` file." msgstr "" +":file:`Pipfile` and its sister :file:`Pipfile.lock` அரே a higher-level " +"application-centric alternative பெறுநர் :ref:`pip`'s lower-level :file:" +"`requirements.txt` file." #: ../source/key_projects.rst:236 msgid "pipx" -msgstr "" +msgstr "PIPX" #: ../source/key_projects.rst:238 msgid "" "`Docs `__ | `GitHub `__ " "| `PyPI `__" msgstr "" +"`டாக்ச் __ | `Github ` " +"__ | `Pypi ____" #: ../source/key_projects.rst:242 msgid "" "pipx is a tool to install and run Python command-line applications without " "causing dependency conflicts with other packages installed on the system." msgstr "" +"கணினியில் நிறுவப்பட்ட பிற தொகுப்புகளுடன் சார்பு மோதல்களை ஏற்படுத்தாமல் பைதான் கட்டளை-வரி " +"பயன்பாடுகளை நிறுவி இயக்க PIPX என்பது ஒரு கருவியாகும்." #: ../source/key_projects.rst:249 msgid "" ":doc:`Docs ` | `Issues `__ | `GitHub `__" msgstr "" +": டாக்: `டாக்ச் <குறியீட்டு>` | `சிக்கல்கள் ` __ | `Github __ __ __" #: ../source/key_projects.rst:253 msgid "This guide!" -msgstr "" +msgstr "இந்த வழிகாட்டி!" #: ../source/key_projects.rst:258 msgid "readme_renderer" -msgstr "" +msgstr "README_RENDER" #: ../source/key_projects.rst:260 msgid "" "`GitHub and docs `__ | `PyPI " "`__" msgstr "" +"`கிதுப் மற்றும் டாக்ச் __ | `Pypi " +" __ __ __" #: ../source/key_projects.rst:263 msgid "" @@ -9429,10 +13663,16 @@ msgid "" "`twine`, as part of their release management process, to check that their " "package descriptions will properly display on PyPI." msgstr "" +"`` ReadMe_Renderer`` என்பது ஒரு நூலகம் ஆகும், இது தொகுப்பு உருவாக்குபவர்கள் தங்கள் " +"பயனர் ஆவணங்களை (README) கோப்புகளை உஉகுமொ இல் மார்க்அப் மொழிகளான மார்க் பேரூர் அல்லது " +"மறுசீரமைப்பது போன்றவற்றிலிருந்து வழங்க பயன்படுத்தும் ஒரு நூலகமாகும். உருவாக்குபவர்கள் அதை " +"சொந்தமாக அல்லது வழியாக அழைக்கிறார்கள்: ref: `கயிறு`, அவர்களின் வெளியீட்டு மேலாண்மை " +"செயல்முறையின் ஒரு பகுதியாக, அவர்களின் தொகுப்பு விளக்கங்கள் PYPI இல் சரியாகக் " +"காண்பிக்கப்படும் என்பதை சரிபார்க்க." #: ../source/key_projects.rst:274 msgid "Setuptools" -msgstr "" +msgstr "Setuptools" #: ../source/key_projects.rst:276 msgid "" @@ -9440,6 +13680,9 @@ msgid "" "github.com/pypa/setuptools/issues>`__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ` __ | `Github ` __ | `Pypi ` __" #: ../source/key_projects.rst:281 msgid "" @@ -9448,10 +13691,14 @@ msgid "" "Python :term:`distributions `, especially ones that " "have dependencies on other packages." msgstr "" +"Setuptools (இதில் `` Ease_install`` ஐ உள்ளடக்கியது) என்பது பைத்தான் தொலைதூரங்களுக்கு " +"மேம்பாடுகளின் தொகுப்பாகும், இது பைத்தானை எளிதாக உருவாக்கவும் விநியோகிக்கவும் உங்களை " +"அனுமதிக்கிறது: கால: `விநியோகம் <விநியோக தொகுப்பு>`, குறிப்பாக பிற தொகுப்புகளைச் " +"சார்ந்திருக்கும்." #: ../source/key_projects.rst:289 msgid "trove-classifiers" -msgstr "" +msgstr "ட்ரோவ்-கிளாசிஃபையர்கள்" #: ../source/key_projects.rst:291 msgid "" @@ -9459,6 +13706,9 @@ msgid "" "`__ | `PyPI `__" msgstr "" +"`சிக்கல்கள் ` __ | `Github " +"` __ | `Pypi ____ __ __" #: ../source/key_projects.rst:295 msgid "" @@ -9467,6 +13717,9 @@ msgid "" "`systematically describe their projects ` so that " "users can better find projects that match their needs on the PyPI." msgstr "" +"Pypi _ _, இது திட்ட பராமரிப்பாளர்கள் பயன்படுத்தும்: " +"ref: `அவர்களின் திட்டங்களை முறையாக விவரிக்கவும் <கோர்-மெட்டாடேட்டா-கிளாசிஃபையர்> " +"பயனர்கள் தங்கள் தேவைகளுக்கு பொருந்தக்கூடிய திட்டங்களை PYPI இல் சிறப்பாகக் காணலாம்." #: ../source/key_projects.rst:300 msgid "" @@ -9480,10 +13733,20 @@ msgid "" "the project hosts discussions on proposed classifiers and requests for new " "classifiers." msgstr "" +"ட்ரோவ்-கிளாசிஃபியர்ச் தொகுப்பில் செல்லுபடியாகும் வகைப்படுத்திகள் மற்றும் நீக்கப்பட்ட " +"வகைப்படுத்திகளின் பட்டியல் உள்ளது (அவை அவற்றை மாற்றும் வகைப்படுத்திகளுடன் " +"இணைக்கப்பட்டுள்ளன). PYPI இல் பதிவேற்றுவதற்காக வடிவமைக்கப்பட்ட தொகுப்புகளில் " +"பயன்படுத்தப்படும் வகைப்படுத்திகளை சரிபார்க்க இந்த தொகுப்பைப் பயன்படுத்தவும். " +"வகைப்படுத்திகளின் இந்த பட்டியல் குறியீடாக வெளியிடப்படுவதால், நீங்கள் அதை நிறுவி இறக்குமதி " +"செய்யலாம், இது பைபி `_ இல் வெளியிடப்பட்ட` " +"பட்டியலைக் குறிப்பிடுவதை ஒப்பிடும்போது மிகவும் வசதியான பணிப்பாய்வுகளை உங்களுக்கு " +"வழங்குகிறது. `வெளியீடு டிராக்கர் ` _ திட்டத்திற்கு முன்மொழியப்பட்ட வகைப்படுத்திகள் பற்றிய விவாதங்கள் மற்றும் புதிய " +"வகைப்படுத்திகளுக்கான கோரிக்கைகள்." #: ../source/key_projects.rst:314 msgid "twine" -msgstr "" +msgstr "கயிறு" #: ../source/key_projects.rst:316 msgid "" @@ -9491,6 +13754,9 @@ msgid "" "com/pypa/twine/issues>`__ | `GitHub `__ | " "`PyPI `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ` __ | `Github ` " +"__ | `Pypi ` __" #: ../source/key_projects.rst:321 msgid "" @@ -9500,10 +13766,16 @@ msgid "" "because it's the official PyPI upload tool, it's fast and secure, it's " "maintained, and it reliably works." msgstr "" +"பைதான் தொகுப்பு குறியீட்டு அல்லது பிற பைதான் தொகுப்பு குறியீடுகளுக்கு தொகுப்புகளை " +"பதிவேற்ற உருவாக்குபவர்கள் பயன்படுத்தும் முதன்மை கருவி உருவாக்குபவர்கள் கயிறு. இது ஒரு " +"கட்டளை-வரி நிரலாகும், இது நிரல் கோப்புகள் மற்றும் மெட்டாடேட்டாவை ஒரு வலை பநிஇ க்கு " +"அனுப்பும். உருவாக்குபவர்கள் இதைப் பயன்படுத்துகிறார்கள், ஏனெனில் இது அதிகாரப்பூர்வ PYPI " +"பதிவேற்ற கருவி, இது வேகமாகவும் பாதுகாப்பாகவும் இருக்கிறது, அது பராமரிக்கப்படுகிறது, " +"மேலும் இது நம்பத்தகுந்த வகையில் செயல்படுகிறது." #: ../source/key_projects.rst:331 ../source/overview.rst:401 msgid "virtualenv" -msgstr "" +msgstr "மெய்நிகர்இன்" #: ../source/key_projects.rst:333 msgid "" @@ -9511,6 +13783,9 @@ msgid "" "`__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் " +" __ | `Github ` __ | `Pypi ____ __" #: ../source/key_projects.rst:338 msgid "" @@ -9522,16 +13797,25 @@ msgid "" "troubleshooting virtual environments. For more information, see the section " "on :ref:`Creating and using Virtual Environments`." msgstr "" +"மெய்நிகர் ஈன்வ் என்பது தனிமைப்படுத்தப்பட்ட பைத்தானை உருவாக்குவதற்கான ஒரு கருவியாகும்: " +"கால: `மெய்நிகர் சூழல்கள் <மெய்நிகர் சூழல்>`, போன்றவை: குறிப்பு: `வெவி`. போலியானது: " +"ref: `vev`, மலைப்பாம்பின் பிற பதிப்புகளுக்கு மெய்நிகர் சூழல்களை உருவாக்க முடியும், இது " +"பாதை சூழல் மாறியைப் பயன்படுத்தி கண்டுபிடிக்கும். மெய்நிகர் சூழல்களை கட்டமைத்தல், " +"பராமரித்தல், நகல் செய்தல் மற்றும் சரிசெய்தல் ஆகியவற்றிற்கான வசதியான அம்சங்களையும் இது " +"வழங்குகிறது. மேலும் தகவலுக்கு, பகுதியைப் பார்க்கவும்: ref: `மெய்நிகர் சூழல்களை " +"உருவாக்குதல் மற்றும் பயன்படுத்துதல்`." #: ../source/key_projects.rst:350 msgid "Warehouse" -msgstr "" +msgstr "கிடங்கு" #: ../source/key_projects.rst:352 msgid "" "`Docs `__ | `Issues `__ | `GitHub `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ` __ | `Github ____ __" #: ../source/key_projects.rst:356 msgid "" @@ -9539,10 +13823,13 @@ msgid "" "hosted at `pypi.org `_. The default source for :ref:`pip` " "downloads." msgstr "" +"தற்போதைய குறியீட்டு தளத்தை இயக்குகிறது: கால: `பைதான் தொகுப்பு அட்டவணை (PYPI)`. இது " +"`pypi.org ` _ இல் வழங்கப்படுகிறது. இதற்கான இயல்புநிலை ஆதாரம்: " +"குறிப்பு: `பிப்` பதிவிறக்கங்கள்." #: ../source/key_projects.rst:364 msgid "wheel" -msgstr "" +msgstr "சக்கரம்" #: ../source/key_projects.rst:366 msgid "" @@ -9550,6 +13837,9 @@ msgid "" "com/pypa/wheel/issues>`__ | `GitHub `__ | " "`PyPI `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ` __ | `Github ` " +"__ | `Pypi ____" #: ../source/key_projects.rst:371 msgid "" @@ -9557,6 +13847,9 @@ msgid "" "extension for creating :term:`wheel distributions `. Additionally, " "it offers its own command line utility for creating and installing wheels." msgstr "" +"முதன்மையாக, சக்கர திட்டம் `` bdist_wheel``: ref: `setuptools` நீட்டிப்பை " +"உருவாக்குகிறது: கால:` சக்கர வழங்கல் `. கூடுதலாக, இது சக்கரங்களை " +"உருவாக்குவதற்கும் நிறுவுவதற்கும் அதன் சொந்த கட்டளை வரி பயன்பாட்டை வழங்குகிறது." #: ../source/key_projects.rst:375 msgid "" @@ -9566,14 +13859,19 @@ msgid "" "check metadata for compliance, and repair the wheel and metadata to properly " "link and include external shared libraries in a package." msgstr "" +"`Utidwheel __, பைனான் சக்கர வடிவத்தில் " +"அவர்கள் உருவாக்கும் பைதான் தொகுப்புகளை சரிபார்த்து சரிசெய்ய உருவாக்குபவர்கள் பயன்படுத்தும் " +"ஒரு கருவி. சார்புகளைக் கண்டறியவும், இணக்கத்திற்கான மெட்டாடேட்டாவை சரிபார்க்கவும், " +"சக்கரத்தையும் மெட்டாடேட்டாவையும் சரிசெய்யவும், வெளிப்புற பகிரப்பட்ட நூலகங்களை ஒரு " +"தொகுப்பில் சேர்க்கவும் இது செயல்பாட்டை வழங்குகிறது." #: ../source/key_projects.rst:384 msgid "Non-PyPA Projects" -msgstr "" +msgstr "பைபா அல்லாத திட்டங்கள்" #: ../source/key_projects.rst:389 msgid "buildout" -msgstr "" +msgstr "உருவாக்க" #: ../source/key_projects.rst:391 msgid "" @@ -9581,6 +13879,9 @@ msgid "" "launchpad.net/zc.buildout>`__ | `PyPI `__ | `GitHub `__" msgstr "" +"`டாக்ச் ` __ | `சிக்கல்கள் ` __ | `Pypi __ | `Github ____" #: ../source/key_projects.rst:396 msgid "" @@ -9589,14 +13890,18 @@ msgid "" "based. It lets you create a buildout configuration and reproduce the same " "software later." msgstr "" +"பில்ட்அவுட் என்பது பல பகுதிகளிலிருந்து பயன்பாடுகளை உருவாக்குவதற்கும், ஒன்றுகூடுவதற்கும், " +"வரிசைப்படுத்துவதற்கும் ஒரு பைதான் அடிப்படையிலான பில்ட் சிச்டம் ஆகும், அவற்றில் சில பைதான் " +"அல்லாதவை அல்ல. இது ஒரு கட்டமைப்பை உருவாக்கவும் அதே மென்பொருளை பின்னர் மீண்டும் " +"உருவாக்கவும் உங்களை அனுமதிக்கிறது." #: ../source/key_projects.rst:403 msgid "conda" -msgstr "" +msgstr "காண்டா" #: ../source/key_projects.rst:405 msgid ":doc:`Docs `" -msgstr "" +msgstr ": டாக்: `டாக்ச் <காண்டா: குறியீட்டு>`" #: ../source/key_projects.rst:407 msgid "" @@ -9611,6 +13916,17 @@ msgid "" "or `pixi `_ systems. It is available for Windows, Mac and " "Linux systems." msgstr "" +"காண்டா என்பது எந்தவொரு மொழிக்கும் ஒரு தொகுப்பு, சார்பு மற்றும் சுற்றுச்சூழல் மேலாண்மை " +"அமைப்பு - பைதான், ஆர், ரூபி, சி/சி ++, ஃபோர்ட்ரான் மற்றும் பல. இது பைத்தானில் " +"எழுதப்பட்டுள்ளது மற்றும் பைதான் சயின்டிஃபிக் கம்ப்யூட்டிங் சமூகத்தில் பரவலாகப் " +"பயன்படுத்தப்படுகிறது, பைதான் அல்லாத தொகுக்கப்பட்ட நூலகங்கள் மற்றும் நீட்டிப்புகளுக்கு அதன் " +"உதவி காரணமாக. இது `அனகோண்டா ` __ " +"அனகோண்டா, இன்க் நிறுவனத்திடமிருந்து பைதான் வழங்கல் ஆகியவற்றின் அடிப்படையாகப் " +"பயன்படுத்தப்படுகிறது. இது முதலில் விஞ்ஞான சமூகத்தை இலக்காகக் கொண்டது, ஆனால் அதன் " +"சொந்தத்திலும் பயன்படுத்தப்படலாம் , or with the :doc:`miniconda `, " +"`miniforge `_ அல்லது` pixi " +" _ அமைப்புகள். இது சாளரங்கள், மேக் மற்றும் லினக்ச் அமைப்புகளுக்கு " +"கிடைக்கிறது." #: ../source/key_projects.rst:416 msgid "" @@ -9619,6 +13935,10 @@ msgid "" "virtual environment management and deployment of binary extensions and other " "binary code." msgstr "" +"காண்டா என்பது முற்றிலும் தனித்தனி கருவியாகும்: ref: `பிப்`, மெய்நிகர் மற்றும் சக்கரம், " +"ஆனால் அவற்றின் ஒருங்கிணைந்த பல அம்சங்களான தொகுப்பு மேலாண்மை, மெய்நிகர் சுற்றுச்சூழல் " +"மேலாண்மை மற்றும் பைனரி நீட்டிப்புகள் மற்றும் பிற பைனரி குறியீட்டைப் பயன்படுத்துதல் போன்ற பல " +"அம்சங்களை வழங்குகிறது." #: ../source/key_projects.rst:420 msgid "" @@ -9630,6 +13950,12 @@ msgid "" "are a wide variety of packages from the community supported `conda-forge " "project `__" msgstr "" +"காண்டா PYPI இலிருந்து தொகுப்புகளை நிறுவாது - இது கான்டாவிற்காக கட்டப்பட்ட தொகுப்புகளை " +"மட்டுமே நிர்வகிக்க முடியும், இது `anaconda.org ` `anaconda." +"org __ __, சமூகத்திலிருந்து பலவிதமான தொகுப்புகள் உள்ளன` " +"கான்டா-ஃபார்ச் திட்டம் `__" #: ../source/key_projects.rst:426 msgid "" @@ -9640,16 +13966,23 @@ msgid "" "latest/user-guide/tutorials/build-pkgs-skeleton.html>`__: a tool to " "automatically make conda packages from Python packages available on PyPI." msgstr "" +"குறிப்பு: குறிப்பு: `பிஐபி` இல் நிறுவப்படலாம், மேலும் நிர்வகிப்பதற்காக கான்டாவுடன் " +"பக்கவாட்டாக வேலை செய்ய முடியும்: கால:` வழங்கல் <விநியோக தொகுப்பு> `பைபி. `காண்டா " +"எலும்புக்கூடு `__: பைதான் தொகுப்புகளிலிருந்து காண்டா " +"தொகுப்புகளை தானாகவே உருவாக்க ஒரு கருவி கிடைக்கிறது பைபி." #: ../source/key_projects.rst:435 msgid "devpi" -msgstr "" +msgstr "தேவ்பி" #: ../source/key_projects.rst:437 msgid "" "`Docs `__ | :gh:`Issues ` " "| `PyPI `__" msgstr "" +"`டாக்ச் ` __ | : GH: `சிக்கல்கள் ` | `Pypi ____" #: ../source/key_projects.rst:441 msgid "" @@ -9660,16 +13993,24 @@ msgid "" "` with inheritance, syncing between these indexes, index " "replication and fail-over, and package upload." msgstr "" +"பைதானுடன் பேக்கேசிங், சோதனை மற்றும் வெளியீட்டு நடவடிக்கைகளை இயக்க ஒரு நிரப்பு கட்டளை " +"வரி கருவியுடன் டெவிபிஐ ஒரு சக்திவாய்ந்த பைபி-இணக்கமான சேவையகம் மற்றும் பைபி பதிலாள் " +"கேச் ஆகியவற்றைக் கொண்டுள்ளது. DEVPI உலாவக்கூடிய மற்றும் தேடக்கூடிய வலை இடைமுகத்தையும் " +"வழங்குகிறது. DEVPI பிரதிபலிக்கும் PYPI, பல: சொல்: `தொகுப்பு குறியீடுகள் <தொகுப்பு " +"குறியீட்டு>` பரம்பரை, இந்த குறியீடுகளுக்கு இடையில் ஒத்திசைவு, குறியீட்டு பிரதி மற்றும் " +"தோல்வி மற்றும் தொகுப்பு பதிவேற்றம்." #: ../source/key_projects.rst:452 msgid "dumb-pypi" -msgstr "" +msgstr "ஊமை-பைபி" #: ../source/key_projects.rst:454 msgid "" "`GitHub `__ | `PyPI `__" msgstr "" +"`Github ` __ | `Pypi ____" #: ../source/key_projects.rst:457 msgid "" @@ -9678,16 +14019,21 @@ msgid "" "the package index. It supports serving the hash, core-metadata, and yank-" "status." msgstr "" +"டம்ப்-பைபி ஒரு எளிய: சொல்: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` நிலையான கோப்பு " +"தள செனரேட்டர், பின்னர் தொகுப்பு குறியீடாக மாற நிலையான கோப்பு வெப்சர்வர் வழங்க வேண்டும். " +"இது ஆச், கோர்-மெட்டாடேட்டா மற்றும் யாங்க்-ச்டாட்டசுக்கு பணி செய்வதை ஆதரிக்கிறது." #: ../source/key_projects.rst:464 msgid "enscons" -msgstr "" +msgstr "என்கான்ச்" #: ../source/key_projects.rst:466 msgid "" ":gh:`Source ` | :gh:`Issues ` | `PyPI " "`__" msgstr "" +": சி.எச்: `மூல <தோல்ட்/என்ச்கான்ச்>` | : சி.எச்: `சிக்கல்கள் <தோல்ட்/என்ச்கான்ச்/சிக்கல்கள்>` | " +"`Pypi ____" #: ../source/key_projects.rst:470 msgid "" @@ -9700,37 +14046,52 @@ msgid "" "sdists that can be automatically built by :ref:`pip`, and wheels that are " "independent of enscons." msgstr "" +"என்ச்கான்ச் என்பது `ச்கான்ச்`_ ஐ அடிப்படையாகக் கொண்ட பைதான் பேக்கேசிங் கருவியாகும். இது " +"உருவாக்குகிறது: குறிப்பு: சி நீட்டிப்புகளுடன் விநியோகங்கள் உட்பட தொலைதூரங்கள் அல்லது " +"செட்டுப்டூல்களைப் பயன்படுத்தாமல் `பிப்`-இணக்கமான மூல வழங்கல் மற்றும் சக்கரங்கள். என்கான்ச் " +"வேறுபட்ட கட்டிடக்கலை மற்றும் தத்துவத்தைக் கொண்டுள்ளது: ref: `distutils`. பைதான் " +"பேக்கேசிங் அமைப்பில் உருவாக்க அம்சங்களைச் சேர்ப்பதற்குப் பதிலாக, என்கான்ச் ஒரு பொது நோக்கத்தை " +"உருவாக்கும் அமைப்பில் பைதான் பேக்கேசிங் சேர்க்கிறது. தானாகவே கட்டமைக்கக்கூடிய SDIST களை " +"உருவாக்க என்கான்ச் உங்களுக்கு உதவுகிறது: குறிப்பு: `பிப்`, மற்றும் என்ச்கான்களிலிருந்து " +"சுயாதீனமான சக்கரங்கள்." #: ../source/key_projects.rst:485 msgid "Flask-Pypi-Proxy" -msgstr "" +msgstr "பிளாச்க்-பைபி-ப்ராக்சி" #: ../source/key_projects.rst:487 msgid "" "`Docs `__ | :gh:`GitHub ` | `PyPI `__" msgstr "" +"`டாக்ச் __ | :gh:`GitHub ` | `Pypi ____ " +"__ __" #: ../source/key_projects.rst:491 ../source/key_projects.rst:685 #: ../source/key_projects.rst:744 msgid "Not maintained, project archived" -msgstr "" +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 "" +msgstr "ஆச்டிச்ட்" #: ../source/key_projects.rst:501 msgid "" "`Docs `__ | `GitHub `__" msgstr "" +"`டாக்ச் __ | `Github ____ __" #: ../source/key_projects.rst:504 msgid "" @@ -9742,16 +14103,26 @@ msgid "" "distribution stateless, cached, and branchable. It is used by some " "researchers but has been lacking in maintenance since 2016." msgstr "" +"ஆச்டிச்ட் என்பது ரூட் அல்லாத மென்பொருள் விநியோகங்களை உருவாக்குவதற்கான ஒரு நூலகமாகும். " +"ஆச்டிச்ட் \"டெபியன் தொழில்நுட்பம் வேலை செய்யாத நிகழ்வுகளுக்கான தேர்வுக்கான டெபியன்\" ஆக " +"முயற்சிக்கிறார். பைத்தோனிச்டாக்கள் ஆச்டிச்ட்டைப் பற்றி சிந்திக்க சிறந்த வழி மிகவும் " +"சக்திவாய்ந்த கலப்பினமாக இருக்கலாம்: குறிப்பு: `மெய்நிகர்என்வ்` மற்றும்: குறிப்பு:` " +"பில்ட்அவுட்`. இது விஞ்ஞான மென்பொருளை நிறுவுவதில் சிக்கலைத் தீர்ப்பதையும், தொகுப்பு " +"விநியோகத்தை நிலையற்ற, தற்காலிக சேமிப்பு மற்றும் கிளைத்தன்மையடிப்பதையும் நோக்கமாகக் " +"கொண்டுள்ளது. இது சில ஆராய்ச்சியாளர்களால் பயன்படுத்தப்படுகிறது, ஆனால் 2016 முதல் " +"பராமரிப்பு குறைவு." #: ../source/key_projects.rst:516 msgid "Maturin" -msgstr "" +msgstr "Maturin" #: ../source/key_projects.rst:518 msgid "" "`Docs `__ | `GitHub `__" msgstr "" +"`டாக்ச் __ | `Github ` __" #: ../source/key_projects.rst:521 msgid "" @@ -9759,16 +14130,22 @@ msgid "" "It supports building wheels for python 3.7+ on Windows, Linux, macOS and " "FreeBSD, can upload them to PyPI and has basic PyPy and GraalPy support." msgstr "" +"மாதுரின் என்பது துரு நீட்டிப்பு தொகுதிகளுக்கான ஒரு கட்டமைப்பை உருவாக்குகிறது, இது " +"துருவில் எழுதப்பட்டுள்ளது. இது சாளரங்கள், லினக்ச், மேகோச் மற்றும் ஃப்ரீ.பி.எச்.டி " +"ஆகியவற்றில் பைதான் 3.7+ க்கான சக்கரங்களை உருவாக்குகிறது, அவற்றை பைபியில் பதிவேற்றலாம் " +"மற்றும் அடிப்படை பைபி மற்றும் கிரால்பி ஆதரவைக் கொண்டுள்ளது." #: ../source/key_projects.rst:529 msgid "meson-python" -msgstr "" +msgstr "மெசன்-பைதான்" #: ../source/key_projects.rst:531 msgid "" "`Docs `__ | `GitHub `__" msgstr "" +"`டாக்ச் ` __ | `Github " +" ____ __ __" #: ../source/key_projects.rst:534 msgid "" @@ -9777,14 +14154,18 @@ msgid "" "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 "" +msgstr "மல்டிபில்ட்" #: ../source/key_projects.rst:546 msgid "`GitHub `__" -msgstr "" +msgstr "`Ginsub ` __" #: ../source/key_projects.rst:548 msgid "" @@ -9792,42 +14173,54 @@ msgid "" "`wheels ` for Linux, macOS, and (less flexibly) Windows. Also see :" "ref:`cibuildwheel`." msgstr "" +"மல்டிபில்ட் என்பது பைத்தானை உருவாக்குவதற்கும் சோதிப்பதற்கும் தொஒ ச்கிரிப்ட்களின் " +"தொகுப்பாகும்: கால: `சக்கரங்கள் ` லினக்ச், மேகோச் மற்றும் (குறைவான நெகிழ்வான) " +"விண்டோசிற்கான. மேலும் காண்க: குறிப்பு: `cibuildwheel`." #: ../source/key_projects.rst:554 msgid "nginx_pypi_cache" -msgstr "" +msgstr "nginx_pypi_cache" #: ../source/key_projects.rst:556 msgid ":gh:`GitHub `" -msgstr "" +msgstr ":gh:`GitHub `" #: ../source/key_projects.rst:558 msgid "" "nginx_pypi_cache is a :term:`package index ` caching proxy " "using `nginx `_." msgstr "" +"nginx_pypi_cache என்பது ஒரு: சொல்: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` " +"`nginx _ _ ஐப் பயன்படுத்தி ப்ராக்சியை கேச்சிங் செய்யும் " +"ப்ராக்சியை." #: ../source/key_projects.rst:564 msgid "pdm" -msgstr "" +msgstr "பி.டி.எம்" #: ../source/key_projects.rst:566 msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `Github __ | `Pypi ____" #: ../source/key_projects.rst:570 msgid "" "PDM is a modern Python package manager. It uses :term:`pyproject.toml` to " "store project metadata as defined in :pep:`621`." msgstr "" +"பி.டி.எம் ஒரு நவீன பைதான் தொகுப்பு மேலாளர். இது பயன்படுத்துகிறது: கால: `pyproject." +"toml` திட்ட மெட்டாடேட்டாவை வரையறுக்கப்பட்டுள்ளபடி சேமிக்க: PEP:` 621`." #: ../source/key_projects.rst:578 msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `Github __ | `Pypi ____" #: ../source/key_projects.rst:582 msgid "" @@ -9840,10 +14233,18 @@ msgid "" "PEX. PEX files can optionally have tools embedded that support turning the " "PEX file into a standard venv, graphing dependencies and more." msgstr "" +"PEX என்பது உருவாக்குவதற்கான ஒரு கருவியாகும்: கோப்பு: `.பெக்ச்` (பைதான் இயங்கக்கூடிய) " +"கோப்புகள், ஆவி: ref:` Virtualenv`. PEX கோப்புகள்: DOC: `zipapps ` அவை பைதான் பயன்பாடுகளை `` cp`` போன்ற எளிமையாக பயன்படுத்துகின்றன. ஒரு ஒற்றை " +"PEX கோப்பு பல இலக்கு தளங்களை ஆதரிக்கலாம் மற்றும் தரநிலையிலிருந்து உருவாக்கப்படலாம்: " +"ref: `PIP`-தீர்க்கக்கூடிய தேவைகள்,` `PEX3 பூட்டு ...` `அல்லது மற்றொரு PEX உடன் " +"உருவாக்கப்பட்ட ஒரு பூட்டுப் கோப்பை. PEX கோப்புகளை விருப்பமாக உட்பொதித்த கருவிகள் " +"இருக்கலாம், அவை PEX கோப்பை ஒரு நிலையான WENV ஆக மாற்றுவது, வரைபட சார்புகளை " +"வரைபடமாக்குகின்றன." #: ../source/key_projects.rst:594 msgid "pip-tools" -msgstr "" +msgstr "குழாய்-கருவிகள்" #: ../source/key_projects.rst:596 msgid "" @@ -9851,6 +14252,9 @@ msgid "" "github.com/jazzband/pip-tools/>`__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `Github __ | `Pypi ____ __" #: ../source/key_projects.rst:600 msgid "" @@ -9862,31 +14266,44 @@ msgid "" "their program, update all dependencies (a feature :ref:`pip` currently does " "not provide), and create layers of constraints for the program to obey." msgstr "" +"பிப்-டூல்ச் என்பது பைதான் சிச்டம் நிர்வாகிகளுக்கான கருவிகளின் தொகுப்பாகும், குறிப்பாக " +"தங்கள் கட்டடங்களை நிர்ணயிக்க விரும்பும் மேலாளர்களுக்கான வெளியீட்டு மேலாளர்கள், ஆனால் " +"அவர்களின் சார்புகளின் புதிய பதிப்புகளுடன் புதுப்பித்த நிலையில் இருங்கள். பயனர்கள் தங்கள் " +"சார்புகளின் குறிப்பிட்ட வெளியீட்டை ஆச் வழியாக குறிப்பிடலாம், அவற்றின் திட்டத்தின் பிற " +"பகுதிகளில் உள்ள தகவல்களிலிருந்து ஒழுங்காக வடிவமைக்கப்பட்ட தேவைகளின் பட்டியலை வசதியாக " +"உருவாக்கலாம், எல்லா சார்புகளையும் புதுப்பிக்கவும் (ஒரு அம்சம்: `பிப்` தற்போது வழங்கவில்லை) " +"மற்றும் அடுக்குகளை உருவாக்கவும் நிரலுக்குக் கீழ்ப்படியும் தடைகள்." #: ../source/key_projects.rst:612 msgid "pip2pi" -msgstr "" +msgstr "Pip2pi" #: ../source/key_projects.rst:614 msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" +": GH: `github ` | `Pypi " +"____ __" #: ../source/key_projects.rst:617 msgid "" "pip2pi is a :term:`package index ` server where specific " "packages are manually synchronised." msgstr "" +"PIP2PI என்பது ஒரு: கால: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` குறிப்பிட்ட " +"தொகுப்புகள் கைமுறையாக ஒத்திசைக்கப்படும் சேவையகம்." #: ../source/key_projects.rst:623 msgid "piwheels" -msgstr "" +msgstr "பிவீல்ச்" #: ../source/key_projects.rst:625 msgid "" "`Website `__ | :doc:`Docs ` | " "`GitHub `__" msgstr "" +"`வலைத்தளம் ` __ | : டாக்: `டாக்ச் ` | " +"`Github ____ __" #: ../source/key_projects.rst:629 msgid "" @@ -9895,16 +14312,22 @@ msgid "" "that are optimized for installation onto Raspberry Pi computers. Raspberry " "Pi OS pre-configures pip to use piwheels.org as an additional index to PyPI." msgstr "" +"பிவீல்ச் என்பது ஒரு வலைத்தளம், மற்றும் மென்பொருள் அதை அடிப்படையாகக் கொண்டது, இது PYPI " +"இலிருந்து மூலக் குறியீடு விநியோக தொகுப்புகளைப் பெற்று அவற்றை பைனரி சக்கரங்களில் " +"தொகுக்கிறது, அவை ராச்பெர்ரி பை கணினிகளில் நிறுவ உகந்ததாக இருக்கும். ராச்பெர்ரி பை ஓஎச் " +"ப்ரீ-இன்ஃபிகர்ச் பிஐபிஐக்கு கூடுதல் குறியீடாக piwheels.org ஐப் பயன்படுத்த PIP." #: ../source/key_projects.rst:638 msgid "poetry" -msgstr "" +msgstr "பா" #: ../source/key_projects.rst:640 msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `Github ` __ | `Pypi ____ __" #: ../source/key_projects.rst:644 msgid "" @@ -9915,31 +14338,43 @@ msgid "" "speed users' experience of installation and dependency resolution by locally " "caching metadata about dependencies." msgstr "" +"பா என்பது சார்பு நிறுவல் மற்றும் தனிமைப்படுத்தல் மற்றும் பைதான் தொகுப்புகளை " +"கட்டியெழுப்புதல் மற்றும் பேக்கேசிங் ஆகியவற்றைக் கையாள ஒரு கட்டளை-வரி கருவியாகும். இது " +"`` pyproject.toml`` ஐப் பயன்படுத்துகிறது, மேலும், தீர்க்கும் செயல்பாட்டைப் பொறுத்து: " +"ref: `PIP`, அதன் சொந்த சார்பு தீர்வை வழங்குகிறது. சார்புகளைப் பற்றி உள்நாட்டில் கேச்சிங் " +"மேனிலை தரவு மூலம் பயனர்களின் நிறுவல் மற்றும் சார்பு தீர்மானத்தை விரைவுபடுத்த " +"முயற்சிக்கிறது." #: ../source/key_projects.rst:654 msgid "proxpi" -msgstr "" +msgstr "ப்ராக்ச்பி" #: ../source/key_projects.rst:656 msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" +":gh:`GitHub ` | `Pypi " +"____ __" #: ../source/key_projects.rst:659 msgid "" "proxpi is a simple :term:`package index ` which proxies PyPI " "and other indexes with caching." msgstr "" +"ப்ராக்ச்பி ஒரு எளிய: சொல்: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` இது பைபி மற்றும் " +"பிற குறியீடுகளை கேச்சிங் மூலம் பிரதிநிதித்துவப்படுத்துகிறது." #: ../source/key_projects.rst:665 msgid "Pulp-python" -msgstr "" +msgstr "கூழ்-பின்னான்" #: ../source/key_projects.rst:667 msgid "" "`Docs `__ | :gh:`GitHub ` | `PyPI `__" msgstr "" +"`டாக்ச் __ | :gh:`GitHub ` | `Pypi __ __ __" #: ../source/key_projects.rst:671 msgid "" @@ -9947,16 +14382,23 @@ msgid "" "`Pulp `_. Pulp-python supports mirrors backed by " "local or `AWS S3`_, package upload, and proxying to multiple package indexes." msgstr "" +"கூழ்-பைதான் பைதான்: சொல்: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` கூழ் _ _ க்கான சொருகி. புல்ப்-பைதான் உள்ளக அல்லது `AWS S3`_, தொகுப்பு " +"பதிவேற்றம் மற்றும் பல தொகுப்பு குறியீடுகளுக்கு ப்ராக்சிங் ஆகியவற்றின் ஆதரவுடன் கண்ணாடியை " +"ஆதரிக்கிறது." #: ../source/key_projects.rst:679 msgid "PyPI Cloud" -msgstr "" +msgstr "பைபி முகில்" #: ../source/key_projects.rst:681 msgid "" "`Docs `__ | :gh:`GitHub ` | `PyPI `__" msgstr "" +"`டாக்ச் \\ ______________. : \\ ght: `github " +" `Pypi pypicloud/>` " +"____" #: ../source/key_projects.rst:687 msgid "" @@ -9965,32 +14407,42 @@ msgid "" "redirect/cached proxying for PyPI, as well as authentication and " "authorisation." msgstr "" +"PYPI முகில் ஒரு: கால: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` சேவையகம், `AWS " +"S3`_ அல்லது மற்றொரு முகில் ச்டோரேச் பணி அல்லது உள்ளக கோப்புகளால் ஆதரிக்கப்படுகிறது. " +"PYPI முகில் PYPI க்கான வழிமாற்ற/தற்காலிக சேமிப்பு ப்ராக்சை ஆதரிக்கிறது, அத்துடன் ஏற்பு " +"மற்றும் அங்கீகாரத்தை ஆதரிக்கிறது." #: ../source/key_projects.rst:695 msgid "pypiprivate" -msgstr "" +msgstr "pypiprivate" #: ../source/key_projects.rst:697 msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" +": சி.எச்: `கிதுப் <எல்ப்சிஃப்ட்/பைபிப்ரிவேட்>` | `Pypi ____ __" #: ../source/key_projects.rst:700 msgid "" "pypiprivate serves a local (or `AWS S3`_-hosted) directory of packages as a :" "term:`package index `." msgstr "" +"Pypiprivate தொகுப்புகளின் உள்ளக (அல்லது `AWS S3`_- ஓச்ட்) கோப்பகத்தை A: கால:` " +"தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு> `." #: ../source/key_projects.rst:706 msgid "pypiserver" -msgstr "" +msgstr "பைபர்வர்" #: ../source/key_projects.rst:708 msgid "" "`GitHub `__ | `PyPI `__" msgstr "" +"`Github ` __ | `Pypi ____ __" #: ../source/key_projects.rst:711 msgid "" @@ -10002,16 +14454,25 @@ msgid "" "Organizations who use pypiserver usually download packages both from " "pypiserver and from PyPI." msgstr "" +"பைபிசெவர் என்பது ஒரு தனியார் பைதானாக செயல்படும் ஒரு குறைந்தபட்ச பயன்பாடாகும்: கால: " +"`தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` (உள்ளூர் கோப்பகத்திலிருந்து) " +"நிறுவனங்களுக்குள், ஒரு எளிய பநிஇ மற்றும் உலாவி இடைமுகத்தை செயல்படுத்துகிறது. நிலையான " +"பதிவேற்ற கருவிகளைப் பயன்படுத்தி நீங்கள் தனிப்பட்ட தொகுப்புகளை பதிவேற்றலாம், மேலும் பயனர்கள் " +"அவற்றை பதிவிறக்கம் செய்து நிறுவலாம்: Ref: `Pip`, அவற்றை பகிரங்கமாக வெளியிடாமல். " +"பைபிசெவரைப் பயன்படுத்தும் நிறுவனங்கள் பொதுவாக பைபிசெவரிலிருந்து மற்றும் பைபி ஆகிய " +"இரண்டிலிருந்தும் தொகுப்புகளைப் பதிவிறக்குகின்றன." #: ../source/key_projects.rst:722 msgid "PyScaffold" -msgstr "" +msgstr "PysCaplold" #: ../source/key_projects.rst:724 msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் ` __ | `Github ` __ | `Pypi ____ __" #: ../source/key_projects.rst:728 msgid "" @@ -10022,25 +14483,35 @@ msgid "" "developers can start coding right away. PyScaffold can also be used with " "existing projects to make packaging easier." msgstr "" +"பைதான் தொகுப்புகளுக்கான திட்ட செனரேட்டர் பைதான் தொகுப்புகளுக்கான திட்ட செனரேட்டர் ஆகும், " +"இது பைபியில் பகிரத் தயாராக உள்ளது மற்றும் வழியாக நிறுவக்கூடியது: குறிப்பு: `பிப்`. " +"இது ஒரு விளைவாக்கம் சூழலை வழங்குவதற்காக நிறுவப்பட்ட கருவிகளுக்கான விவேகமான " +"இயல்புநிலை உள்ளமைவுகளின் தொகுப்பை நம்பியுள்ளது (போன்றவை: ref: `setuptools`, pytest_ " +"மற்றும் sphinx_), எனவே உருவாக்குபவர்கள் இப்போதே குறியீட்டு முறையைத் தொடங்கலாம். " +"பேக்கேசிங்கை எளிதாக்குவதற்கு பைச்கோகால்ட் ஏற்கனவே உள்ள திட்டங்களுடன் பயன்படுத்தப்படலாம்." #: ../source/key_projects.rst:739 msgid "pywharf" -msgstr "" +msgstr "பைவார்" #: ../source/key_projects.rst:741 msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" +":gh:`GitHub ` | `Pypi " +"____" #: ../source/key_projects.rst:746 msgid "" "pywharf is a :term:`package index ` server, serving files " "locally or from `GitHub `_." msgstr "" +"Pywharf என்பது ஒரு: சொல்: `தொகுப்பு அட்டவணை <தொகுப்பு குறியீட்டு>` சேவையகம், " +"உள்நாட்டில் அல்லது `github _ _." #: ../source/key_projects.rst:752 msgid "scikit-build" -msgstr "" +msgstr "சிக்கிட்-கட்டிடம்" #: ../source/key_projects.rst:754 msgid "" @@ -10048,6 +14519,9 @@ msgid "" "github.com/scikit-build/scikit-build/>`__ | `PyPI `__" msgstr "" +"`டாக்ச் ` __ | `Github " +"` __ | `Pypi ` __" #: ../source/key_projects.rst:758 msgid "" @@ -10059,10 +14533,16 @@ msgid "" "large projects, the user can install `ninja `__ (also available on PyPI)." msgstr "" +"ச்கிகிட்-பில்ட் ஒரு: ref: `செடிப்டூல்ச்` சிபிதானுக்கான ரேப்பர் சி/சி ++/ஃபோர்ட்ரான்/சைடான் " +"நீட்டிப்புகளை உருவாக்குகிறது, இது` cmake __ " +"(பைபி இல் கிடைக்கிறது) கூடுதல் கம்பைலர்கள், உருவாக்க அமைப்புகள், குறுக்கு தொகுப்பு " +"மற்றும் சார்புகளைக் கண்டறிதல் மற்றும் அவற்றுடன் தொடர்புடைய கட்டடத் தேவைகளுக்கு சிறந்த உதவி. " +"பெரிய திட்டங்களின் கட்டமைப்பை விரைவுபடுத்தவும் இணையாகவும், பயனர் `நிஞ்சா __ (பைபியில் கிடைக்கிறது) நிறுவலாம்." #: ../source/key_projects.rst:769 msgid "scikit-build-core" -msgstr "" +msgstr "ச்கிகிட்-பில்ட்-கோர்" #: ../source/key_projects.rst:771 msgid "" @@ -10070,6 +14550,9 @@ msgid "" "`__ | `PyPI `__" msgstr "" +"`டாக்ச் ` __ | `Github " +" __ | `Pypi __ __ __" #: ../source/key_projects.rst:775 msgid "" @@ -10080,16 +14563,24 @@ msgid "" "dependencies and their associated build requirements. CMake/Ninja are " "automatically downloaded from PyPI if not available on the system." msgstr "" +"ச்கிகிட்-பில்ட்-கோர் என்பது CPython C/C ++/Fortran/Cython நீட்டிப்புகளுக்கான கட்டமைப்பை " +"உருவாக்கும் பின்தளத்தில் உள்ளது. இது பயனர்கள் `cmake __ (PYPI இல் கிடைக்கிறது) உடன் நீட்டிப்புகளை எழுத உதவுகிறது, கூடுதல் " +"கம்பைலர்களுக்கு சிறந்த ஆதரவை வழங்க, அமைப்புகள், குறுக்கு தொகுப்பு மற்றும் அவற்றுடன் " +"தொடர்புடைய கட்டமைப்பைக் கண்டறிதல் தேவைகள். கணினியில் கிடைக்காவிட்டால் Cmake/Nygaa " +"தானாகவே PYPI இலிருந்து பதிவிறக்கம் செய்யப்படும்." #: ../source/key_projects.rst:785 msgid "shiv" -msgstr "" +msgstr "சிவ்" #: ../source/key_projects.rst:787 msgid "" "`Docs `__ | `GitHub `__ | `PyPI `__" msgstr "" +"`டாக்ச் __ | `Github ` __ | `Pypi ____ __" #: ../source/key_projects.rst:791 msgid "" @@ -10098,16 +14589,22 @@ msgid "" "Its primary goal is making distributing Python applications and command line " "tools fast & easy." msgstr "" +"SHIV என்பது ஒரு கட்டளை வரி பயன்பாடாகும், இது கோடிட்டுக் காட்டப்பட்டுள்ளபடி முழுமையாக " +"சுயமாக இருக்கும் பைதான் சிபாப்சை உருவாக்குகிறது: PEP: `441`, ஆனால் அவற்றின் அனைத்து " +"சார்புகளும் சேர்க்கப்பட்டுள்ளன. அதன் முதன்மை குறிக்கோள் பைதான் பயன்பாடுகள் மற்றும் கட்டளை வரி " +"கருவிகளை விரைவாகவும் எளிதாகவும் விநியோகிப்பதாகும்." #: ../source/key_projects.rst:799 msgid "simpleindex" -msgstr "" +msgstr "எளிய இந்தெக்ச்" #: ../source/key_projects.rst:801 msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" +": GH: `github ` | `Pypi ____ __" #: ../source/key_projects.rst:804 msgid "" @@ -10116,6 +14613,10 @@ msgid "" "for example `AWS S3`_, with a custom plugin) directories of packages, and " "supports custom plugins." msgstr "" +"சிம்பிள்இண்டெக்ச் ஒரு: சொல்: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` இது முகவரி களை " +"பல தொகுப்பு குறியீடுகளுக்கு (PYPI உட்பட) வழிநடத்துகிறது, உள்ளக (அல்லது கிளவுட்-ஓச்ட், " +"எடுத்துக்காட்டாக `AWS S3`_, தனிப்பயன் சொருகி) தொகுப்புகளின் கோப்பகங்கள் , மற்றும் " +"தனிப்பயன் செருகுநிரல்களை ஆதரிக்கிறது." #: ../source/key_projects.rst:814 msgid "" @@ -10124,6 +14625,10 @@ msgid "" "sc/2015/2807623/12OmNBf94Xq>`__ | `Slides `__" msgstr "" +": டாக்: `டாக்ச் <ச்பேக்: குறியீட்டு>` | `Github ` " +"__ | `Paper `__ | `ச்லைடுகள் ____ __ __" #: ../source/key_projects.rst:819 msgid "" @@ -10135,16 +14640,24 @@ msgid "" "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 "" +msgstr "zest.relases" #: ../source/key_projects.rst:835 msgid "" @@ -10152,6 +14665,9 @@ msgid "" "github.com/zestsoftware/zest.releaser/>`__ | `PyPI `__" msgstr "" +"`டாக்ச் ` __ | `Github " +" __ | `Pypi ____ __" #: ../source/key_projects.rst:839 msgid "" @@ -10160,20 +14676,27 @@ msgid "" "automate incrementing package version numbers, updating changelogs, tagging " "releases in source control, and uploading new packages to PyPI." msgstr "" +"`` zest.Releaser`` என்பது ஒரு பைதான் தொகுப்பு வெளியீட்டு கருவியாகும்: மேலே ஒரு " +"சுருக்க அடுக்கை வழங்கும்: குறிப்பு: `ட்வைன்`. பைதான் உருவாக்குபவர்கள் தொகுப்பு பதிப்பு " +"எண்களை அதிகரிக்க, சேஞ்ச்லாக்சைப் புதுப்பித்தல், மூலக் கட்டுப்பாட்டில் வெளியீடுகளைக் குறித்தல் " +"மற்றும் புதிய தொகுப்புகளை PYPI இல் பதிவேற்றுதல் ஆகியவற்றை தானியக்கமாக்க `` zest." +"releaser`` ஐப் பயன்படுத்துகின்றனர்." #: ../source/key_projects.rst:846 msgid "Standard Library Projects" -msgstr "" +msgstr "நிலையான நூலக திட்டங்கள்" #: ../source/key_projects.rst:851 msgid "ensurepip" -msgstr "" +msgstr "உறுதிப்படுத்தவும்" #: ../source/key_projects.rst:853 msgid "" "`Docs `__ | `Issues " "`__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் " +" ____ __" #: ../source/key_projects.rst:856 msgid "" @@ -10182,16 +14705,22 @@ msgid "" "environment. In most cases, end users won't use this module, but rather it " "will be used during the build of the Python distribution." msgstr "" +"பூட்ச்ட்ராப்பிங்கிற்கு ஆதரவை வழங்கும் பைதான் நிலையான நூலகத்தில் ஒரு தொகுப்பு: குறிப்பு: " +"`பிப்` ஏற்கனவே இருக்கும் பைதான் நிறுவல் அல்லது மெய்நிகர் சூழலில். பெரும்பாலான " +"சந்தர்ப்பங்களில், இறுதி பயனர்கள் இந்த தொகுதியைப் பயன்படுத்த மாட்டார்கள், மாறாக இது பைதான் " +"விநியோகத்தின் போது பயன்படுத்தப்படும்." #: ../source/key_projects.rst:864 msgid "http.server" -msgstr "" +msgstr "http.server" #: ../source/key_projects.rst:866 msgid "" ":doc:`Docs ` | :gh:`Issues `" msgstr "" +": டாக்: `டாக்ச் <பைதான்: நூலகம்/http.server>` | : GH: `சிக்கல்கள் <பைதான்/சிபிதான்/" +"சிக்கல்கள்>`" #: ../source/key_projects.rst:869 msgid "" @@ -10199,16 +14728,21 @@ msgid "" "website, for example as a :term:`package index ` (see :ref:" "`Hosting your Own Simple Repository`)." msgstr "" +"ஒரு வலைத்தளமாக ஒரு கோப்பகத்தை புரவலன் செய்யக்கூடிய ஒரு தொகுப்பு மற்றும் கட்டளை-வரி " +"இடைமுகம், எடுத்துக்காட்டாக ஒரு: கால: `தொகுப்பு குறியீட்டு <தொகுப்பு குறியீட்டு>` " +"(பார்க்க: குறிப்பு: `உங்கள் சொந்த எளிய களஞ்சியத்தை புரவலன் செய்தல்`)." #: ../source/key_projects.rst:876 msgid "venv" -msgstr "" +msgstr "vev" #: ../source/key_projects.rst:878 msgid "" "`Docs `__ | `Issues `__" msgstr "" +"`டாக்ச் __ | `சிக்கல்கள் ____ __" #: ../source/key_projects.rst:881 msgid "" @@ -10217,636 +14751,720 @@ msgid "" "information, see the section on :ref:`Creating and using Virtual " "Environments`." msgstr "" +"பைதான் நிலையான நூலகத்தில் ஒரு தொகுப்பு (பைதான் 3.3 உடன் தொடங்கி) உருவாக்க: கால: " +"`மெய்நிகர் சூழல்கள் <மெய்நிகர் சூழல்>`. மேலும் தகவலுக்கு, பகுதியைப் பார்க்கவும்: ref: " +"`மெய்நிகர் சூழல்களை உருவாக்குதல் மற்றும் பயன்படுத்துதல்`." #: ../source/news.rst:2 msgid "News" -msgstr "" +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 "" +msgstr "செப்டம்பர் 2019" #: ../source/news.rst:10 msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" msgstr "" +"அறிவிலிமையம் செயல்கள் வழியாக தொலைதூரங்களை வெளியிடுவது பற்றிய வழிகாட்டியைச் சேர்த்தது. " +"(: பி.ஆர்: `647`)" #: ../source/news.rst:13 msgid "August 2019" -msgstr "" +msgstr "ஆகச்ட் 2019" #: ../source/news.rst:14 msgid "Updated to use :file:`python3 -m` when installing pipx. (:pr:`631`)" msgstr "" +"பயன்படுத்த புதுப்பிக்கப்பட்டது: கோப்பு: `python3 -m` PIPX ஐ நிறுவும் போது. (: பி.ஆர்: " +"`631`)" #: ../source/news.rst:17 msgid "July 2019" -msgstr "" +msgstr "சூலை 2019" #: ../source/news.rst:18 msgid "Marked all PEP numbers with the :pep: role. (:pr:`629`)" -msgstr "" +msgstr "அனைத்து PEP எண்களையும் குறிக்கப்பட்டுள்ளது: PEP: பங்கு. (: பி.ஆர்: `629`)" #: ../source/news.rst:19 msgid "Upgraded Sphinx version and removed pypa.io intersphinx. (:pr:`625`)" msgstr "" +"மேம்படுத்தப்பட்ட சூரரிமாச்சிலை பதிப்பு மற்றும் அகற்றப்பட்டது pypa.io இன்டர்ச்பிங்க்ச். (: பி." +"ஆர்: `625`)" #: ../source/news.rst:20 msgid "Mentioned :file:`find_namespace_packages`. (:pr:`622`)" -msgstr "" +msgstr "குறிப்பிடப்பட்டுள்ளது: கோப்பு: `find_namespace_packages`. (: பி.ஆர்: `622`)" #: ../source/news.rst:21 msgid "Updated directory layout examples for consistency. (:pr:`611`)" msgstr "" +"நிலைத்தன்மைக்கு புதுப்பிக்கப்பட்ட அடைவு தளவமைப்பு எடுத்துக்காட்டுகள். (: பி.ஆர்: `611`)" #: ../source/news.rst:22 msgid "Updated Bandersnatch link to GitHub. (:pr:`623`)" -msgstr "" +msgstr "கிட்அப்பிற்கு பேண்டர்ச்நாட்ச் இணைப்பு புதுப்பிக்கப்பட்டது. (: பி.ஆர்: `623`)" #: ../source/news.rst:25 msgid "June 2019" -msgstr "" +msgstr "சூன் 2019" #: ../source/news.rst:26 msgid "Fixed some typos. (:pr:`620`)" -msgstr "" +msgstr "சில எழுத்துப்பிழைகள் சரி செய்யப்பட்டன. (: பி.ஆர்: `620`)" #: ../source/news.rst:29 msgid "May 2019" -msgstr "" +msgstr "மே 2019" #: ../source/news.rst:30 msgid "Added :file:`python_requires` usage to packaging tutorial. (:pr:`613`)" msgstr "" +"சேர்க்கப்பட்டது: கோப்பு: பேக்கேசிங் டுடோரியலுக்கான பயன்பாடு `பைதான்_ரொக்வைர்ச். (: பி.ஆர்: " +"`613`)" #: ../source/news.rst:31 msgid "Added a MANIFEST.in guide page. (:pr:`609`)" -msgstr "" +msgstr "ஒரு manifest.in வழிகாட்டி பக்கத்தைச் சேர்த்தது. (: பி.ஆர்: `609`)" #: ../source/news.rst:34 msgid "April 2019" -msgstr "" +msgstr "ஏப்ரல் 2019" #: ../source/news.rst:35 msgid "" "Added a mention for :file:`shiv` in the key projects section. (:pr:`608`)" msgstr "" +"இதற்கான குறிப்பைச் சேர்த்தது: கோப்பு: `சிவ்` முக்கிய திட்டங்கள் பிரிவில். (: பி.ஆர்: " +"`608`)" #: ../source/news.rst:36 msgid "Reduced emphasis on virtualenv. (:pr:`606`)" -msgstr "" +msgstr "மெய்நிகர் ஈன்விக்கு முக்கியத்துவம் குறைக்கப்பட்டுள்ளது. (: பி.ஆர்: `606`)" #: ../source/news.rst:39 msgid "March 2019" -msgstr "" +msgstr "மார்ச் 2019" #: ../source/news.rst:40 msgid "Moved single-sourcing guide version option to Python 3. (:pr:`605`)" -msgstr "" +msgstr "பைதானுக்கு ஒற்றை-மூல வழிகாட்டி பதிப்பு விருப்பத்தை நகர்த்தியது. (: Pr: `605`)" #: ../source/news.rst:41 msgid "Covered RTD details for contributing. (:pr:`600`)" -msgstr "" +msgstr "பங்களிப்பதற்கான ஆர்டிடி விவரங்கள். (: பி.ஆர்: `600`)" #: ../source/news.rst:44 msgid "February 2019" -msgstr "" +msgstr "பிப்ரவரி 2019" #: ../source/news.rst:45 msgid "" "Elaborate upon the differences between the tutorial and the real packaging " "process. (:pr:`602`)" msgstr "" +"டுடோரியலுக்கும் உண்மையான பேக்கேசிங் செயல்முறைக்கும் இடையிலான வேறுபாடுகளை விரிவாகக் " +"கூறுங்கள். (: பி.ஆர்: `602`)" #: ../source/news.rst:46 msgid "Added instructions to install Python CLI applications. (:pr:`594`)" -msgstr "" +msgstr "பைதான் சி.எல்.ஐ பயன்பாடுகளை நிறுவ வழிமுறைகளைச் சேர்த்தது. (: பி.ஆர்: `594`)" #: ../source/news.rst:49 msgid "January 2019" -msgstr "" +msgstr "சனவரி 2019" #: ../source/news.rst:50 msgid "Added :file:`--no-deps` to the packaging tutorial. (:pr:`593`)" -msgstr "" +msgstr "சேர்க்கப்பட்டது: கோப்பு: பேக்கேசிங் டுடோரியலுக்கு `-நோ-டெப்ச்`. (: பி.ஆர்: `593`)" #: ../source/news.rst:51 msgid "Updated Sphinx and Nox. (:pr:`591`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட சூரரிமாச்சிலை மற்றும் நோக்ச். (: பி.ஆர்: `591`)" #: ../source/news.rst:52 msgid "Referenced Twine from Python3. (:pr:`581`)" -msgstr "" +msgstr "பைதான் 3 இலிருந்து குறிப்பிடப்பட்ட கயிறு. (: பி.ஆர்: `581`)" #: ../source/news.rst:55 msgid "December 2018" -msgstr "" +msgstr "டிசம்பர் 2018" #: ../source/news.rst:56 msgid "No programmers in the office!" -msgstr "" +msgstr "அலுவலகத்தில் புரோகிராமர்கள் இல்லை!" #: ../source/news.rst:59 msgid "November 2018" -msgstr "" +msgstr "நவம்பர் 2018" #: ../source/news.rst:60 msgid "Removed landing page link to PyPI migration guide. (:pr:`575`)" msgstr "" +"அகற்றப்பட்ட இறங்கும் பக்க பைபி இடம்பெயர்வு வழிகாட்டிக்கு இணைப்பு. (: பி.ஆர்: `575`)" #: ../source/news.rst:61 msgid "Changed bumpversion to bump2version. (:pr:`572`)" -msgstr "" +msgstr "பம்ப் 2 பவர்சனுக்கு மாற்றப்பட்டது. (: பி.ஆர்: `572`)" #: ../source/news.rst:62 msgid "Added single-sourcing package version example. (:pr:`573`)" -msgstr "" +msgstr "ஒற்றை-சோர்சிங் தொகுப்பு பதிப்பு எடுத்துக்காட்டு சேர்க்கப்பட்டது. (: பி.ஆர்: `573`)" #: ../source/news.rst:63 msgid "Added a guide for creating documentation. (:pr:`568`)" -msgstr "" +msgstr "ஆவணங்களை உருவாக்குவதற்கான வழிகாட்டியைச் சேர்த்தது. (: பி.ஆர்: `568`)" #: ../source/news.rst:66 msgid "October 2018" -msgstr "" +msgstr "அக்டோபர் 2018" #: ../source/news.rst:67 msgid "Updated Nox package name. (:pr:`566`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட NOX தொகுப்பு பெயர். (: பி.ஆர்: `566`)" #: ../source/news.rst:68 msgid "Mentioned Sphinx extensions in guides. (:pr:`562`)" -msgstr "" +msgstr "வழிகாட்டிகளில் சூரரிமாச்சிலை நீட்டிப்புகள் குறிப்பிடப்பட்டுள்ளன. (: பி.ஆர்: `562`)" #: ../source/news.rst:71 msgid "September 2018" -msgstr "" +msgstr "செப்டம்பர் 2018" #: ../source/news.rst:72 msgid "Added a section on checking RST markup. (:pr:`554`)" -msgstr "" +msgstr "RST மார்க்அப்பைச் சரிபார்க்க ஒரு பகுதியைச் சேர்த்தது. (: பி.ஆர்: `554`)" #: ../source/news.rst:73 msgid "Updated user installs page. (:pr:`558`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட பயனர் பக்கத்தை நிறுவுகிறது. (: பி.ஆர்: `558`)" #: ../source/news.rst:74 msgid "Updated Google BigQuery urls. (:pr:`556`)" -msgstr "" +msgstr "Google Bigquery முகவரி கள் புதுப்பிக்கப்பட்டது. (: பி.ஆர்: `556`)" #: ../source/news.rst:75 msgid "Replaced tar command with working command. (:pr:`552`)" -msgstr "" +msgstr "தார் கட்டளையை வேலை கட்டளையுடன் மாற்றியது. (: பி.ஆர்: `552`)" #: ../source/news.rst:76 msgid "" "Changed to double quotes in the pip install SomeProject==1.4. (:pr:`550`)" msgstr "" +"PIP இல் இரட்டை மேற்கோள்களாக மாற்றப்பட்டது சில திட்டங்கள் == 1.4. (: பி.ஆர்: `550`)" #: ../source/news.rst:79 msgid "August 2018" -msgstr "" +msgstr "ஆகச்ட் 2018" #: ../source/news.rst:80 msgid "Removed the recommendation to store passwords in cleartext. (:pr:`546`)" msgstr "" +"கடவுச்சொற்களை ClearText இல் சேமிப்பதற்கான பரிந்துரையை நீக்கியது. (: பி.ஆர்: `546`)" #: ../source/news.rst:81 msgid "" "Moved the Overview to a task based lead in along with the others. (:pr:`540`)" msgstr "" +"கண்ணோட்டத்தை மற்றவர்களுடன் சேர்ந்து ஒரு பணி அடிப்படையிலான முன்னணிக்கு நகர்த்தியது. (: பி." +"ஆர்: `540`)" #: ../source/news.rst:82 msgid "Updated Python version supported by virtualenv. (:pr:`538`)" -msgstr "" +msgstr "மெய்நிகர்இன்வி ஆதரிக்கும் பைதான் பதிப்பு புதுப்பிக்கப்பட்டது. (: பி.ஆர்: `538`)" #: ../source/news.rst:83 msgid "Added outline/rough draft of new Overview page. (:pr:`519`)" msgstr "" +"புதிய கண்ணோட்டம் பக்கத்தின் அவுட்லைன்/தோராயமான வரைவு சேர்க்கப்பட்டது. (: பி.ஆர்: `519`)" #: ../source/news.rst:86 msgid "July 2018" -msgstr "" +msgstr "சூலை 2018" #: ../source/news.rst:88 msgid "Improved binary extension docs. (:pr:`531`)" -msgstr "" +msgstr "மேம்படுத்தப்பட்ட பைனரி நீட்டிப்பு ஆவணங்கள். (: பி.ஆர்: `531`)" #: ../source/news.rst:89 msgid "Added scikit-build to key projects. (:pr:`530`)" -msgstr "" +msgstr "முக்கிய திட்டங்களுக்கு சிக்கிட்-கட்டிடம் சேர்க்கப்பட்டது. (: பி.ஆர்: `530`)" #: ../source/news.rst:92 msgid "June 2018" -msgstr "" +msgstr "சூன் 2018" #: ../source/news.rst:94 msgid "Fixed categories of interop PEP for pypa.io. (:pr:`527`)" -msgstr "" +msgstr "Pypa.io க்கான இன்டர்பிராப் PEP இன் நிலையான வகைகள். (: பி.ஆர்: `527`)" #: ../source/news.rst:95 msgid "Updated Markdown descriptions explanation. (:pr:`522`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட மார்க் பேரூர் விளக்கங்கள் விளக்கம். (: பி.ஆர்: `522`)" #: ../source/news.rst:98 msgid "May 2018" -msgstr "" +msgstr "மே 2018" #: ../source/news.rst:100 msgid "Noted issues with Provides-Dist and Obsoletes-Dist. (:pr:`513`)" msgstr "" +"வழங்கும்-தூர மற்றும் வழக்கற்றுப் போகும்-டிச்ட்டுடன் குறிப்பிடத்தக்க சிக்கல்கள். (: பி.ஆர்: " +"`513`)" #: ../source/news.rst:101 msgid "" "Removed outdated warning about Python version mixing with Pipenv. (:pr:`501`)" msgstr "" +"பைதான் பதிப்பு பைபென்வியுடன் கலப்பதைப் பற்றிய காலாவதியான எச்சரிக்கையை அகற்றியது. (: பி." +"ஆர்: `501`)" #: ../source/news.rst:102 msgid "Simplified packaging tutorial. (:pr:`498`)" -msgstr "" +msgstr "எளிமைப்படுத்தப்பட்ட பேக்கேசிங் பயிற்சி. (: பி.ஆர்: `498`)" #: ../source/news.rst:103 msgid "Updated Windows users instructions for clarity. (:pr:`493`)" -msgstr "" +msgstr "தெளிவுக்கான சாளரங்கள் பயனர்களின் வழிமுறைகளைப் புதுப்பித்தது. (: பி.ஆர்: `493`)" #: ../source/news.rst:104 msgid "Updated the license section description for completeness. (:pr:`492`)" -msgstr "" +msgstr "உரிமத்திற்கு உரிமப் பிரிவு விளக்கத்தை புதுப்பித்தது. (: பி.ஆர்: `492`)" #: ../source/news.rst:105 msgid "Added specification-style document to contributing section. (:pr:`489`)" -msgstr "" +msgstr "பங்களிப்பு பிரிவில் விவரக்குறிப்பு-பாணி ஆவணத்தை சேர்த்தது. (: பி.ஆர்: `489`)" #: ../source/news.rst:106 msgid "Added documentation types to contributing guide. (:pr:`485`)" -msgstr "" +msgstr "பங்களிப்பு வழிகாட்டிக்கு ஆவணப்படுத்தல் வகைகள் சேர்க்கப்பட்டன. (: பி.ஆர்: `485`)" #: ../source/news.rst:109 msgid "April 2018" -msgstr "" +msgstr "ஏப்ரல் 2018" #: ../source/news.rst:111 msgid "Added README guide. (:pr:`461`)" -msgstr "" +msgstr "README வழிகாட்டி சேர்க்கப்பட்டது. (: பி.ஆர்: `461`)" #: ../source/news.rst:112 msgid "Updated instructions and status for PyPI launch. (:pr:`475`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட வழிமுறைகள் மற்றும் PYPI துவக்கத்திற்கான நிலை. (: பி.ஆர்: `475`)" #: ../source/news.rst:113 msgid "Added instructions for Warehouse. (:pr:`471`)" -msgstr "" +msgstr "கிடங்கிற்கான வழிமுறைகள் சேர்க்கப்பட்டன. (: பி.ஆர்: `471`)" #: ../source/news.rst:114 msgid "Removed GPG references from publishing tutorial. (:pr:`466`)" msgstr "" +"வெளியீட்டு டுடோரியலில் இருந்து சிபிசி குறிப்புகள் அகற்றப்பட்டன. (: பி.ஆர்: `466`)" #: ../source/news.rst:115 msgid "Added 'What’s in which Python 3.4–3.6?'. (:pr:`468`)" -msgstr "" +msgstr "'எந்த பைதான் 3.4–3.6?' (: பி.ஆர்: `468`)" #: ../source/news.rst:116 msgid "Added a guide for phasing out Python versions. (:pr:`459`)" -msgstr "" +msgstr "பைதான் பதிப்புகளை கட்டியெழுப்ப ஒரு வழிகாட்டியைச் சேர்த்தது. (: பி.ஆர்: `459`)" #: ../source/news.rst:117 msgid "Made default Description-Content-Type variant GFM. (:pr:`462`)" -msgstr "" +msgstr "இயல்புநிலை விளக்கம்-உள்ளடக்க வகை மாறுபாடு சி.எஃப்.எம். (: பி.ஆர்: `462`)" #: ../source/news.rst:120 msgid "March 2018" -msgstr "" +msgstr "மார்ச் 2018" #: ../source/news.rst:122 msgid "Updated \"installing scientific packages\". (:pr:`455`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்டது \"அறிவியல் தொகுப்புகளை நிறுவுதல்\". (: பி.ஆர்: `455`)" #: ../source/news.rst:123 msgid "" "Added :file:`long_description_content_type` to follow PEP 556. (:pr:`457`)" msgstr "" +"சேர்க்கப்பட்டது: கோப்பு: பெப் 556 ஐப் பின்பற்ற `long_description_content_type`. (: Pr:" +"` 457`)" #: ../source/news.rst:124 msgid "Clarified a long description classifier on pypi.org. (:pr:`456`)" msgstr "" +"Pypi.org இல் ஒரு நீண்ட விளக்க வகைப்படுத்தியை தெளிவுபடுத்தியது. (: பி.ஆர்: `456`)" #: ../source/news.rst:125 msgid "Updated Core Metadata spec to follow PEP 556. (:pr:`412`)" -msgstr "" +msgstr "PEP 556 ஐப் பின்தொடர கோர் மேனிலை தரவு ச்பெக் புதுப்பிக்கப்பட்டது. (: PR: `412`)" #: ../source/news.rst:128 msgid "February 2018" -msgstr "" +msgstr "பிப்ரவரி 2018" #: ../source/news.rst:130 msgid "" "Added python3-venv and python3-pip to Debian installation instructions. (:pr:" "`445`)" msgstr "" +"டெபியன் நிறுவல் வழிமுறைகளில் பைதான் 3-வென்வ் மற்றும் பைதான் 3-பிஐபி சேர்க்கப்பட்டது. (: " +"பி.ஆர்: `445`)" #: ../source/news.rst:131 msgid "Updated PyPI migration info. (:pr:`439`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட PYPI இடம்பெயர்வு செய்தி. (: பி.ஆர்: `439`)" #: ../source/news.rst:132 msgid "" "Added a warning about managing multiple versions with pipenv. (:pr:`430`)" msgstr "" +"பைபன்வி உடன் பல பதிப்புகளை நிர்வகிப்பது பற்றிய எச்சரிக்கையைச் சேர்த்தது. (: பி.ஆர்: " +"`430`)" #: ../source/news.rst:133 msgid "Added example of multiple emails to Core Metadata. (:pr:`429`)" msgstr "" +"கோர் மெட்டாடேட்டாவுக்கு பல மின்னஞ்சல்களின் எடுத்துக்காட்டு சேர்க்கப்பட்டது. (: பி.ஆர்: `429`)" #: ../source/news.rst:134 msgid "Added explanation of \"legacy\" in test.pypi.org/legacy. (:pr:`426`)" msgstr "" +"Test.pypi.org/legacy இல் \"மரபு\" பற்றிய விளக்கம் சேர்க்கப்பட்டது. (: பி.ஆர்: `426`)" #: ../source/news.rst:137 msgid "January 2018" -msgstr "" +msgstr "சனவரி 2018" #: ../source/news.rst:139 msgid "Added a link to PyPI's list of classifiers. (:pr:`425`)" -msgstr "" +msgstr "பைபியின் வகைப்படுத்திகளின் பட்டியலுக்கு இணைப்பைச் சேர்த்தது. (: பி.ஆர்: `425`)" #: ../source/news.rst:140 msgid "Updated README.rst explanation. (:pr:`419`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட README.RST விளக்கம். (: பி.ஆர்: `419`)" #: ../source/news.rst:143 msgid "December 2017" -msgstr "" +msgstr "டிசம்பர் 2017" #: ../source/news.rst:145 msgid "" "Replaced :file:`~` with :file:`$HOME` in guides and tutorials. (:pr:`418`)" msgstr "" +"மாற்றப்பட்டது: கோப்பு: `~` உடன்: கோப்பு: `$ வீடு` வழிகாட்டிகள் மற்றும் பயிற்சிகளில். (: " +"பி.ஆர்: `418`)" #: ../source/news.rst:146 msgid "Noted which fields can be used with environment markers. (:pr:`416`)" msgstr "" +"சுற்றுச்சூழல் குறிப்பான்களுடன் எந்த புலங்களைப் பயன்படுத்தலாம் என்பதைக் குறிப்பிட்டார். (: பி." +"ஆர்: `416`)" #: ../source/news.rst:147 msgid "Updated Requires-Python section. (:pr:`414`)" -msgstr "" +msgstr "புதுப்பிக்கப்பட்ட பைதான் பிரிவு தேவை. (: பி.ஆர்: `414`)" #: ../source/news.rst:148 msgid "Added news page. (:pr:`404`)" -msgstr "" +msgstr "செய்தி பக்கம் சேர்க்கப்பட்டது. (: பி.ஆர்: `404`)" #: ../source/news.rst:151 msgid "November 2017" -msgstr "" +msgstr "நவம்பர் 2017" #: ../source/news.rst:153 msgid "" "Introduced a new dependency management tutorial based on Pipenv. (:pr:`402`)" msgstr "" +"பைபென்வியை அடிப்படையாகக் கொண்ட புதிய சார்பு மேலாண்மை டுடோரியலை அறிமுகப்படுத்தியது. " +"(: பி.ஆர்: `402`)" #: ../source/news.rst:154 msgid "" "Updated the *Single Sourcing Package Version* tutorial to reflect pip's " "current strategy. (:pr:`400`)" msgstr "" +"பைப்பின் தற்போதைய மூலோபாயத்தை பிரதிபலிக்க * ஒற்றை மூல தொகுப்பு பதிப்பு * டுடோரியலைப் " +"புதுப்பித்தது. (: பி.ஆர்: `400`)" #: ../source/news.rst:156 msgid "" "Added documentation about the ``py_modules`` argument to ``setup``. (:pr:" "`398`)" msgstr "" +"`` Py_modules`` உரையாடல் பற்றிய ஆவணங்களை `` அமைவு`` சேர்த்தது. (: பி.ஆர்: `398`)" #: ../source/news.rst:157 msgid "Simplified the wording for the :file:`manifest.in` section. (:pr:`395`)" msgstr "" +": கோப்பு: `manifest.in` பிரிவுக்கான சொற்களை எளிமைப்படுத்தியது. (: பி.ஆர்: `395`)" #: ../source/news.rst:160 msgid "October 2017" -msgstr "" +msgstr "அக்டோபர் 2017" #: ../source/news.rst:162 msgid "" "Added a specification for the :file:`entry_points.txt` file. (:pr:`398`)" msgstr "" +"இதற்கு ஒரு விவரக்குறிப்பைச் சேர்த்தது: கோப்பு: `entry_points.txt` கோப்பு. (: பி.ஆர்: " +"`398`)" #: ../source/news.rst:163 msgid "" "Created a new guide for managing packages using ``pip`` and ``virtualenv``. " "(:pr:`385`)" msgstr "" +"`` பிப்`` மற்றும் `` மெய்நிகர்என்.வி`` ஐப் பயன்படுத்தி தொகுப்புகளை நிர்வகிப்பதற்கான புதிய " +"வழிகாட்டியை உருவாக்கியது. (: பி.ஆர்: `385`)" #: ../source/news.rst:164 msgid "Split the specifications page into multiple pages. (:pr:`386`)" -msgstr "" +msgstr "விவரக்குறிப்புகள் பக்கத்தை பல பக்கங்களாக பிரிக்கவும். (: பி.ஆர்: `386`)" #: ../source/news.rst:167 msgid "September 2017" -msgstr "" +msgstr "செப்டம்பர் 2017" #: ../source/news.rst:169 msgid "" "Encouraged using ``readme_renderer`` to validate :file:`README.rst`. (:pr:" "`379`)" msgstr "" +"சரிபார்க்க `` ReadMe_Renderer`` ஐப் பயன்படுத்தி ஊக்குவிக்கப்பட்டது: கோப்பு: `ReadMe." +"rst`. (: பி.ஆர்: `379`)" #: ../source/news.rst:171 msgid "Recommended using the ``--user-base`` option. (:pr:`374`)" msgstr "" +"`` --User-base`` விருப்பத்தைப் பயன்படுத்தி பரிந்துரைக்கப்படுகிறது. (: பி.ஆர்: `374`)" #: ../source/news.rst:174 msgid "August 2017" -msgstr "" +msgstr "ஆகச்ட் 2017" #: ../source/news.rst:176 msgid "" "Added a new, experimental tutorial on installing packages using ``Pipenv``. " "(:pr:`369`)" msgstr "" +"`` பைபென்வ்`` ஐப் பயன்படுத்தி தொகுப்புகளை நிறுவுவதில் புதிய, சோதனை டுடோரியலைச் " +"சேர்த்தது. (: பி.ஆர்: `369`)" #: ../source/news.rst:177 msgid "Added a new guide on how to use ``TestPyPI``. (:pr:`366`)" msgstr "" +"`` TestPypi`` ஐ எவ்வாறு பயன்படுத்துவது என்பதற்கான புதிய வழிகாட்டியைச் சேர்த்தது. (: " +"பி.ஆர்: `366`)" #: ../source/news.rst:178 msgid "Added :file:`pypi.org` as a term. (:pr:`365`)" -msgstr "" +msgstr "சேர்க்கப்பட்டது: கோப்பு: `pypi.org` ஒரு காலமாக. (: பி.ஆர்: `365`)" #: ../source/news.rst:181 msgid "July 2017" -msgstr "" +msgstr "சூலை 2017" #: ../source/news.rst:183 msgid "Added ``flit`` to the key projects list. (:pr:`358`)" -msgstr "" +msgstr "முக்கிய திட்ட பட்டியலில் `` ஃபிளிட்`` சேர்க்கப்பட்டது. (: பி.ஆர்: `358`)" #: ../source/news.rst:184 msgid "Added ``enscons`` to the list of key projects. (:pr:`357`)" -msgstr "" +msgstr "முக்கிய திட்டங்களின் பட்டியலில் `` என்கான்ச்`` சேர்க்கப்பட்டது. (: பி.ஆர்: `357`)" #: ../source/news.rst:185 msgid "" "Updated this guide's ``readme`` with instructions on how to build the guide " "locally. (:pr:`356`)" msgstr "" +"வழிகாட்டியை உள்நாட்டில் எவ்வாறு உருவாக்குவது என்பதற்கான வழிமுறைகளுடன் இந்த வழிகாட்டியின் " +"`` ரீட்மே`` புதுப்பிக்கப்பட்டது. (: பி.ஆர்: `356`)" #: ../source/news.rst:186 msgid "" "Made the new ``TestPyPI`` URL more visible, adding note to homepage about " "pypi.org. (:pr:`354`)" msgstr "" +"புதிய `` டெச்ட்பை`` முகவரி ஐ மேலும் புலம்பும், pypi.org பற்றிய முகப்புப்பக்கத்தில் " +"குறிப்பைச் சேர்த்தது. (: பி.ஆர்: `354`)" #: ../source/news.rst:187 msgid "" "Added a note about the removal of the explicit registration API. (:pr:`347`)" msgstr "" +"வெளிப்படையான பதிவு பநிஇ ஐ அகற்றுவது குறித்த குறிப்பைச் சேர்த்தது. (: பி.ஆர்: `347`)" #: ../source/news.rst:190 msgid "June 2017" -msgstr "" +msgstr "சூன் 2017" #: ../source/news.rst:192 msgid "Added a document on migrating uploads to :file:`PyPI.org`. (:pr:`339`)" msgstr "" +"பதிவேற்றங்களை இடம்பெயர ஒரு ஆவணத்தைச் சேர்த்தது: கோப்பு: `pypi.org`. (: பி.ஆர்: `339`)" #: ../source/news.rst:193 msgid "Added documentation for ``python_requires``. (:pr:`338`)" -msgstr "" +msgstr "`` பைதான்_ரொக்வைர்ச்`` க்கான ஆவணங்களைச் சேர்த்தது. (: பி.ஆர்: `338`)" #: ../source/news.rst:194 msgid "" "Added a note about PyPI migration in the *Tool Recommendations* tutorial. (:" "pr:`335`)" msgstr "" +"* கருவி பரிந்துரைகள் * டுடோரியலில் PYPI இடம்பெயர்வு பற்றிய குறிப்பைச் சேர்த்தது. (: பி." +"ஆர்: `335`)" #: ../source/news.rst:195 msgid "" "Added a note that :file:`manifest.in` does not affect wheels. (:pr:`332`)" msgstr "" +"ஒரு குறிப்பைச் சேர்த்தது: கோப்பு: `manifest.in` சக்கரங்களை பாதிக்காது. (: பி.ஆர்: " +"`332`)" #: ../source/news.rst:196 msgid "Added a license section to the distributing guide. (:pr:`331`)" -msgstr "" +msgstr "விநியோக வழிகாட்டியில் உரிமப் பிரிவைச் சேர்த்தது. (: பி.ஆர்: `331`)" #: ../source/news.rst:197 msgid "Expanded the section on the ``name`` argument. (:pr:`329`)" -msgstr "" +msgstr "`` பெயர்`` வாதத்தில் உள்ள பகுதியை விரிவுபடுத்தியது. (: பி.ஆர்: `329`)" #: ../source/news.rst:198 msgid "Adjusted the landing page. (:pr:`327`, :pr:`326`, :pr:`324`)" -msgstr "" +msgstr "இறங்கும் பக்கத்தை சரிசெய்தது. ." #: ../source/news.rst:199 msgid "Updated to Sphinx 1.6.2. (:pr:`323`)" -msgstr "" +msgstr "சூரரிமாச்சிலை 1.6.2 க்கு புதுப்பிக்கப்பட்டது. (: பி.ஆர்: `323`)" #: ../source/news.rst:200 msgid "Switched to the PyPA theme. (:pr:`305`)" -msgstr "" +msgstr "PYPA கருப்பொருளுக்கு மாறியது. (: பி.ஆர்: `305`)" #: ../source/news.rst:201 msgid "Re-organized the documentation into the new structure. (:pr:`318`)" -msgstr "" +msgstr "புதிய கட்டமைப்பில் ஆவணங்களை மீண்டும் ஒழுங்கமைத்தது. (: பி.ஆர்: `318`)" #: ../source/news.rst:204 msgid "May 2017" -msgstr "" +msgstr "மே 2017" #: ../source/news.rst:206 msgid "" "Added documentation for the ``Description-Content-Type`` field. (:pr:`258`)" -msgstr "" +msgstr "`` விளக்கம்-உள்ளடக்க வகை`` துறைக்கான ஆவணங்கள் சேர்க்கப்பட்டன. (: பி.ஆர்: `258`)" #: ../source/news.rst:207 msgid "Added contributor and style guide. (:pr:`307`)" -msgstr "" +msgstr "கூடுதல் பங்களிப்பாளர் மற்றும் பாணி வழிகாட்டி. (: பி.ஆர்: `307`)" #: ../source/news.rst:208 msgid "" "Documented ``pip`` and ``easy_install``'s differences for per-project " "indexes. (:pr:`233`)" msgstr "" +"ஆவணப்படுத்தப்பட்ட `` பிப்`` மற்றும் `` ஈசி_இன்ச்டால்`` இன் வேறுபாடுகள். (: பி.ஆர்: `233`)" #: ../source/news.rst:211 msgid "April 2017" -msgstr "" +msgstr "ஏப்ரல் 2017" #: ../source/news.rst:213 msgid "Added travis configuration for testing pull requests. (:pr:`300`)" -msgstr "" +msgstr "புல் கோரிக்கைகளை சோதிக்க டிராவிச் உள்ளமைவு சேர்க்கப்பட்டது. (: பி.ஆர்: `300`)" #: ../source/news.rst:214 msgid "" "Mentioned the requirement of the ``wheel`` package for creating wheels (:pr:" "`299`)" msgstr "" +"சக்கரங்களை உருவாக்குவதற்கான `` சக்கரம்`` தொகுப்பின் தேவையைக் குறிப்பிட்டுள்ளார் (: Pr: " +"`299`)" #: ../source/news.rst:215 msgid "" "Removed the ``twine register`` reference in the *Distributing Packages* " "tutorial. (:pr:`271`)" msgstr "" +"* விநியோகிக்கும் தொகுப்புகளில் * டுடோரியலில் `` ட்வைன் பதிவு` `குறிப்பை அகற்றியது. (: " +"பி.ஆர்: `271`)" #: ../source/news.rst:216 msgid "Added a topic on plugin discovery. (:pr:`294`, :pr:`296`)" -msgstr "" +msgstr "சொருகி கண்டுபிடிப்பில் ஒரு தலைப்பைச் சேர்த்தது. (: pr: `294`,: pr:` 296`)" #: ../source/news.rst:217 msgid "Added a topic on namespace packages. (:pr:`290`)" -msgstr "" +msgstr "பெயர்வெளி தொகுப்புகளில் ஒரு தலைப்பைச் சேர்த்தது. (: பி.ஆர்: `290`)" #: ../source/news.rst:218 msgid "" "Added documentation explaining prominently how to install ``pip`` in ``/usr/" "local``. (:pr:`230`)" msgstr "" +"``/Usr/local`` இல் `` பிப்`` ஐ எவ்வாறு நிறுவுவது என்பதை முக்கியமாக விளக்கும் ஆவணங்கள் " +"சேர்க்கப்பட்டன. (: பி.ஆர்: `230`)" #: ../source/news.rst:219 msgid "" "Updated development mode documentation to mention that order of local " "packages matters. (:pr:`208`)" msgstr "" +"புதுப்பிக்கப்பட்ட மேம்பாட்டு முறை ஆவணங்கள் உள்ளக தொகுப்புகளின் வரிசை விசயங்களைக் " +"குறிப்பிட. (: பி.ஆர்: `208`)" #: ../source/news.rst:220 msgid "" "Convert readthedocs link for their ``.org`` -> ``.io`` migration for hosted " "projects (:pr:`239`)" msgstr "" +"புரவலன் செய்யப்பட்ட திட்டங்களுக்கான `` .org`` -> `` .io`` இடம்பெயர்வு (: Pr: `239`) " +"க்கான READTHEDOCS இணைப்பை மாற்றவும்" #: ../source/news.rst:221 msgid "" "Swapped order of :file:`setup.py` arguments for the upload command, as order " "is significant. (:pr:`260`)" msgstr "" +"இடமாற்றம் செய்யப்பட்ட ஆர்டர்: கோப்பு: பதிவேற்ற கட்டளைக்கான `setup.py` வாதங்கள் " +"குறிப்பிடத்தக்கவை. (: பி.ஆர்: `260`)" #: ../source/news.rst:223 msgid "" "Explained how to install from unsupported sources using a helper " "application. (:pr:`289`)" msgstr "" +"உதவி பயன்பாட்டைப் பயன்படுத்தி ஆதரிக்கப்படாத மூலங்களிலிருந்து எவ்வாறு நிறுவுவது என்பதை " +"விளக்கினார். (: பி.ஆர்: `289`)" #: ../source/news.rst:227 msgid "March 2017" -msgstr "" +msgstr "மார்ச் 2017" #: ../source/news.rst:229 msgid "Covered ``manylinux1`` in *Platform Wheels*. (:pr:`283`)" -msgstr "" +msgstr "இயங்குதள சக்கரங்களில் *`` மேனிலினக்ச் 1`` உள்ளடக்கியது. (: பி.ஆர்: `283`)" #: ../source/news.rst:232 msgid "February 2017" -msgstr "" +msgstr "பிப்ரவரி 2017" #: ../source/news.rst:234 msgid "Added :pep:`518`. (:pr:`281`)" -msgstr "" +msgstr "சேர்க்கப்பட்டது: PEP: `518`. (: பி.ஆர்: `281`)" #: ../source/overview.rst:3 msgid "Overview of Python Packaging" -msgstr "" +msgstr "பைதான் பேக்கேசிங்கின் கண்ணோட்டம்" #: ../source/overview.rst:7 msgid "" @@ -10854,6 +15472,10 @@ msgid "" "many ways. You can build web sites or industrial robots or a game for your " "friends to play, and much more, all using the same core technology." msgstr "" +"ஒரு பொது நோக்கம் கொண்ட நிரலாக்க மொழியாக, பைதான் பல வழிகளில் பயன்படுத்த " +"வடிவமைக்கப்பட்டுள்ளது. வலைத்தளங்கள் அல்லது தொழில்துறை ரோபோக்கள் அல்லது உங்கள் நண்பர்கள் " +"விளையாடுவதற்கான ஒரு விளையாட்டை நீங்கள் உருவாக்கலாம், மேலும் பலவற்றை ஒரே முக்கிய " +"தொழில்நுட்பத்தைப் பயன்படுத்தலாம்." #: ../source/overview.rst:12 msgid "" @@ -10863,6 +15485,10 @@ msgid "" "before writing code, but this process does wonders for avoiding future " "headaches." msgstr "" +"பைதானின் நெகிழ்வுத்தன்மை என்னவென்றால், ஒவ்வொரு பைதான் திட்டத்தின் முதல் படி திட்டத்தின் " +"பார்வையாளர்களைப் பற்றியும், திட்டம் இயங்கும் அதனுடன் தொடர்புடைய சூழலைப் பற்றியும் சிந்திக்க " +"வேண்டும். குறியீட்டை எழுதுவதற்கு முன்பு பேக்கேசிங் பற்றி சிந்திப்பது விசித்திரமாகத் " +"தோன்றலாம், ஆனால் இந்த செயல்முறை எதிர்கால தலைவலியைத் தவிர்ப்பதற்கு அதிசயங்களை செய்கிறது." #: ../source/overview.rst:18 msgid "" @@ -10870,16 +15496,21 @@ msgid "" "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 "" +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 "" @@ -10887,17 +15518,24 @@ msgid "" "developers doing software development, operations people in a datacenter, or " "a less software-savvy group?" msgstr "" +"உங்கள் மென்பொருளின் பயனர்கள் யார்? மென்பொருள் மேம்பாடு, டேட்டாசென்டரில் செயல்படும் நபர்கள் " +"அல்லது குறைவான மென்பொருள் ஆர்வமுள்ள குழு ஆகியவற்றைச் செய்யும் பிற டெவலப்பர்களால் உங்கள் " +"மென்பொருள் நிறுவப்படுமா?" #: ../source/overview.rst:32 msgid "" "Is your software intended to run on servers, desktops, mobile clients " "(phones, tablets, etc.), or embedded in dedicated devices?" msgstr "" +"உங்கள் மென்பொருள் சேவையகங்கள், டெச்க்டாப்புகள், மொபைல் கிளையண்டுகள் (தொலைபேசிகள், " +"டேப்லெட்டுகள் போன்றவை) அல்லது அர்ப்பணிப்பு சாதனங்களில் உட்பொதிக்கப்பட்டதா?" #: ../source/overview.rst:34 msgid "" "Is your software installed individually, or in large deployment batches?" msgstr "" +"உங்கள் மென்பொருள் தனித்தனியாக நிறுவப்பட்டுள்ளதா, அல்லது பெரிய வரிசைப்படுத்தல் தொகுதிகளில் " +"உள்ளதா?" #: ../source/overview.rst:36 msgid "" @@ -10907,10 +15545,14 @@ msgid "" "overview will guide you to the packaging technologies best suited to your " "project." msgstr "" +"பேக்கேசிங் என்பது இலக்கு சூழல் மற்றும் வரிசைப்படுத்தல் பட்டறிவு பற்றியது. மேலே உள்ள " +"கேள்விகளுக்கு பல பதில்கள் உள்ளன, மேலும் ஒவ்வொரு சூழ்நிலையும் அதன் சொந்த தீர்வுகளைக் " +"கொண்டுள்ளன. இந்த தகவலுடன், பின்வரும் கண்ணோட்டம் உங்கள் திட்டத்திற்கு மிகவும் பொருத்தமான " +"பேக்கேசிங் தொழில்நுட்பங்களுக்கு உங்களை வழிநடத்தும்." #: ../source/overview.rst:43 msgid "Packaging Python libraries and tools" -msgstr "" +msgstr "பேக்கேசிங் பைதான் நூலகங்கள் மற்றும் கருவிகள்" #: ../source/overview.rst:45 msgid "" @@ -10919,6 +15561,10 @@ msgid "" "code to developers, which you can read about in :doc:`guides/distributing-" "packages-using-setuptools`." msgstr "" +"பைபி, `` setup.py``, மற்றும் `` வீல்`` கோப்புகளைப் பற்றி நீங்கள் கேள்விப்பட்டிருக்கலாம். " +"டெவலப்பர்களுக்கு பைதான் குறியீட்டை விநியோகிக்க பைதானின் சுற்றுச்சூழல் அமைப்பு வழங்கும் சில " +"கருவிகள் இவை: நீங்கள் இதைப் படிக்கலாம்: DOC: `வழிகாட்டிகள்/விநியோகித்தல்-தொகுப்புகள்-" +"பயன்படுத்தும்-செட்டப்டூல்ச்`." #: ../source/overview.rst:50 msgid "" @@ -10927,10 +15573,14 @@ msgid "" "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 "" +msgstr "பைதான் தொகுதிகள்" #: ../source/overview.rst:58 msgid "" @@ -10938,6 +15588,9 @@ msgid "" "redistributed and reused. You will also need to ensure it's written for the " "right version of Python, and only relies on the standard library." msgstr "" +"ஒரு பைதான் கோப்பு, நிலையான நூலகத்தை மட்டுமே நம்பியிருந்தால், மறுபகிர்வு செய்யப்பட்டு " +"மீண்டும் பயன்படுத்தப்படலாம். பைத்தானின் சரியான பதிப்பிற்காக இது எழுதப்பட்டிருப்பதை நீங்கள் " +"உறுதிப்படுத்த வேண்டும், மேலும் நிலையான நூலகத்தை மட்டுமே நம்பியுள்ளது." #: ../source/overview.rst:63 msgid "" @@ -10947,6 +15600,10 @@ msgid "" "as an option, such as :doc:`bottle.py` and :doc:`boltons " "`." msgstr "" +"இணக்கமான பைதான் பதிப்புகள் (மின்னஞ்சல், ச்டேக்கோவர்ஃப்ளோ அல்லது அறிவிலிமையம் சிச்டுகள் " +"போன்றவை) இருவருக்கும் இடையே எளிய ச்கிரிப்ட்கள் மற்றும் துணுக்குகளைப் பகிர்ந்து கொள்ள இது " +"சிறந்தது. இதை ஒரு விருப்பமாக வழங்கும் சில முழு பைதான் நூலகங்களும் கூட உள்ளன, அதாவது: " +"டாக்: `பாட்டில்.பி <பாட்டில்: டுடோரியல்>` மற்றும்: டாக்: `போல்டன்ச் <போல்டன்ச்: கட்டிடக்கலை>`." #: ../source/overview.rst:70 msgid "" @@ -10954,10 +15611,13 @@ msgid "" "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 "" +msgstr "பைதான் மூல வழங்கல்" #: ../source/overview.rst:77 msgid "" @@ -10965,6 +15625,9 @@ msgid "" "a directory structure. Any directory containing Python files can comprise " "an :term:`Import Package`." msgstr "" +"உங்கள் குறியீடு பல பைதான் கோப்புகளைக் கொண்டிருந்தால், அது வழக்கமாக ஒரு அடைவு கட்டமைப்பாக " +"ஒழுங்கமைக்கப்படுகிறது. பைதான் கோப்புகளைக் கொண்ட எந்த கோப்பகமும் ஒரு: கால: `இறக்குமதி " +"தொகுப்பு` ஐக் கொண்டிருக்கலாம்." #: ../source/overview.rst:81 msgid "" @@ -10974,6 +15637,11 @@ msgid "" "to get incomplete transfers, and harder to guarantee code integrity at the " "destination." msgstr "" +"தொகுப்புகள் பல கோப்புகளைக் கொண்டிருப்பதால், அவை விநியோகிக்க கடினமாக உள்ளன. பெரும்பாலான " +"நெறிமுறைகள் ஒரு நேரத்தில் ஒரு கோப்பை மட்டுமே மாற்றுவதை ஆதரிக்கின்றன (கடைசியாக நீங்கள் " +"ஒரு இணைப்பைக் சொடுக்கு செய்து பல கோப்புகளை பதிவிறக்கம் செய்தது எப்போது?). முழுமையற்ற " +"இடமாற்றங்களைப் பெறுவது எளிதானது, மேலும் இலக்கை நோக்கி குறியீடு ஒருமைப்பாட்டை பொறுப்பு " +"செய்வது கடினம்." #: ../source/overview.rst:87 msgid "" @@ -10982,6 +15650,10 @@ msgid "" "use Python's native packaging tools to create a *source* :term:`Distribution " "Package`, or *sdist* for short." msgstr "" +"உங்கள் குறியீட்டில் தூய பைதான் குறியீட்டைத் தவிர வேறு எதுவும் இல்லை, மேலும் உங்கள் " +"வரிசைப்படுத்தல் சூழல் உங்கள் பைத்தானின் பதிப்பை ஆதரிக்கிறது என்பது உங்களுக்குத் தெரியும், " +"பின்னர் நீங்கள் ஒரு *மூலத்தை உருவாக்க பைத்தானின் சொந்த பேக்கேசிங் கருவிகளைப் பயன்படுத்தலாம் " +"*: கால: `விநியோக தொகுப்பு`, அல்லது *SDIST * சுருக்கமாக." #: ../source/overview.rst:92 msgid "" @@ -10990,6 +15662,10 @@ msgid "" "depend on other Python packages, you can go to the :ref:`source-distribution-" "format` specification to learn more." msgstr "" +"பைதானின் * Sdists * ஒன்று அல்லது அதற்கு மேற்பட்ட தொகுப்புகள் அல்லது தொகுதிகள் கொண்ட " +"சுருக்கப்பட்ட காப்பகங்கள் (`.tar.gz`` கோப்புகள்) ஆகும். உங்கள் குறியீடு தூய-பைதான் என்றால், " +"நீங்கள் மற்ற பைதான் தொகுப்புகளை மட்டுமே சார்ந்து இருந்தால், நீங்கள்: ref: `மூல-விநியோக-" +"வடிவ விவரக்குறிப்பு` மேலும் அறியச் செல்லலாம்." #: ../source/overview.rst:97 msgid "" @@ -10999,6 +15675,11 @@ msgid "" "org/project/numpy>`_), you will need to use the format detailed in the next " "section, which also has many advantages for pure-Python libraries." msgstr "" +"நீங்கள் ஏதேனும் பைதான் அல்லாத குறியீடு அல்லது பைதான் அல்லாத தொகுப்புகளை நம்பினால் " +"(`libxml2 ` _ _ lxml `_, அல்லது பிளாச் நூலகங்கள் `numpy ` _), அடுத்த பகுதியில் விவரிக்கப்பட்டுள்ள வடிவமைப்பை நீங்கள் " +"பயன்படுத்த வேண்டும், இது தூய-பைத்தான் நூலகங்களுக்கு பல நன்மைகளையும் கொண்டுள்ளது." #: ../source/overview.rst:104 msgid "" @@ -11008,6 +15689,10 @@ msgid "" "package, and so does `Pillow `_, an " "actively-maintained fork of PIL!" msgstr "" +"பைதான் மற்றும் பைபி ஆகியவை ஒரே தொகுப்பின் வெவ்வேறு செயலாக்கங்களை வழங்கும் பல " +"விநியோகங்களை ஆதரிக்கின்றன. உதாரணமாக, செயல்படாத-பட்-செமினல் `பைல் வழங்கல் ` _ PIL தொகுப்பை வழங்குகிறது, எனவே `தலையணை `_, பில் தீவிரமாக பராமரிக்கப்படும் முட்கரண்டி!" #: ../source/overview.rst:111 msgid "" @@ -11015,10 +15700,13 @@ msgid "" "in replacement for PIL, just by changing your project's ``install_requires`` " "or ``requirements.txt``." msgstr "" +"இந்த பைதான் பேக்கேசிங் சூப்பர் பவர் உங்கள் திட்டத்தின் `` install_requires`` அல்லது `` " +"தேவைகள். Txt`` ஐ மாற்றுவதன் மூலம், PIL க்கு ஒரு டிராப்-இன் மாற்றாக தலையணைக்கு " +"சாத்தியமாக்குகிறது." #: ../source/overview.rst:116 msgid "Python binary distributions" -msgstr "" +msgstr "பைதான் பைனரி விநியோகங்கள்" #: ../source/overview.rst:118 msgid "" @@ -11026,6 +15714,9 @@ msgid "" "the software ecosystem, in particular libraries written in C, C++, Fortran, " "Rust, and other languages." msgstr "" +"சி, சி ++, ஃபோர்டிரான், ரச்ட் மற்றும் பிற மொழிகளில் எழுதப்பட்ட குறிப்பாக நூலகங்களில், " +"மென்பொருள் சுற்றுச்சூழல் அமைப்புடன் ஒருங்கிணைக்கும் திறனில் இருந்து பைத்தானின் நடைமுறை " +"ஆற்றல் அதிகம்." #: ../source/overview.rst:122 msgid "" @@ -11036,6 +15727,12 @@ msgid "" "wheels because installation is always faster, so even pure-Python packages " "work better with wheels." msgstr "" +"இந்த தொகுக்கப்பட்ட மொழிகளில் எழுதப்பட்ட இந்த கூறுகளை உருவாக்க எல்லா டெவலப்பர்களுக்கும் " +"சரியான கருவிகள் அல்லது அனுபவங்கள் இல்லை, எனவே பைதான் உருவாக்கியது: கால: `வீல்`, " +"தொகுக்கப்பட்ட கலைப்பொருட்களுடன் நூலகங்களை அனுப்ப வடிவமைக்கப்பட்ட ஒரு தொகுப்பு வடிவமாகும். " +"உண்மையில், பைத்தானின் தொகுப்பு நிறுவி, `` பிப்``, எப்போதும் சக்கரங்களை விரும்புகிறது, " +"ஏனெனில் நிறுவல் எப்போதும் வேகமாக இருக்கும், எனவே தூய-பைதான் தொகுப்புகள் கூட " +"சக்கரங்களுடன் சிறப்பாக செயல்படுகின்றன." #: ../source/overview.rst:129 msgid "" @@ -11046,16 +15743,25 @@ msgid "" "archives together, *unless* you're creating artifacts for a very specific " "use case where you know the recipient only needs one or the other." msgstr "" +"பொருந்தக்கூடிய மூல விநியோகங்களுடன் வரும்போது பைனரி விநியோகங்கள் சிறந்தவை. ஒவ்வொரு " +"இயக்க முறைமைக்கும் உங்கள் குறியீட்டின் சக்கரங்களை நீங்கள் பதிவேற்றாவிட்டாலும், SDIST ஐப் " +"பதிவேற்றுவதன் மூலம், பிற தளங்களின் பயனர்களை தங்களைத் தாங்களே உருவாக்கிக் கொள்ள " +"உதவுகிறீர்கள். SDIST மற்றும் சக்கர காப்பகங்கள் இரண்டையும் ஒன்றாக வெளியிடுவதற்கான " +"இயல்புநிலை, * இல்லையென்றால் * நீங்கள் ஒரு குறிப்பிட்ட பயன்பாட்டு வழக்குக்கு கலைப்பொருட்களை " +"உருவாக்குகிறீர்கள், அங்கு பெறுநருக்கு ஒன்று அல்லது மற்றொன்று மட்டுமே தேவை என்பதை நீங்கள் " +"அறிவீர்கள்." #: ../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 "" +msgstr "கருவிகள் மற்றும் நூலகங்களுக்கான பைத்தானின் பேக்கேசிங் திறன்களின் சுருக்கம்." #: ../source/overview.rst:145 msgid "" @@ -11063,10 +15769,13 @@ msgid "" "Excerpted from `The Packaging Gradient (2017) `_." msgstr "" +"பைத்தானின் பரிந்துரைக்கப்பட்ட உள்ளமைக்கப்பட்ட நூலகம் மற்றும் கருவி பேக்கேசிங் தொழில்நுட்பங்கள். " +"`தி பேக்கேசிங் சாய்வு (2017) ` _ " +"இலிருந்து எடுக்கப்பட்டது." #: ../source/overview.rst:152 msgid "Packaging Python applications" -msgstr "" +msgstr "பைதான் பயன்பாடுகள் பேக்கேசிங்" #: ../source/overview.rst:154 msgid "" @@ -11075,12 +15784,18 @@ msgid "" "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 "" @@ -11090,12 +15805,19 @@ msgid "" "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 "" @@ -11103,10 +15825,13 @@ msgid "" "to their dependencies on the target environment, so you can choose the right " "one for your project." msgstr "" +"அடுத்த சில பிரிவுகள் இந்த பயன்பாட்டு பேக்கேசிங் விருப்பங்களை இலக்கு சூழலில் அவற்றின் " +"சார்புகளுக்கு ஏற்ப ஒழுங்கமைக்கின்றன, எனவே உங்கள் திட்டத்திற்கான சரியானதை நீங்கள் தேர்வு " +"செய்யலாம்." #: ../source/overview.rst:178 msgid "Depending on a framework" -msgstr "" +msgstr "ஒரு கட்டமைப்பைப் பொறுத்து" #: ../source/overview.rst:180 msgid "" @@ -11116,6 +15841,11 @@ msgid "" "frontends and mobile clients, are complex enough to target that a framework " "becomes more than a convenience." msgstr "" +"வலைத்தள பின்தளத்தில் மற்றும் பிற பிணையம் சேவைகள் போன்ற சில வகையான பைதான் பயன்பாடுகள் " +"அவற்றின் வளர்ச்சி மற்றும் பேக்கேசிங் செயல்படுத்த கட்டமைப்பைக் கொண்டிருக்கும் அளவுக்கு " +"பொதுவானவை. மாறும் வெப் ஃபிரண்டண்ட்ச் மற்றும் மொபைல் கிளையண்டுகள் போன்ற பிற வகையான " +"பயன்பாடுகள், ஒரு கட்டமைப்பை ஒரு வசதியை விட அதிகமாக மாறுகின்றன என்பதை குறிவைக்க " +"போதுமான சிக்கலானவை." #: ../source/overview.rst:186 msgid "" @@ -11125,16 +15855,23 @@ msgid "" "cases, you'll want to defer to your framework's packaging guide for the " "easiest and most reliable production experience." msgstr "" +"இந்த எல்லா சந்தர்ப்பங்களிலும், கட்டமைப்பின் பேக்கேசிங் மற்றும் வரிசைப்படுத்தல் கதையிலிருந்து " +"பின்னோக்கி வேலை செய்வது அர்த்தமுள்ளதாக இருக்கிறது. சில கட்டமைப்புகளில் ஒரு " +"வரிசைப்படுத்தல் அமைப்பு அடங்கும், இது வழிகாட்டியின் மற்ற பகுதிகளில் கோடிட்டுக் காட்டப்பட்ட " +"தொழில்நுட்பங்களை மூடுகிறது. இந்த சந்தர்ப்பங்களில், உங்கள் கட்டமைப்பின் பேக்கேசிங் வழிகாட்டியை " +"எளிதான மற்றும் மிகவும் நம்பகமான விளைவாக்கம் அனுபவத்திற்காக ஒத்திவைக்க விரும்புவீர்கள்." #: ../source/overview.rst:192 msgid "" "If you ever wonder how these platforms and frameworks work under the hood, " "you can always read the sections beyond." msgstr "" +"இந்த தளங்களும் கட்டமைப்புகளும் பேட்டைக்கு அடியில் எவ்வாறு செயல்படுகின்றன என்பதை நீங்கள் " +"எப்போதாவது ஆச்சரியப்படுகிறீர்கள் என்றால், நீங்கள் எப்போதும் அப்பால் உள்ள பிரிவுகளை படிக்கலாம்." #: ../source/overview.rst:196 msgid "Service platforms" -msgstr "" +msgstr "பணி தளங்கள்" #: ../source/overview.rst:198 msgid "" @@ -11145,16 +15882,24 @@ msgid "" "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 "" +msgstr "வலை உலாவிகள் மற்றும் மொபைல் பயன்பாடுகள்" #: ../source/overview.rst:211 msgid "" @@ -11162,12 +15907,17 @@ msgid "" "write a mobile app or web application frontend in Python. While the language " "may be familiar, the packaging and deployment practices are brand new." msgstr "" +"பைத்தானின் நிலையான முன்னேற்றங்கள் அதை புதிய இடங்களுக்கு இட்டுச் செல்கின்றன. இந்த நாட்களில் " +"நீங்கள் பைத்தானில் மொபைல் பயன்பாடு அல்லது வலை பயன்பாட்டு முன்பக்கத்தை எழுதலாம். மொழி " +"தெரிந்திருக்கலாம் என்றாலும், பேக்கேசிங் மற்றும் வரிசைப்படுத்தல் நடைமுறைகள் புத்தம் புதியவை." #: ../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 `_" @@ -11175,11 +15925,11 @@ msgstr "" #: ../source/overview.rst:221 msgid "`Beeware `_" -msgstr "" +msgstr "`Beeware ` _" #: ../source/overview.rst:222 msgid "`Brython `_" -msgstr "" +msgstr "`பிரைதான் ` _" #: ../source/overview.rst:223 msgid "`Flexx `_" @@ -11191,10 +15941,13 @@ msgid "" "about some of the technologies and techniques utilized by the frameworks " "above, continue reading below." msgstr "" +"நீங்கள் ஒரு கட்டமைப்பை அல்லது தளத்தைப் பயன்படுத்துவதில் ஆர்வம் காட்டவில்லை என்றால், அல்லது " +"மேலே உள்ள கட்டமைப்பால் பயன்படுத்தப்படும் சில தொழில்நுட்பங்கள் மற்றும் நுட்பங்களைப் பற்றி " +"ஆச்சரியப்படுகிறீர்கள் என்றால், கீழே படிக்கவும்." #: ../source/overview.rst:230 msgid "Depending on a pre-installed Python" -msgstr "" +msgstr "முன்பே நிறுவப்பட்ட பைத்தானைப் பொறுத்து" #: ../source/overview.rst:232 msgid "" @@ -11204,24 +15957,31 @@ msgid "" "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 "" +msgstr "இந்த மாதிரியை ஆதரிக்கும் தொழில்நுட்பங்கள்:" #: ../source/overview.rst:240 msgid ":gh:`PEX ` (Python EXecutable)" -msgstr "" +msgstr ":gh:`PEX ` (Python EXecutable)" #: ../source/overview.rst:241 msgid "" ":doc:`zipapp ` (does not help manage dependencies, " "requires Python 3.5+)" msgstr "" +":doc:`zipapp ` (does not உதவி manage dependencies, " +"requires பைதான் 3.5+)" #: ../source/overview.rst:242 msgid ":gh:`shiv ` (requires Python 3)" -msgstr "" +msgstr ":gh:`shiv ` (requires பைதான் 3)" #: ../source/overview.rst:244 msgid "" @@ -11229,6 +15989,9 @@ msgid "" "most on the target environment. Of course, this also makes for the smallest " "package, as small as single-digit megabytes, or even kilobytes." msgstr "" +"இங்குள்ள அனைத்து அணுகுமுறைகளிலும், முன்பே நிறுவப்பட்ட பைத்தானைப் பொறுத்து இலக்கு சூழலை " +"மிகவும் நம்பியுள்ளது. நிச்சயமாக, இது ஒற்றை இலக்க மெகாபைட்டுகள் அல்லது கிலோபைட்டுகள் " +"போன்ற சிறிய தொகுப்பையும் உருவாக்குகிறது." #: ../source/overview.rst:249 msgid "" @@ -11236,10 +15999,13 @@ msgid "" "size of our package, so the solutions here are roughly arranged by " "increasing size of output." msgstr "" +"பொதுவாக, இலக்கு அமைப்பின் சார்புநிலையைக் குறைப்பது எங்கள் தொகுப்பின் அளவை " +"அதிகரிக்கிறது, எனவே இங்குள்ள தீர்வுகள் வெளியீட்டின் அளவை அதிகரிப்பதன் மூலம் தோராயமாக " +"ஏற்பாடு செய்யப்படுகின்றன." #: ../source/overview.rst:256 msgid "Depending on a separate software distribution ecosystem" -msgstr "" +msgstr "ஒரு தனி மென்பொருள் விநியோக சுற்றுச்சூழல் அமைப்பைப் பொறுத்து" #: ../source/overview.rst:258 msgid "" @@ -11248,6 +16014,10 @@ msgid "" "\"app stores\", but even those focus on consumer applications and offer " "little for developers." msgstr "" +"மேக் மற்றும் சாளரங்கள் உள்ளிட்ட பல இயக்க முறைமைகள் நீண்ட காலமாக உள்ளமைக்கப்பட்ட தொகுப்பு " +"மேலாண்மை இல்லை. அண்மைக் காலத்தில் தான் இந்த OS கள் \"பயன்பாட்டுக் கடைகள்\" என்று " +"அழைக்கப்படுவதைப் பெற்றன, ஆனால் அவை நுகர்வோர் பயன்பாடுகளில் கவனம் செலுத்துகின்றன, மேலும் " +"டெவலப்பர்களுக்கு சிறிதளவே வழங்குகின்றன." #: ../source/overview.rst:263 msgid "" @@ -11261,16 +16031,25 @@ msgid "" "`_." msgstr "" +"உருவாக்குபவர்கள் நீண்டகாலமாக தீர்வுகளைத் தேடினர், இந்த போராட்டத்தில், `ஓம் ப்ரூ ` _ போன்ற தங்கள் சொந்த தொகுப்பு மேலாண்மை தீர்வுகளுடன் வெளிப்பட்டனர். பைதான் " +"டெவலப்பர்களுக்கு மிகவும் பொருத்தமான மாற்று `அனகோண்டா ` _. அனகோண்டா பைத்தானைச் சுற்றி கட்டப்பட்டுள்ளது " +"மற்றும் கல்வி, பகுப்பாய்வு மற்றும் பிற தரவு சார்ந்த சூழல்களில் பெருகிய முறையில் " +"பொதுவானது, சேவையக சார்ந்த சூழல்களில் கூட அதன் வழியை உருவாக்குகிறது `_" msgstr "" +"`காண்டாவுடன் நூலகங்கள் மற்றும் பயன்பாடுகளை உருவாக்குதல் ` _" #: ../source/overview.rst:276 msgid "" @@ -11278,25 +16057,30 @@ msgid "" "projects/conda-build/en/latest/user-guide/tutorials/build-pkgs-skeleton." "html>`_" 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 "" +msgstr "`Winpython ` _" #: ../source/overview.rst:288 msgid "Bringing your own Python executable" -msgstr "" +msgstr "உங்கள் சொந்த பைதான் இயங்கக்கூடியது" #: ../source/overview.rst:290 msgid "" @@ -11304,6 +16088,9 @@ msgid "" "operating system natively supports one or more formats of programs they can " "natively execute." msgstr "" +"கணக்கிடுவது எங்களுக்குத் தெரியும், இது நிரல்களை இயக்கும் திறனால் வரையறுக்கப்படுகிறது. " +"ஒவ்வொரு இயக்க முறைமையும் அவர்கள் சொந்தமாக செயல்படுத்தக்கூடிய திட்டங்களின் ஒன்று அல்லது " +"அதற்கு மேற்பட்ட வடிவங்களை ஆதரிக்கிறது." #: ../source/overview.rst:294 msgid "" @@ -11311,6 +16098,9 @@ msgid "" "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 "" @@ -11318,53 +16108,63 @@ msgid "" "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 "" +msgstr "பைதான் உறைவிப்பான் தேர்வு:" #: ../source/overview.rst:305 msgid "" "`pyInstaller `_ - Cross-" "platform" msgstr "" +"`pyinstaller ` _ - குறுக்கு -" +"தளம்" #: ../source/overview.rst:306 msgid "" "`cx_Freeze `_ - Cross-platform" msgstr "" +"`cx_freeze ` _ - குறுக்கு -தளம்" #: ../source/overview.rst:307 msgid "" "`constructor `_ - For command-line " "installers" msgstr "" +"கட்டளை -வரி நிறுவிகளுக்கு `கட்டமைப்பாளர் ` " +"_ -" #: ../source/overview.rst:308 msgid "`py2exe `_ - Windows only" -msgstr "" +msgstr "`py2exe ` _ - சாளரங்கள் மட்டும்" #: ../source/overview.rst:309 msgid "`py2app `_ - Mac only" -msgstr "" +msgstr "`py2app ` _ - மேக் மட்டும்" #: ../source/overview.rst:310 msgid "`osnap `_ - Windows and Mac" -msgstr "" +msgstr "`osnap ` _ - சாளரங்கள் மற்றும் மேக்" #: ../source/overview.rst:311 msgid "`pynsist `_ - Windows only" -msgstr "" +msgstr "`pynsist ` _ - சாளரங்கள் மட்டும்" #: ../source/overview.rst:313 msgid "" "Most of the above imply single-user deployments. For multi-component server " "applications, see :gh:`Chef Omnibus `." msgstr "" +"மேலே உள்ள பெரும்பாலானவை ஒற்றை-பயனர் வரிசைப்படுத்தல்களைக் குறிக்கின்றன. பல-கூறு சேவையக " +"பயன்பாடுகளுக்கு, காண்க: GH: `செஃப் ஆம்னிபச் <செஃப்/ஓம்னிபச்#பயனர்-உள்ளடக்கம்-ஓம்னிபச்>`." #: ../source/overview.rst:319 msgid "Bringing your own userspace" -msgstr "" +msgstr "உங்கள் சொந்த பயனர்களைக் கொண்டுவருகிறது" #: ../source/overview.rst:321 msgid "" @@ -11374,38 +16174,45 @@ msgid "" "level virtualization `_, or *containerization*." msgstr "" +"லினக்ச், மேக் ஓஎச் மற்றும் சாளரங்கள் உள்ளிட்ட இயக்க முறைமைகளின் எண்ணிக்கை அதிகரித்து " +"வருகிறது-இலகுரக படங்களாக தொகுக்கப்பட்ட பயன்பாடுகளை இயக்க அமைக்கலாம், ஒப்பீட்டளவில் நவீன " +"ஏற்பாட்டைப் பயன்படுத்தி பெரும்பாலும் `இயக்க-அமைப்பு-நிலை மெய்நிகராக்கம் `_" -msgstr "" +msgstr "`அபிமேச் ` _" #: ../source/overview.rst:335 msgid "`Docker `_" -msgstr "" +msgstr "`டோக்கர் ` _" #: ../source/overview.rst:336 msgid "`Flatpak `_" -msgstr "" +msgstr "`Flatpak _" #: ../source/overview.rst:337 msgid "`Snapcraft `_" -msgstr "" +msgstr "`Snapcract ` _" #: ../source/overview.rst:340 msgid "Bringing your own kernel" -msgstr "" +msgstr "உங்கள் சொந்த கர்னலைக் கொண்டுவருகிறது" #: ../source/overview.rst:342 msgid "" @@ -11414,6 +16221,10 @@ msgid "" "of their own. Running these virtual machines, or VMs, is a mature approach, " "widespread in data center environments." msgstr "" +"பெரும்பாலான இயக்க முறைமைகள் சில வகையான பாரம்பரிய மெய்நிகராக்கத்தை ஆதரிக்கின்றன, " +"இயங்கும் பயன்பாடுகள் அவற்றின் சொந்த முழு இயக்க முறைமையைக் கொண்ட படங்களாக " +"தொகுக்கப்பட்டுள்ளன. இந்த மெய்நிகர் இயந்திரங்கள் அல்லது விஎம்எச் இயக்குவது ஒரு முதிர்ந்த " +"அணுகுமுறையாகும், இது தரவு மைய சூழல்களில் பரவலாக உள்ளது." #: ../source/overview.rst:347 msgid "" @@ -11421,10 +16232,13 @@ msgid "" "centers, though certain complex applications can benefit from this " "packaging. The technologies are Python agnostic, and include:" msgstr "" +"இந்த நுட்பங்கள் பெரும்பாலும் தரவு மையங்களில் பெரிய அளவிலான வரிசைப்படுத்தலுக்காக " +"ஒதுக்கப்பட்டுள்ளன, இருப்பினும் சில சிக்கலான பயன்பாடுகள் இந்த பேக்கேசிங்கிலிருந்து " +"பயனடையக்கூடும். தொழில்நுட்பங்கள் பைதான் அஞ்ஞானவாதிகள், மேலும் பின்வருவன அடங்கும்:" #: ../source/overview.rst:351 msgid "`Vagrant `_" -msgstr "" +msgstr "`Vagrant ` _" #: ../source/overview.rst:352 msgid "" @@ -11432,16 +16246,21 @@ msgid "" "wikipedia.org/wiki/Amazon_Machine_Image>`_, and :doc:`other formats " "`" msgstr "" +"`VHD `_, `AMI `_, and :doc:`other formats " +"<ஓபன்ச்டாக்: பயனர்/வடிவங்கள்> `" #: ../source/overview.rst:353 msgid "" "`OpenStack `_ - A cloud " "management system in Python, with extensive VM support" msgstr "" +"`OpenStack ` _ - பைத்தானில் ஒரு " +"முகில் மேனேச்மென்ட் சிச்டம், விரிவான விஎம் ஆதரவுடன்" #: ../source/overview.rst:356 msgid "Bringing your own hardware" -msgstr "" +msgstr "உங்கள் சொந்த வன்பொருளைக் கொண்டு வருகிறது" #: ../source/overview.rst:358 msgid "" @@ -11449,6 +16268,9 @@ msgid "" "already-installed on some hardware. This way, your software's user would " "require only electricity." msgstr "" +"உங்கள் மென்பொருளை அனுப்புவதற்கான அனைத்தையும் உள்ளடக்கிய வழி, ஏற்கனவே நிறுவப்பட்ட சில " +"வன்பொருள்களில் அனுப்பப்படுவதாகும். இந்த வழியில், உங்கள் மென்பொருளின் பயனருக்கு மின்சாரம் " +"மட்டுமே தேவைப்படும்." #: ../source/overview.rst:362 msgid "" @@ -11456,6 +16278,9 @@ msgid "" "tech-savvy, you can find hardware appliances being used by everyone from the " "most advanced data centers to the youngest children." msgstr "" +"மேலே விவரிக்கப்பட்ட மெய்நிகர் இயந்திரங்கள் முதன்மையாக தொழில்நுட்ப ஆர்வலருக்காக " +"ஒதுக்கப்பட்டிருந்தாலும், மிகவும் மேம்பட்ட தரவு மையங்கள் முதல் இளைய குழந்தைகள் வரை " +"அனைவராலும் பயன்படுத்தப்படுவதை நீங்கள் காணலாம்." #: ../source/overview.rst:366 msgid "" @@ -11464,29 +16289,35 @@ msgid "" "ship it to the datacenter or your users' homes. They plug and play, and you " "can call it a day." msgstr "" +"உங்கள் குறியீட்டை AN: GH: `adafruit `, `மைக்ரோபிதான் " +"` _, அல்லது பைத்தானில் இயங்கும் அதிக சக்திவாய்ந்த வன்பொருள் " +"' வீடுகள். அவை செருகப்பட்டு விளையாடுகின்றன, நீங்கள் அதை ஒரு நாளைக்கு அழைக்கலாம்." #: ../source/overview.rst:375 msgid "A summary of technologies used to package Python applications." -msgstr "" +msgstr "பைதான் பயன்பாடுகளை தொகுக்கப் பயன்படுத்தப்படும் தொழில்நுட்பங்களின் சுருக்கம்." #: ../source/overview.rst:375 msgid "" "The simplified gamut of technologies used to package Python applications." msgstr "" +"பைதான் பயன்பாடுகளை தொகுக்கப் பயன்படுத்தப்படும் தொழில்நுட்பங்களின் எளிமைப்படுத்தப்பட்ட வரம்பு." #: ../source/overview.rst:378 msgid "What about..." -msgstr "" +msgstr "என்ன ..." #: ../source/overview.rst:380 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 msgid "Operating system packages" -msgstr "" +msgstr "இயக்க முறைமை தொகுப்புகள்" #: ../source/overview.rst:386 msgid "" @@ -11500,12 +16331,22 @@ msgid "" "fpm.readthedocs.io/en/latest/cli-reference.html#virtualenv>`_ to generate " "both deb and RPMs from the same source." msgstr "" +"குறிப்பிட்டுள்ளபடி: ref: `மேலே-பிரிக்கப்படாத-சுற்றுச்சூழல் அமைப்பைப் பொறுத்து, சில இயக்க " +"முறைமைகள் தங்கள் சொந்த தொகுப்பு மேலாளர்களைக் கொண்டுள்ளன. நீங்கள் குறிவைக்கும் இயக்க " +"முறைமையைப் பற்றி நீங்கள் மிகவும் உறுதியாக இருந்தால், `டெப் ` _ (டெபியனைப் பொறுத்தவரை, உபுண்டு , முதலியன) அல்லது `ஆர்." +"பி.எம் `_ (Red Hat, " +"Fedora போன்றவற்றுக்கு), மற்றும் அந்த உள்ளமைக்கப்பட்ட தொகுப்பு மேலாளரை நிறுவலை " +"கவனித்துக்கொள்வதற்கும், வரிசைப்படுத்துவதையும் பயன்படுத்தவும். ஒரே மூலத்திலிருந்து DEB " +"மற்றும் RPMS இரண்டையும் உருவாக்க `FPM ` and `osnap `_, both of which wrap virtualenvs in a self-contained way." msgstr "" +". குறிப்பாக பேக்கேசிங் மூலம், மெய்நிகர்இன்வி கள் ஒரு பழமையானதாகப் பயன்படுத்தப்படுகின்றன: " +"டாக்: `டிஎச்ச்டுவல்என்வ் கருவி ` மற்றும் `osnap ` _, இரண்டும் இது மெய்நிகர்என்வ்சை ஒரு தன்னிறைவான முறையில் " +"போர்த்தி விடுகிறது." #: ../source/overview.rst:412 msgid "" @@ -11523,16 +16368,22 @@ msgid "" "from the Internet into a virtualenv, as one might do in a development " "environment. The overview above is full of much better solutions." msgstr "" +"விளைவாக்கம் வரிசைப்படுத்தல்களைப் பொறுத்தவரை, ஒரு மேம்பாட்டு சூழலில் ஒருவர் " +"செய்யக்கூடியபடி, இணையத்திலிருந்து `பைதான் -எம் பிஐபி நிறுவலை` `பைதான் -எம் பிஐபி " +"நிறுவலை ஒரு மெய்நிகர் ஈவுக்குள் இயக்குவதை நம்ப வேண்டாம். மேலே உள்ள கண்ணோட்டம் மிகச் சிறந்த " +"தீர்வுகள் நிறைந்தது." #: ../source/overview.rst:417 msgid "Security" -msgstr "" +msgstr "பாதுகாப்பு" #: ../source/overview.rst:419 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 msgid "" @@ -11544,10 +16395,16 @@ msgid "" "versus dynamic linking `_." msgstr "" +"எடுத்துக்காட்டாக, ஒரு கர்னல் பாதுகாப்பு சிக்கல் வெளிவந்தால், நீங்கள் கொள்கலன்களைப் " +"பயன்படுத்தினால், பயன்பாட்டின் சார்பாக புதிய கட்டிடம் தேவையில்லாமல் புரவலன் அமைப்பின் கர்னலை " +"புதுப்பிக்க முடியும். நீங்கள் விஎம் படங்களை வரிசைப்படுத்தினால், உங்களுக்கு புதிய உருவாக்கம் " +"தேவை. இந்த மாறும் ஒரு விருப்பத்தை மிகவும் பாதுகாப்பாக ஆக்குகிறதா இல்லையா என்பது இன்னும் " +"பழைய விவாதமாக உள்ளது, இது `நிலையான மற்றும் மாறும் இணைக்கும் `_." #: ../source/overview.rst:431 msgid "Wrap up" -msgstr "" +msgstr "மடக்கு" #: ../source/overview.rst:433 msgid "" @@ -11557,16 +16414,23 @@ msgid "" "to realize that the varied landscape is a small price Python programmers pay " "for using one of the most balanced, flexible languages available." msgstr "" +"பைத்தானில் பேக்கேசிங் ஒரு சமதள சவாரி என்ற நற்பெயரைக் கொண்டுள்ளது. இந்த எண்ணம் பெரும்பாலும் " +"பைத்தானின் பல்துறைத்திறனின் துணை தயாரிப்பு ஆகும். ஒவ்வொரு பேக்கேசிங் தீர்வுக்கும் இடையிலான " +"இயற்கை எல்லைகளை நீங்கள் புரிந்துகொண்டவுடன், மாறுபட்ட நிலப்பரப்பு ஒரு சிறிய விலை பைதான் " +"புரோகிராமர்கள் மிகவும் சீரான, நெகிழ்வான மொழிகளில் ஒன்றைப் பயன்படுத்துவதற்கு செலுத்தும் " +"ஒரு சிறிய விலை என்பதை நீங்கள் உணரத் தொடங்குகிறீர்கள்." #: ../source/specifications/binary-distribution-format.rst:7 msgid "Binary distribution format" -msgstr "" +msgstr "பைனரி விநியோக வடிவம்" #: ../source/specifications/binary-distribution-format.rst:9 msgid "" "This page specifies the binary distribution format for Python packages, also " "called the wheel format." msgstr "" +"இந்த பக்கம் பைதான் தொகுப்புகளுக்கான பைனரி விநியோக வடிவமைப்பைக் குறிப்பிடுகிறது, இது " +"சக்கர வடிவம் என்றும் அழைக்கப்படுகிறது." #: ../source/specifications/binary-distribution-format.rst:12 msgid "" @@ -11578,51 +16442,62 @@ msgid "" "tool while preserving enough information to spread its contents out onto " "their final paths at any later time." msgstr "" +"ஒரு சக்கரம் என்பது விசேசமாக வடிவமைக்கப்பட்ட கோப்பு பெயர் மற்றும் `` .Whl`` நீட்டிப்பு " +"கொண்ட ஒரு சிப் வடிவ காப்பகம். ஒரு குறிப்பிட்ட நிறுவல் திட்டத்துடன் PEP 376 இன் படி " +"நிறுவப்படும் என்பதால் இது ஒரு விநியோகத்தைக் கொண்டுள்ளது. ஒரு சிறப்பு நிறுவி " +"பரிந்துரைக்கப்பட்டாலும், நிலையான 'அன்சிப்' கருவியுடன் தளத் தொகுப்புகளைத் திறப்பதன் மூலம் " +"ஒரு சக்கர கோப்பு நிறுவப்படலாம், அதே நேரத்தில் அதன் உள்ளடக்கங்களை எந்த நேரத்திலும் அவற்றின் " +"இறுதி பாதைகளில் பரப்புவதற்கு போதுமான தகவல்களைப் பாதுகாக்கிறது." #: ../source/specifications/binary-distribution-format.rst:22 msgid "Details" -msgstr "" +msgstr "விவரங்கள்" #: ../source/specifications/binary-distribution-format.rst:25 msgid "Installing a wheel 'distribution-1.0-py32-none-any.whl'" -msgstr "" +msgstr "ஒரு சக்கரத்தை நிறுவுதல்" #: ../source/specifications/binary-distribution-format.rst:27 msgid "Wheel installation notionally consists of two phases:" -msgstr "" +msgstr "சக்கர நிறுவல் இரண்டு கட்டங்களைக் கொண்டுள்ளது:" #: ../source/specifications/binary-distribution-format.rst:29 msgid "Unpack." -msgstr "" +msgstr "திறக்க." #: ../source/specifications/binary-distribution-format.rst:31 msgid "Parse ``distribution-1.0.dist-info/WHEEL``." -msgstr "" +msgstr "`` வழங்கல் -1.0.dist-info/wheel``." #: ../source/specifications/binary-distribution-format.rst:32 msgid "" "Check that installer is compatible with Wheel-Version. Warn if minor " "version is greater, abort if major version is greater." msgstr "" +"நிறுவி சக்கர அழுத்தத்துடன் இணக்கமானது என்பதை சரிபார்க்கவும். சிறிய பதிப்பு அதிகமாக " +"இருந்தால் எச்சரிக்கவும், முக்கிய பதிப்பு அதிகமாக இருந்தால் கைவிடவும்." #: ../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 "" +msgstr "பிளாட்ட்லிபில் (தள-பேக்கேச்கள்) காப்பகத்தைத் திறக்கவும்." #: ../source/specifications/binary-distribution-format.rst:38 msgid "Spread." -msgstr "" +msgstr "பரவுதல்." #: ../source/specifications/binary-distribution-format.rst:40 msgid "" "Unpacked archive includes ``distribution-1.0.dist-info/`` and (if there is " "data) ``distribution-1.0.data/``." msgstr "" +"தொகுக்கப்படாத காப்பகத்தில் `` வழங்கல் -1.0.dist-info/`` மற்றும் (தரவு இருந்தால்) `` " +"வழங்கல் -1.0.data/`` ஆகியவை அடங்கும்." #: ../source/specifications/binary-distribution-format.rst:42 msgid "" @@ -11632,34 +16507,43 @@ msgid "" "headers|scripts|data)``. These subdirectories are :ref:`installation paths " "defined by sysconfig `." msgstr "" +"`` வழங்கல் -1.0.data/`` இன் ஒவ்வொரு துணைக்குழுவையும் அதன் இலக்கு பாதையில் நகர்த்தவும். " +"`` வழங்கல் -1.0.data/`` இன் ஒவ்வொரு துணை அடைவுகளும், `` விநியோக -1.0.data/ " +"(PURELIB | PLATLIB | தலைப்புகள் | ச்கிரிப்டுகள் | தரவு) `` போன்ற இலக்கு கோப்பகங்களின் " +"கட்டளைக்கு ஒரு முக்கியமாகும். இந்த துணை அடைவுகள்: குறிப்பு: `சிச்கான்ஃபிக் <பைதான்: " +"நிறுவல்_பாத்ச்> ஆல் வரையறுக்கப்பட்ட நிறுவல் பாதைகள்>`." #: ../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 "" +msgstr "நிறுவப்பட்ட பாதைகளுடன் `` வழங்கல் -1.0.dist-info/பதிவு`` புதுப்பிக்கவும்." #: ../source/specifications/binary-distribution-format.rst:52 msgid "Remove empty ``distribution-1.0.data`` directory." -msgstr "" +msgstr "வெற்று `` வழங்கல் -1.0.data`` கோப்பகத்தை அகற்று." #: ../source/specifications/binary-distribution-format.rst:53 msgid "" "Compile any installed .py to .pyc. (Uninstallers should be smart enough to " "remove .pyc even if it is not mentioned in RECORD.)" msgstr "" +"நிறுவப்பட்ட .py பெறுநர் .pyc க்கு தொகுக்கவும். (நிறுவல் நீக்குபவர்கள் .pyc ஐ அகற்றும் " +"அளவுக்கு புத்திசாலித்தனமாக இருக்க வேண்டும்." #: ../source/specifications/binary-distribution-format.rst:57 msgid "Recommended installer features" -msgstr "" +msgstr "பரிந்துரைக்கப்பட்ட நிறுவி நற்பொருத்தங்கள்" #: ../source/specifications/binary-distribution-format.rst:67 msgid "Rewrite ``#!python``." -msgstr "" +msgstr "``#! பைதான்`` மீண்டும் எழுதவும்." #: ../source/specifications/binary-distribution-format.rst:60 msgid "" @@ -11668,16 +16552,23 @@ msgid "" "python'``, rewrite to point to the correct interpreter. Unix installers may " "need to add the +x bit to these files if the archive was created on Windows." msgstr "" +"சக்கரத்தில், ச்கிரிப்ட்கள் `` {distribution}-{version} .data/ச்கிரிப்டுகள்/`` " +"ஆகியவற்றில் தொகுக்கப்பட்டுள்ளன. `` ச்கிரிப்டுகள்/`` இல் உள்ள ஒரு கோப்பின் முதல் வரி சரியாக " +"`` பி '#! பைதான்'ஆ'` உடன் தொடங்கினால், சரியான மொழிபெயர்ப்பாளரை சுட்டிக்காட்ட மீண்டும் " +"எழுதவும். சாளரங்களில் காப்பகம் உருவாக்கப்பட்டால் யுனிக்ச் நிறுவிகள் இந்த கோப்புகளில் +எக்ச் " +"பிட் சேர்க்க வேண்டியிருக்கலாம்." #: ../source/specifications/binary-distribution-format.rst:66 msgid "" "The ``b'#!pythonw'`` convention is allowed. ``b'#!pythonw'`` indicates a GUI " "script instead of a console script." msgstr "" +"`` B '#! பைதன்வ்'` மண்டலத்தை அனுமதிக்கிறது. `` பி '#! பைதன்வ்'`` ஒரு கன்சோல் " +"ச்கிரிப்ட்டுக்கு பதிலாக ஒரு சி.யு.ஐ ச்கிரிப்டைக் குறிக்கிறது." #: ../source/specifications/binary-distribution-format.rst:72 msgid "Generate script wrappers." -msgstr "" +msgstr "ச்கிரிப்ட் ரேப்பர்களை உருவாக்குங்கள்." #: ../source/specifications/binary-distribution-format.rst:70 msgid "" @@ -11685,14 +16576,16 @@ msgid "" "accompanying .exe wrappers. Windows installers may want to add them during " "install." msgstr "" +"சக்கரத்தில், யூனிக்ச் அமைப்புகளில் தொகுக்கப்பட்ட ச்கிரிப்ட்கள் நிச்சயமாக .exe ரேப்பர்களைக் " +"கொண்டிருக்காது. சாளரங்கள் நிறுவிகள் நிறுவலின் போது அவற்றைச் சேர்க்க விரும்பலாம்." #: ../source/specifications/binary-distribution-format.rst:75 msgid "Recommended archiver features" -msgstr "" +msgstr "பரிந்துரைக்கப்பட்ட காப்பக நற்பொருத்தங்கள்" #: ../source/specifications/binary-distribution-format.rst:82 msgid "Place ``.dist-info`` at the end of the archive." -msgstr "" +msgstr "காப்பகத்தின் முடிவில் `` .dist-info`` ஐ வைக்கவும்." #: ../source/specifications/binary-distribution-format.rst:78 msgid "" @@ -11701,28 +16594,31 @@ msgid "" "including the ability to amend the metadata without rewriting the entire " "archive." msgstr "" +"காப்பகத்தின் முடிவில் `` .டிச்ட்-இன்ஃபோ`` கோப்புகளை உடல் ரீதியாக வைக்க காப்பகர்கள் " +"ஊக்குவிக்கப்படுகிறார்கள். முழு காப்பகத்தையும் மீண்டும் எழுதாமல் மெட்டாடேட்டாவை " +"திருத்துவதற்கான திறன் உள்ளிட்ட சில சுவையான சிப் தந்திரங்களை இது செயல்படுத்துகிறது." #: ../source/specifications/binary-distribution-format.rst:85 msgid "File Format" -msgstr "" +msgstr "கோப்பு வடிவம்" #: ../source/specifications/binary-distribution-format.rst:90 msgid "File name convention" -msgstr "" +msgstr "கோப்பு பெயர் மாநாடு" #: ../source/specifications/binary-distribution-format.rst:92 msgid "" "The wheel filename is ``{distribution}-{version}(-{build tag})?-{python tag}-" "{abi tag}-{platform tag}.whl``." -msgstr "" +msgstr "சக்கர கோப்பு பெயர் `{distribution}-{version} (-{{build tag})?" #: ../source/specifications/binary-distribution-format.rst:96 msgid "distribution" -msgstr "" +msgstr "பரவல்" #: ../source/specifications/binary-distribution-format.rst:96 msgid "Distribution name, e.g. 'django', 'pyramid'." -msgstr "" +msgstr "விநியோக பெயர், எ.கா. 'சாங்கோ', 'பிரமிட்'." #: ../source/specifications/binary-distribution-format.rst:99 msgid "version" @@ -11730,11 +16626,11 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:99 msgid "Distribution version, e.g. 1.0." -msgstr "" +msgstr "விநியோக பதிப்பு, எ.கா. 1.0." #: ../source/specifications/binary-distribution-format.rst:124 msgid "build tag" -msgstr "" +msgstr "குறிச்சொல்லை உருவாக்குங்கள்" #: ../source/specifications/binary-distribution-format.rst:102 msgid "" @@ -11744,6 +16640,12 @@ msgid "" "item tuple with the first item being the initial digits as an ``int``, and " "the second item being the remainder of the tag as a ``str``." msgstr "" +"விருப்ப உருவாக்க எண். ஒரு இலக்கத்துடன் தொடங்க வேண்டும். மற்ற எல்லா விசயங்களிலும் (அதாவது " +"பெயர், பதிப்பு மற்றும் பிற குறிச்சொற்கள்) இரு சக்கர கோப்பு பெயர்கள் ஒரே மாதிரியாக " +"இருந்தால் டை-பிரேக்கராக செயல்படுகிறது. குறிப்பிடப்படாவிட்டால் வெற்று டப்பிள் என " +"வரிசைப்படுத்தவும், இல்லையெனில் இரண்டு-உருப்படி டப்பிள் என வரிசைப்படுத்தவும் முதல் உருப்படி " +"ஆரம்ப இலக்கங்களை `` int`` ஆகவும், இரண்டாவது உருப்படி குறிச்சொல்லின் எஞ்சியதான் `` str`` " +"ஆகவும் இருக்கும்." #: ../source/specifications/binary-distribution-format.rst:109 msgid "" @@ -11751,6 +16653,10 @@ msgid "" "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 "" @@ -11759,6 +16665,10 @@ msgid "" "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 "" @@ -11767,32 +16677,35 @@ msgid "" "distribution. Instead a **new distribution version** should be created for " "such cases." msgstr "" +"இந்த வரம்பு காரணமாக, புதிய விநியோகத்தை உருவாக்கும் போது வெளிப்புறமாக குறிப்பிட " +"வேண்டிய புதிய விநியோகங்கள் ** ** உருவாக்க எண்களைப் பயன்படுத்தக்கூடாது. அதற்கு பதிலாக " +"** புதிய விநியோக பதிப்பு ** இதுபோன்ற நிகழ்வுகளுக்கு உருவாக்கப்பட வேண்டும்." #: ../source/specifications/binary-distribution-format.rst:127 msgid "language implementation and version tag" -msgstr "" +msgstr "மொழி செயல்படுத்தல் மற்றும் பதிப்பு குறிச்சொல்" #: ../source/specifications/binary-distribution-format.rst:127 msgid "E.g. 'py27', 'py2', 'py3'." -msgstr "" +msgstr "எ.கா. 'PY27', 'PY2', 'PY3'." #: ../source/specifications/binary-distribution-format.rst:130 #: ../source/specifications/platform-compatibility-tags.rst:20 msgid "abi tag" -msgstr "" +msgstr "அபி நாள்" #: ../source/specifications/binary-distribution-format.rst:130 msgid "E.g. 'cp33m', 'abi3', 'none'." -msgstr "" +msgstr "எ.கா. 'cp33m', 'abi3', 'எதுவுமில்லை'." #: ../source/specifications/binary-distribution-format.rst:133 #: ../source/specifications/platform-compatibility-tags.rst:23 msgid "platform tag" -msgstr "" +msgstr "இயங்குதள குறிச்சொல்" #: ../source/specifications/binary-distribution-format.rst:133 msgid "E.g. 'linux_x86_64', 'any'." -msgstr "" +msgstr "எ.கா. 'லினக்ச்_எக்ச் 86_64', 'ஏதேனும்'." #: ../source/specifications/binary-distribution-format.rst:135 msgid "" @@ -11801,6 +16714,10 @@ msgid "" "Python 2.7 implementation), with no ABI (pure Python), on any CPU " "architecture." msgstr "" +"எடுத்துக்காட்டாக, `` வழங்கல் -1.0-1-PY27-NONE-Any.Whl`` என்பது 'வழங்கல்' என்று " +"அழைக்கப்படும் ஒரு தொகுப்பின் முதல் கட்டமைப்பாகும், மேலும் இது பைதான் 2.7 (எந்த பைத்தான் " +"2.7 அமலாக்கமும்) உடன் இணக்கமானது, பநிஇ இல்லாமல் (தூய்மையானது பைதான்), எந்த சிபியு " +"கட்டிடக்கலையிலும்." #: ../source/specifications/binary-distribution-format.rst:140 msgid "" @@ -11808,10 +16725,13 @@ msgid "" "\"compatibility tags.\" The compatibility tags express the package's basic " "interpreter requirements and are detailed in PEP 425." msgstr "" +"நீட்டிப்புக்கு முன் கோப்பு பெயரின் கடைசி மூன்று கூறுகள் \"பொருந்தக்கூடிய குறிச்சொற்கள்\" " +"என்று அழைக்கப்படுகின்றன. பொருந்தக்கூடிய குறிச்சொற்கள் தொகுப்பின் அடிப்படை மொழிபெயர்ப்பாளர் " +"தேவைகளை வெளிப்படுத்துகின்றன, மேலும் அவை PEP 425 இல் விவரிக்கப்பட்டுள்ளன." #: ../source/specifications/binary-distribution-format.rst:145 msgid "Escaping and Unicode" -msgstr "" +msgstr "தப்பித்தல் மற்றும் யூனிகோட்" #: ../source/specifications/binary-distribution-format.rst:147 msgid "" @@ -11819,6 +16739,8 @@ msgid "" "MINUS), this character cannot appear within any component. This is handled " "as follows:" msgstr "" +"கோப்பு பெயரின் கூறுகள் ஒரு கோடு (`` -``, ஐபன்-மைனச்) மூலம் பிரிக்கப்படுவதால், இந்த " +"பாத்திரம் எந்த கூறுகளிலும் தோன்ற முடியாது. இது பின்வருமாறு கையாளப்படுகிறது:" #: ../source/specifications/binary-distribution-format.rst:150 msgid "" @@ -11830,6 +16752,10 @@ msgid "" "prepared to accept ``.`` (FULL STOP) and uppercase letters, however, as " "these were allowed by an earlier version of this specification." msgstr "" +"விநியோக பெயர்களில், `` -_. . இது வழக்கமானதாகும்: ref: `பெயர் இயல்பாக்கம் <பெயர்-" +"இயல்பாக்கம்>` தொடர்ந்து `` -`` ஐ `` _`` உடன் மாற்றுவதன் மூலம். `` .` (முழு நிறுத்தம்) " +"மற்றும் பெரிய எழுத்துக்களை ஏற்றுக்கொள்ள கருவிகள் எடுக்கும் சக்கரங்கள் தயாராக இருக்க " +"வேண்டும், இருப்பினும், இந்த விவரக்குறிப்பின் முந்தைய பதிப்பால் இவை அனுமதிக்கப்பட்டன." #: ../source/specifications/binary-distribution-format.rst:157 msgid "" @@ -11837,12 +16763,14 @@ msgid "" "specifier specification `. Normalised version numbers " "cannot contain ``-``." msgstr "" +"பதிப்பு எண்களை இயல்பாக்க வேண்டும்: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-" +"விவரக்குறிப்புகள்>`. இயல்பாக்கப்பட்ட பதிப்பு எண்களில் `` -`` இருக்க முடியாது." #: ../source/specifications/binary-distribution-format.rst:159 msgid "" "The remaining components may not contain ``-`` characters, so no escaping is " "necessary." -msgstr "" +msgstr "மீதமுள்ள கூறுகளில் `` -`` எழுத்துக்கள் இல்லை, எனவே தப்பிப்பது தேவையில்லை." #: ../source/specifications/binary-distribution-format.rst:162 msgid "" @@ -11850,6 +16778,8 @@ msgid "" "contain ``-``, as the resulting file may not be processed correctly if they " "do." msgstr "" +"சக்கரங்களை உருவாக்கும் கருவிகள் கோப்பு பெயர் கூறுகளில் `` -`` ஐக் கொண்டிருக்கவில்லை " +"என்பதை சரிபார்க்க வேண்டும், ஏனெனில் அவை செய்தால் அவை சரியாக செயலாக்கப்படாது." #: ../source/specifications/binary-distribution-format.rst:165 msgid "" @@ -11857,6 +16787,8 @@ msgid "" "updated to support non-ASCII filenames, but they are supported in this " "specification." msgstr "" +"காப்பக கோப்பு பெயர் யூனிகோட். ASCII அல்லாத கோப்பு பெயர்களை ஆதரிப்பதற்காக கருவிகள் " +"புதுப்பிக்கப்படுவதற்கு சில காலம் ஆகும், ஆனால் அவை இந்த விவரக்குறிப்பில் ஆதரிக்கப்படுகின்றன." #: ../source/specifications/binary-distribution-format.rst:169 msgid "" @@ -11864,132 +16796,183 @@ msgid "" "clients in common use do not properly display UTF-8 filenames, the encoding " "is supported by both the ZIP specification and Python's ``zipfile``." msgstr "" +"கோப்பு பெயர்கள் * உள்ளே * காப்பகம் யுடிஎஃப் -8 என குறியாக்கம் செய்யப்படுகிறது. பொதுவான " +"பயன்பாட்டில் உள்ள சில சிப் வாடிக்கையாளர்கள் யுடிஎஃப் -8 கோப்பு பெயர்களைக் சரியாகக் " +"காட்டவில்லை என்றாலும், குறியாக்கம் சிப் விவரக்குறிப்பு மற்றும் பைதானின் `` சிப்ஃபைல்`` " +"ஆகிய இரண்டாலும் ஆதரிக்கப்படுகிறது." #: ../source/specifications/binary-distribution-format.rst:175 msgid "File contents" -msgstr "" +msgstr "கோப்பு உள்ளடக்கங்கள்" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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 "" +"ஒரு சக்கர கோப்பின் உள்ளடக்கங்கள், அங்கு {distribution} மாற்றப்படுகிறது: ref: " +"`இயல்பாக்கப்பட்ட பெயர் <பெயர்-இயல்பாக்கம்>` தொகுப்பின், எ.கா. `` பீக்லெவோட்`` மற்றும் " +"{version} அதன் மூலம் மாற்றப்படுகிறது: குறிப்பு: `இயல்பாக்கப்பட்ட பதிப்பு <பதிப்பு-" +"விவரக்குறிப்புகள்-இயல்பாக்கம்>`, எ.கா. `` 1.0.0``, (கோடு/`` -`` எழுத்துக்கள் " +"அடிக்கோடிட்டுக் காட்டுகின்றன/`` _`` இரு துறைகளிலும் எழுத்துக்கள்) பின்வருமாறு:" -#: ../source/specifications/binary-distribution-format.rst:181 +#: ../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 "" +"``/``, காப்பகத்தின் வேர், `` வீல்`` இல் குறிப்பிடப்பட்டுள்ளபடி `` பியூரிலிப்` அல்லது `` " +"பிளாட்ட்லிப்`` இல் நிறுவப்பட வேண்டிய அனைத்து கோப்புகளையும் கொண்டுள்ளது. `` purelib`` " +"மற்றும் `` பிளாட்ட்லிப்`` ஆகியவை வழக்கமாக `` தள-பேக்கேச்கள்`." -#: ../source/specifications/binary-distribution-format.rst:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." +msgstr "`{distribution}-{version} .dist-info/` `மெட்டாடேட்டாவைக் கொண்டுள்ளது." + +#: ../source/specifications/binary-distribution-format.rst:188 +msgid "" +":file:`{distribution}-{version}.dist-info/licenses/` contains license files." msgstr "" +": கோப்பு: `{distribution}-{version} .dist-info/உரிமங்கள்/` உரிமக் கோப்புகளைக் " +"கொண்டுள்ளது." -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../source/specifications/binary-distribution-format.rst:189 msgid "" "``{distribution}-{version}.data/`` contains one subdirectory for each non-" "empty install scheme key not already covered, where the subdirectory name is " "an index into a dictionary of install paths (e.g. ``data``, ``scripts``, " "``headers``, ``purelib``, ``platlib``)." msgstr "" +"`{distribution}-{version} .data/` `என்பது காலியாக இல்லாத நிறுவல் அல்லாத திட்ட " +"விசைக்கு ஒரு துணை அடைவைக் கொண்டுள்ளது, அங்கு துணை அடைவு பெயர் நிறுவல் பாதைகளின் " +"அகராதியாக ஒரு குறியீடாகும் (எ.கா.` தரவு`, `` ச்கிரிப்ட்கள்``, `` தலைப்புகள்``, `` " +"பியூரிலிப்``, `` பிளாட்ட்லிப்``)." -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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:193 +#: ../source/specifications/binary-distribution-format.rst:197 msgid "" "``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " "greater format metadata." msgstr "" +"``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 or " +"greater வடிவம் metadata." -#: ../source/specifications/binary-distribution-format.rst:195 +#: ../source/specifications/binary-distribution-format.rst:199 msgid "" "``{distribution}-{version}.dist-info/WHEEL`` is metadata about the archive " "itself in the same basic key: value format::" msgstr "" +"`` {distribution}-{version} .dist-info/wheel`` என்பது ஒரே அடிப்படை விசையில் " +"காப்பகத்தைப் பற்றிய மெட்டாடேட்டா: மதிப்பு வடிவம் ::" -#: ../source/specifications/binary-distribution-format.rst:205 +#: ../source/specifications/binary-distribution-format.rst:209 msgid "``Wheel-Version`` is the version number of the Wheel specification." -msgstr "" +msgstr "`` சக்கர-பதிப்பு`` என்பது சக்கர விவரக்குறிப்பின் பதிப்பு எண்." -#: ../source/specifications/binary-distribution-format.rst:206 +#: ../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:208 +#: ../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:211 +#: ../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 "" +"`` குறிச்சொல்`` என்பது சக்கரத்தின் விரிவாக்கப்பட்ட பொருந்தக்கூடிய குறிச்சொற்கள்; " +"எடுத்துக்காட்டில் கோப்பு பெயரில் `` py2.py3-none-any-`` இருக்கும்." -#: ../source/specifications/binary-distribution-format.rst:213 +#: ../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:214 +#: ../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:217 +#: ../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 "" +"சக்கரம், பைத்தானின் பல பதிப்புகளில் வேலை செய்ய நோக்கம் கொண்ட ஒரு நிறுவல் வடிவமாக " +"இருப்பதால், பொதுவாக .pyc கோப்புகளை சேர்க்காது." -#: ../source/specifications/binary-distribution-format.rst:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." -msgstr "" +msgstr "சக்கரத்தில் setup.py அல்லது setup.cfg இல்லை." -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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:228 +#: ../source/specifications/binary-distribution-format.rst:232 #: ../source/specifications/recording-installed-packages.rst:23 msgid "The .dist-info directory" -msgstr "" +msgstr ".டிச்ட்-இன்ஃபோ அடைவு" -#: ../source/specifications/binary-distribution-format.rst:230 +#: ../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:232 +#: ../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 "" +"மேனிலை தரவு என்பது தொகுப்பு மேனிலை தரவு ஆகும், இது SDISTS இன் வேரில் காணப்படும் பி." +"கே.சி-இன்ஃபோ போன்ற வடிவமாகும்." -#: ../source/specifications/binary-distribution-format.rst:234 +#: ../source/specifications/binary-distribution-format.rst:238 msgid "WHEEL is the wheel metadata specific to a build of the package." -msgstr "" +msgstr "சக்கரம் என்பது தொகுப்பின் கட்டமைப்பிற்கு குறிப்பிட்ட சக்கர மேனிலை தரவு ஆகும்." -#: ../source/specifications/binary-distribution-format.rst:235 +#: ../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 " @@ -11997,53 +16980,90 @@ msgid "" "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 "" +"பதிவு என்பது சக்கரத்தில் உள்ள அனைத்து கோப்புகளையும் அவற்றின் பாதுகாப்பான ஆச்களின் " +"(கிட்டத்தட்ட) பட்டியல். PEP 376 ஐப் போலன்றி, பதிவைத் தவிர ஒவ்வொரு கோப்பும், தன்னைத்தானே " +"ஒரு ஆசைக் கொண்டிருக்க முடியாது, அதன் ஆசைக் கொண்டிருக்க வேண்டும். ஆச் வழிமுறை SHA256 " +"அல்லது அதற்கு மேற்பட்டதாக இருக்க வேண்டும்; குறிப்பாக, MD5 மற்றும் SHA1 அனுமதிக்கப்படாது, " +"ஏனெனில் கையொப்பமிடப்பட்ட சக்கர கோப்புகள் காப்பகத்தின் ஒருமைப்பாட்டை சரிபார்க்க பதிவில் உள்ள " +"வலுவான ஆச்களை நம்பியுள்ளன." -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../source/specifications/binary-distribution-format.rst:245 msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." -msgstr "" +msgstr "PEP 376 இன் நிறுவி மற்றும் கோரப்பட்டவை காப்பகத்தில் சேர்க்கப்படவில்லை." -#: ../source/specifications/binary-distribution-format.rst:242 +#: ../source/specifications/binary-distribution-format.rst:246 msgid "" "RECORD.jws is used for digital signatures. It is not mentioned in RECORD." msgstr "" +"Record.JWS டிசிட்டல் கையொப்பங்களுக்கு பயன்படுத்தப்படுகிறது. இது பதிவில் " +"குறிப்பிடப்படவில்லை." -#: ../source/specifications/binary-distribution-format.rst:244 +#: ../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 "" +"S/MIME கையொப்பங்களை தங்கள் சக்கரக் கோப்புகளைப் பாதுகாக்க விரும்பும் எவருக்கும் மரியாதையாக " +"Record.P7S அனுமதிக்கப்படுகிறது. இது பதிவில் குறிப்பிடப்படவில்லை." -#: ../source/specifications/binary-distribution-format.rst:247 +#: ../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:254 -msgid "The .data directory" +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "தி: கோப்பு: `.டிச்ட்-இன்ஃபோ/உரிமங்கள்/` அடைவு" + +#: ../source/specifications/binary-distribution-format.rst:260 +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 "" +"மேனிலை தரவு பதிப்பு 2.4 அல்லது அதற்கு மேற்பட்டது மற்றும் ஒன்று அல்லது அதற்கு மேற்பட்ட `` " +"உரிம-கோப்பு`` புலங்கள் குறிப்பிடப்பட்டால்,: கோப்பு: `.டிச்ட்-இன்ஃபோ/` கோப்பகத்தில் ஒரு: " +"கோப்பு: `உரிமங்கள்/` துணை அடைவு இருக்க வேண்டும், அதில் இருக்க வேண்டும் `` உரிமம்-" +"கோப்பு`` புலங்களில் பட்டியலிடப்பட்டுள்ள கோப்புகள்: கோப்பு: `மெட்டாடேட்டா` அந்தந்த பாதைகளில் " +"கோப்பு : கோப்பு: `உரிமங்கள்/` அடைவு." + +#: ../source/specifications/binary-distribution-format.rst:268 +msgid "The .data directory" +msgstr ".டேட்டா அடைவு" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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 "" +"தள-தொகுப்புகளுக்குள் பொதுவாக நிறுவப்படாத எந்த கோப்பும் .data கோப்பகத்திற்குள் செல்கிறது, " +"இது .dist-info கோப்பகமாக பெயரிடப்பட்டது, ஆனால் .டேட்டா/ நீட்டிப்பு ::" -#: ../source/specifications/binary-distribution-format.rst:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" -msgstr "" +msgstr "கையொப்பமிடப்பட்ட சக்கர கோப்புகள்" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12052,74 +17072,98 @@ msgid "" "possible entries are hashed, including any generated files such as .pyc " "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" +"சக்கர கோப்புகளில் டிசிட்டல் கையொப்பங்களை செயல்படுத்தும் நீட்டிக்கப்பட்ட பதிவு அடங்கும். ஒரு " +"பாதுகாப்பான ஆச் `` டைசச்ட் பெயர் = urlsafe_b64encode_nopad (டைசச்ட்) `` `` (ட்ரெயில்ங் " +"= எழுத்துக்கள் இல்லாத URLSAFE BASE64 குறியாக்கம்) ஒரு MD5SUM க்கு பதிலாக இரண்டாவது " +"நெடுவரிசையாக சேர்க்க PEP 376 இன் பதிவு மாற்றப்பட்டுள்ளது. .Pyc கோப்புகள் போன்ற எந்தவொரு " +"உருவாக்கப்பட்ட கோப்புகளும் உட்பட, சாத்தியமான அனைத்து உள்ளீடுகளும் ஆசெட் செய்யப்படுகின்றன, " +"ஆனால் அதன் சொந்த ஆசைக் கொண்டிருக்க முடியாத பதிவு அல்ல. உதாரணமாக ::" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 "" +"கையொப்ப கோப்பு (கள்) பதிவு. JWS மற்றும் Record.P7 கள் பதிவில் குறிப்பிடப்படவில்லை, " +"ஏனெனில் அவை பதிவு உருவாக்கப்பட்ட பின்னரே சேர்க்க முடியும். காப்பகத்தில் உள்ள மற்ற ஒவ்வொரு " +"கோப்பிலும் பதிவில் சரியான ஆச் இருக்க வேண்டும் அல்லது நிறுவல் தோல்வியடையும்." -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 "" +"சாதொபொகு வலை கையொப்பங்கள் பயன்படுத்தப்பட்டால், ஒன்று அல்லது அதற்கு மேற்பட்ட சாதொபொகு வலை " +"கையொப்பம் சாதொபொகு சீரியலைசேசன் (JWS-JS) கையொப்பங்கள் ஒரு கோப்பு பதிவில் " +"சேமிக்கப்படுகின்றன. பதிவுக்கு அருகிலுள்ள JWS. கையொப்பத்தின் சாதொபொகு பேலோடாக SHA-256 " +"ஆச் பதிவின் மூலம் பதிவில் கையெழுத்திட JWS பயன்படுத்தப்படுகிறது:" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" -msgstr "" +msgstr "(ஆச் மதிப்பு என்பது பதிவில் பயன்படுத்தப்படும் அதே வடிவமாகும்.)" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" +"Record.P7S பயன்படுத்தப்பட்டால், அதில் பதிவின் பிரிக்கப்பட்ட S/MIME வடிவமைப்பு கையொப்பம் " +"இருக்க வேண்டும்." -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" -msgstr "" +msgstr "பார்க்க" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" -msgstr "" +msgstr "https://datatracker.ietf.org/doc/html/rfc7515" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" +"https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" +"serialization-01" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" -msgstr "" +msgstr "https://datatracker.ietf.org/doc/html/rfc7517" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" +"https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" -msgstr "" +msgstr "கேள்விகள்" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" +"சக்கரம் ஒரு .டேட்டா கோப்பகத்தை வரையறுக்கிறது. எனது எல்லா தரவையும் நான் அங்கு வைக்க " +"வேண்டுமா?" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12128,12 +17172,17 @@ msgid "" "though *those* files will usually not be distributed in *wheel's* ``.data`` " "directory." msgstr "" +"உங்கள் குறியீட்டை எவ்வாறு ஒழுங்கமைக்க வேண்டும் என்பது குறித்து இந்த விவரக்குறிப்புக்கு ஒரு " +"கருத்து இல்லை. .Data அடைவு என்பது பொதுவாக `` தள-பேக்கேச்கள்`` அல்லது பைதன்பாத்தில் " +"நிறுவப்படாத எந்த கோப்புகளுக்கும் ஒரு இடம். வேறு வார்த்தைகளில் கூறுவதானால், நீங்கள் " +"தொடர்ந்து `` pkgutil.get_data (தொகுப்பு, வளம்) `` அந்த * கோப்புகள் வழக்கமாக * " +"சக்கரத்தின் * `` .data`` கோப்பகத்தில் விநியோகிக்கப்படாது என்றாலும் தொடர்ந்து பயன்படுத்தலாம்." -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" -msgstr "" +msgstr "வீல் ஏன் இணைக்கப்பட்ட கையொப்பங்களை உள்ளடக்கியது?" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12141,66 +17190,88 @@ msgid "" "individual files can be verified without having to download the whole " "archive." msgstr "" +"இணைக்கப்பட்ட கையொப்பங்கள் பிரிக்கப்பட்ட கையொப்பங்களை விட வசதியானவை, ஏனெனில் அவை " +"காப்பகத்துடன் பயணிக்கின்றன. தனிப்பட்ட கோப்புகள் மட்டுமே கையொப்பமிடப்பட்டதால், கையொப்பத்தை " +"செல்லாததாக்காமல் காப்பகத்தை மறுசீரமைக்க முடியும் அல்லது முழு காப்பகத்தையும் பதிவிறக்கம் " +"செய்யாமல் தனிப்பட்ட கோப்புகளை சரிபார்க்க முடியும்." -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" -msgstr "" +msgstr "JWS கையொப்பங்களை சக்கரம் ஏன் அனுமதிக்கிறது?" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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 "" +"சே.டபிள்யூ.எச் ஒரு பகுதியாக இருக்கும் சோச் விவரக்குறிப்புகள் நடைமுறைப்படுத்த எளிதானதாக " +"வடிவமைக்கப்பட்டுள்ளன, இது சக்கரத்தின் முதன்மை வடிவமைப்பு இலக்குகளில் ஒன்றாகும். JWS ஒரு " +"பயனுள்ள, சுருக்கமான தூய-பைதான் செயல்படுத்தலை அளிக்கிறது." -#: ../source/specifications/binary-distribution-format.rst:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" -msgstr "" +msgstr "வீல் ஏன் எச்/மைம் கையொப்பங்களையும் அனுமதிக்கிறது?" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" -msgstr "" +msgstr "\"பியூரிலிப்\" வெர்சச் \"பிளாட்ட்லிப்\" உடன் என்ன ஒப்பந்தம்?" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 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 "" +"சக்கரம் \"பியூரிலிப்\" எதிராக \"பிளாட்ட்லிப்\" வேறுபாட்டைப் பாதுகாக்கிறது, இது சில " +"தளங்களில் குறிப்பிடத்தக்கதாகும். எடுத்துக்காட்டாக, ஃபெடோரா தூய பைதான் தொகுப்புகளை '/usr/" +"lib/pythonx.y/site-packages' மற்றும் இயங்குதள சார்பு தொகுப்புகளை '/usr/lib64/" +"pythonx.y/site-packages' க்கு நிறுவுகிறது." -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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 "" +"`` {name}-{version} .data/purelib`` இல் அதன் அனைத்து கோப்புகளையும் கொண்ட \"ரூட்-ஐச்-" +"பூரலிப்: பொய்\" கொண்ட ஒரு சக்கரம் \"ரூட்-இச்-பூரலிப்: ட்ரூ\" கொண்ட ஒரு சக்கரத்திற்கு சமம் " +"ரூட்டில் உள்ள கோப்புகள், மற்றும் \"பியூரிலிப்\" மற்றும் \"பிளாட்லிப்\" வகைகளில் கோப்புகளை " +"வைத்திருப்பது சட்டபூர்வமானது." -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" -msgstr "" +msgstr "சக்கர கோப்பிலிருந்து நேரடியாக பைதான் குறியீட்டை இறக்குமதி செய்ய முடியுமா?" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12208,8 +17279,13 @@ msgid "" "``sys.path``. However, while this behaviour is a natural consequence of the " "format design, actually relying on it is generally discouraged." msgstr "" +"தொழில்நுட்ப ரீதியாக, எளிய பிரித்தெடுத்தல் வழியாக துணை நிறுவலின் கலவையின் காரணமாகவும், " +"`` சிபிமோர்ட்`` உடன் இணக்கமான காப்பக வடிவமைப்பைப் பயன்படுத்துவதன் மூலமும், சக்கரக் " +"கோப்புகளின் துணைக்குழு * ஆதரவை நேரடியாக `` sys.path`` இல் வைக்கவும். இருப்பினும், " +"இந்த நடத்தை வடிவமைப்பு வடிவமைப்பின் இயல்பான விளைவு என்றாலும், உண்மையில் அதை " +"நம்பியிருப்பது பொதுவாக ஊக்கமளிக்கிறது." -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12219,8 +17295,15 @@ msgid "" "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:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12237,8 +17320,21 @@ msgid "" "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:413 +"இரண்டாவதாக, சில பைதான் மென்பொருள்கள் ஒரு சிப் காப்பகத்திலிருந்து நேரடியாக இயங்குவதை " +"ஆதரிக்க எழுதப்பட்டாலும், குறியீடு முழுமையாக நிறுவப்பட்டதாகக் கருதி எழுதப்படுவது இன்னும் " +"பொதுவானது. ஒரு சிப் காப்பகத்திலிருந்து மென்பொருளை இயக்க முயற்சிப்பதன் மூலம் அந்த " +"அனுமானம் உடைக்கப்படும்போது, தோல்விகள் பெரும்பாலும் தெளிவற்றதாகவும், கண்டறிய கடினமாக " +"இருக்கும் (குறிப்பாக அவை மூன்றாம் தரப்பு நூலகங்களில் நிகழும்போது). இதில் உள்ள சிக்கல்களின் " +"இரண்டு பொதுவான ஆதாரங்கள் என்னவென்றால், ஒரு சிப் காப்பகத்திலிருந்து சி நீட்டிப்புகளை " +"இறக்குமதி செய்வது * சிபிதானால் ஆதரிக்கப்படவில்லை (அவ்வாறு செய்வது எந்த தளத்திலும் மாறும் " +"ஏற்றுதல் இயந்திரங்களால் நேரடியாக ஆதரிக்கப்படவில்லை என்பதால்) மற்றும் ஒரு இயங்கும் போது ZIP " +"காப்பகம் `__ __file__`` பண்புக்கூறு இனி ஒரு சாதாரண கோப்பு முறைமை பாதையை " +"குறிக்கவில்லை, ஆனால் கோப்பு முறைமையில் சிப் காப்பகத்தின் இருப்பிடம் மற்றும் உறவினர் " +"இரண்டையும் உள்ளடக்கிய ஒரு சேர்க்கை பாதைக்கு காப்பகத்திற்குள் உள்ள தொகுதிக்கான பாதை. " +"மென்பொருள் சுருக்கமான வள ஏபிஐகளை உள்நாட்டில் சரியாகப் பயன்படுத்தும்போது கூட, வெளிப்புற " +"கூறுகளுடன் இடைமுகப்படுத்த இன்னும் உண்மையான வட்டு கோப்பின் கிடைக்கும் தன்மை தேவைப்படலாம்." + +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12246,62 +17342,92 @@ msgid "" "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:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" -msgstr "" +msgstr "வரலாறு" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." -msgstr "" +msgstr "பிப்ரவரி 2013: இந்த விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `427`." -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 msgid "" "February 2021: The rules on escaping in wheel filenames were revised, to " "bring them into line with what popular tools actually do." msgstr "" +"பிப்ரவரி 2021: சக்கர கோப்பு பெயர்களில் தப்பிப்பது தொடர்பான விதிகள் திருத்தப்பட்டன, " +"பிரபலமான கருவிகள் உண்மையில் என்ன செய்கின்றன என்பதற்கு ஏற்ப அவற்றைக் கொண்டுவருவதற்காக." -#: ../source/specifications/binary-distribution-format.rst:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " "symlinks or subdirectories in this folder is not formally defined, and hence " "may vary between tools)." msgstr "" +"டிசம்பர் 2024: `` ச்கிரிப்ட்கள்` கோப்புறையில் வழக்கமான கோப்புகள் மட்டுமே இருக்க வேண்டும் " +"என்று தெளிவுபடுத்தியது (இந்த கோப்புறையில் சிம்லிங்க்கள் அல்லது துணை அடைவுகளை " +"எதிர்கொள்ளும்போது கருவிகளின் எதிர்பார்க்கப்படும் நடத்தை முறையாக வரையறுக்கப்படவில்லை, எனவே " +"கருவிகளுக்கு இடையில் வேறுபடலாம்)." -#: ../source/specifications/binary-distribution-format.rst:433 -msgid "Appendix" +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." msgstr "" +"டிசம்பர் 2024: தி: கோப்பு: `.டிச்ட்-இன்ஃபோ/உரிமங்கள்/` அடைவு மூலம் குறிப்பிடப்பட்டது: " +"PEP: `639`." -#: ../source/specifications/binary-distribution-format.rst:435 -msgid "Example urlsafe-base64-nopad implementation::" +#: ../source/specifications/binary-distribution-format.rst:446 +msgid "" +"January 2025: Clarified that name and version needs to be normalized for ``." +"dist-info`` and ``.data`` directories." msgstr "" +"சனவரி 2025: அந்த பெயர் மற்றும் பதிப்பை தெளிவுபடுத்தியது `` .dist-info`` மற்றும் `." +"data`` கோப்பகங்களுக்கு இயல்பாக்கப்பட வேண்டும்." + +#: ../source/specifications/binary-distribution-format.rst:451 +msgid "Appendix" +msgstr "பின் இணைப்பு" + +#: ../source/specifications/binary-distribution-format.rst:453 +msgid "Example urlsafe-base64-nopad implementation::" +msgstr "எடுத்துக்காட்டு urlsafe-base64-NOPAD செயல்படுத்தல் ::" #: ../source/specifications/core-metadata.rst:7 msgid "Core metadata specifications" -msgstr "" +msgstr "கோர் மேனிலை தரவு விவரக்குறிப்புகள்" #: ../source/specifications/core-metadata.rst:9 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:12 msgid "``Metadata-Version``" @@ -12309,7 +17435,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:13 msgid "``Name``" -msgstr "" +msgstr "`` பெயர்``" #: ../source/specifications/core-metadata.rst:14 msgid "``Version``" @@ -12317,7 +17443,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:16 msgid "All the other fields are optional." -msgstr "" +msgstr "மற்ற அனைத்து புலங்களும் விருப்பமானவை." #: ../source/specifications/core-metadata.rst:18 msgid "" @@ -12330,12 +17456,20 @@ msgid "" "email.parser` module can parse using the :data:`~.python:email.policy." "compat32` policy." msgstr "" +"மெட்டாடேட்டாவிற்கான நிலையான கோப்பு வடிவம் (உள்ளிட்டவை: டாக்: `சக்கரங்கள் <பைனரி-விநியோக " +"வடிவங்கள்>` மற்றும்: டாக்: `நிறுவப்பட்ட திட்டங்கள் <பதிவு-நிறுவப்பட்ட-பேக்கேச்கள்>`) " +"மின்னஞ்சல் தலைப்புகளின் வடிவமைப்பை அடிப்படையாகக் கொண்டது. இருப்பினும், மின்னஞ்சல் வடிவங்கள் " +"பல முறை திருத்தப்பட்டுள்ளன, மேலும் பேக்கேசிங் மெட்டாடேட்டாவுக்கு எந்த மின்னஞ்சல் RFC " +"பொருந்தாது என்பது குறிப்பிடப்படவில்லை. ஒரு துல்லியமான வரையறை இல்லாத நிலையில், " +"நிலையான நூலகம்: மோட்: `பைதான்: மின்னஞ்சல்.பார்சர்` தொகுதி: தரவு:` ~ .பிதான்: மின்னஞ்சல்." #: ../source/specifications/core-metadata.rst:27 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 "" +"மேனிலை தரவு ஒரு பைட் ச்ட்ரீமுக்கு சீரியலை செய்யும்போதெல்லாம் (எடுத்துக்காட்டாக, ஒரு " +"கோப்பில் சேமிக்க), யுடிஎஃப் -8 குறியாக்கத்தைப் பயன்படுத்தி சரங்களை வரிசைப்படுத்த வேண்டும்." #: ../source/specifications/core-metadata.rst:30 msgid "" @@ -12344,6 +17478,10 @@ msgid "" "format. The need for tools to work with years worth of existing packages " "makes it difficult to shift to a new format." msgstr "" +"இருப்பினும்: PEP: `566` மெட்டாடேட்டாவை JSON- இணக்கமான அகராதியாக மாற்றுவதற்கான வழியை " +"வரையறுத்தது, இது இன்னும் ஒரு நிலையான பரிமாற்ற வடிவமாக பயன்படுத்தப்படவில்லை. பல " +"ஆண்டுகளாக மதிப்புள்ள தொகுப்புகளுடன் பணிபுரிய கருவிகளின் தேவை ஒரு புதிய வடிவத்திற்கு " +"மாற்றுவது கடினம்." #: ../source/specifications/core-metadata.rst:35 msgid "" @@ -12354,16 +17492,24 @@ msgid "" "more relaxed formatting rules even for metadata files that are nominally " "less than version 2.1." msgstr "" +"* பழைய மெட்டாடேட்டாவை விளக்குதல்:* இல்: PEP: `566`, பிரபலமான வெளியீட்டு கருவிகளால் " +"பயன்படுத்தப்படும் தொடரியல் ஏற்றுக்கொள்ள பதிப்பு விவரக்குறிப்பு புலம் வடிவமைப்பு " +"விவரக்குறிப்பு தளர்த்தப்பட்டது (அதாவது பதிப்பு விவரக்குறிப்புகள் அடைப்புக்குறிகளால் " +"சூழப்பட வேண்டும் என்ற தேவையை அகற்ற). மேனிலை தரவு நுகர்வோர் பதிப்பு 2.1 ஐ விட " +"பெயரளவில் குறைவாக இருக்கும் மேனிலை தரவு கோப்புகளுக்கு கூட மிகவும் தளர்வான வடிவமைப்பு " +"விதிகளைப் பயன்படுத்த விரும்பலாம்." #: ../source/specifications/core-metadata.rst:46 msgid "Metadata-Version" -msgstr "" +msgstr "மெட்டாடேட்டா-பதிப்பு" #: ../source/specifications/core-metadata.rst:50 msgid "" "Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " "\"2.1\", \"2.2\", \"2.3\", and \"2.4\"." msgstr "" +"கோப்பு வடிவத்தின் பதிப்பு; சட்ட மதிப்புகள் \"1.0\", \"1.1\", \"1.2\", \"2.1\", " +"\"2.2\", \"2.3\" மற்றும் \"2.4\"." #: ../source/specifications/core-metadata.rst:53 msgid "" @@ -12373,6 +17519,12 @@ msgid "" "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:60 msgid "" @@ -12380,6 +17532,9 @@ msgid "" "metadata using the lowest metadata version that includes all of the needed " "fields." msgstr "" +"பரந்த பொருந்தக்கூடிய தன்மைக்கு, தேவையான அனைத்து புலங்களையும் உள்ளடக்கிய மிகக் குறைந்த " +"மேனிலை தரவு பதிப்பைப் பயன்படுத்தி விநியோக மெட்டாடேட்டாவை உருவாக்க பில்ட் கருவிகள் " +"தேர்வு செய்யலாம்." #: ../source/specifications/core-metadata.rst:64 #: ../source/specifications/core-metadata.rst:82 @@ -12399,10 +17554,10 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" -msgstr "" +msgstr "எடுத்துக்காட்டு ::" #: ../source/specifications/core-metadata.rst:72 msgid "Name" @@ -12410,7 +17565,7 @@ msgstr "" #: ../source/specifications/core-metadata.rst:75 msgid "Added restrictions on format from the :ref:`name format `." -msgstr "" +msgstr "வடிவமைப்பில் கட்டுப்பாடுகள் சேர்க்கப்பட்டன: ref: `பெயர் வடிவம் <பெயர்-வடிவ>`." #: ../source/specifications/core-metadata.rst:78 msgid "" @@ -12418,12 +17573,16 @@ msgid "" "distribution. It must conform to the :ref:`name format specification `." msgstr "" +"விநியோகத்தின் பெயர். பெயர் புலம் ஒரு விநியோகத்திற்கான முதன்மை அடையாளங்காட்டியாகும். " +"இது: ref: `பெயர் வடிவமைப்பு விவரக்குறிப்பு <பெயர்-வடிவ>` க்கு இணங்க வேண்டும்." #: ../source/specifications/core-metadata.rst:86 msgid "" "For comparison purposes, the names should be :ref:`normalized ` before comparing." msgstr "" +"ஒப்பீட்டு நோக்கங்களுக்காக, பெயர்கள் இருக்க வேண்டும்: குறிப்பு: `இயல்பாக்கப்பட்ட <பெயர்-" +"இயல்பாக்கம்>` ஒப்பிடுவதற்கு முன்." #: ../source/specifications/core-metadata.rst:91 msgid "Version" @@ -12435,10 +17594,13 @@ msgid "" "in the format specified in the :ref:`Version specifier specification " "`." msgstr "" +"விநியோகத்தின் பதிப்பு எண்ணைக் கொண்ட ஒரு சரம். இந்த புலம்: ref: `பதிப்பு விவரக்குறிப்பு " +"விவரக்குறிப்பு <பதிப்பு-விவரக்குறிப்புகள்>` இல் குறிப்பிடப்பட்டுள்ள வடிவத்தில் இருக்க " +"வேண்டும்." #: ../source/specifications/core-metadata.rst:107 msgid "Dynamic (multiple use)" -msgstr "" +msgstr "மாறும் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:111 msgid "" @@ -12446,12 +17608,14 @@ msgid "" "``Name``, ``Version``, and ``Metadata-Version`` may not be specified in this " "field." msgstr "" +"மற்றொரு கோர் மேனிலை தரவு புலத்தின் பெயரைக் கொண்ட ஒரு சரம். புல பெயர்கள் `` பெயர்``, `` " +"பதிப்பு``, மற்றும் `` மெட்டாடேட்டா-பதிப்பு`` இந்த துறையில் குறிப்பிடப்படாமல் இருக்கலாம்." #: ../source/specifications/core-metadata.rst:115 msgid "" "When found in the metadata of a source distribution, the following rules " "apply:" -msgstr "" +msgstr "மூல விநியோகத்தின் மெட்டாடேட்டாவில் காணப்படும்போது, பின்வரும் விதிகள் பொருந்தும்:" #: ../source/specifications/core-metadata.rst:118 msgid "" @@ -12460,12 +17624,17 @@ msgid "" "field is not in the sdist, and not marked as ``Dynamic``, then it MUST NOT " "be present in the wheel." msgstr "" +"ஒரு புலம் * `` டைனமிக்`` எனக் குறிக்கப்படவில்லை என்றால், SDIST இலிருந்து கட்டப்பட்ட எந்த " +"சக்கரத்திலும் புலத்தின் மதிப்பு SDIST இல் உள்ள மதிப்புடன் பொருந்த வேண்டும். புலம் SDIST இல் " +"இல்லை என்றால், `` டைனமிக்`` எனக் குறிக்கப்படவில்லை என்றால், அது சக்கரத்தில் இருக்கக்கூடாது." #: ../source/specifications/core-metadata.rst:122 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 "" +"ஒரு புலம் `` டைனமிக்`` எனக் குறிக்கப்பட்டால், அதில் SDIST இலிருந்து கட்டப்பட்ட சக்கரத்தில் " +"எந்த சரியான மதிப்பும் இருக்கலாம் (இல்லை உட்பட)." #: ../source/specifications/core-metadata.rst:125 msgid "" @@ -12473,6 +17642,9 @@ msgid "" "should be treated as if they were specified with ``Dynamic`` (i.e. there are " "no special restrictions on the metadata of wheels built from the sdist)." msgstr "" +"SDIST மேனிலை தரவு பதிப்பு பதிப்பு 2.2 ஐ விட பழையதாக இருந்தால், எல்லா புலங்களும் `` " +"டைனமிக்`` உடன் குறிப்பிடப்பட்டதைப் போல கருதப்பட வேண்டும் (அதாவது, SDIST இலிருந்து " +"கட்டப்பட்ட சக்கரங்களின் மெட்டாடேட்டாவில் சிறப்பு கட்டுப்பாடுகள் எதுவும் இல்லை)." #: ../source/specifications/core-metadata.rst:129 msgid "" @@ -12481,15 +17653,19 @@ msgid "" "build time, and may not be the same as the value in the sdist or in other " "wheels for the project." msgstr "" +"மூல விநியோகத்தைத் தவிர வேறு எந்த சூழலிலும், `` டைனமிக்`` என்பது தகவல்களுக்கு மட்டுமே, " +"மற்றும் புல மதிப்பு சக்கர உருவாக்கும் நேரத்தில் கணக்கிடப்பட்டதைக் குறிக்கிறது, மேலும் இது " +"SDIST இல் உள்ள மதிப்புக்கு அல்லது பிற சக்கரங்களில் இருக்காது திட்டம்." #: ../source/specifications/core-metadata.rst:134 msgid "" "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." msgstr "" +"`` டைனமிக்`` இன் சொற்பொருளின் முழு விவரங்கள் இதில் விவரிக்கப்பட்டுள்ளன: PEP: `643`." #: ../source/specifications/core-metadata.rst:139 msgid "Platform (multiple use)" -msgstr "" +msgstr "தளம் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:143 msgid "" @@ -12497,6 +17673,9 @@ msgid "" "distribution which is not listed in the \"Operating System\" Trove " "classifiers. See \"Classifier\" below." msgstr "" +"\"இயக்க முறைமை\" ட்ரோவ் வகைப்படுத்திகளில் பட்டியலிடப்படாத விநியோகத்தால் ஆதரிக்கப்படும் " +"இயக்க முறைமையை விவரிக்கும் ஒரு இயங்குதள விவரக்குறிப்பு. கீழே உள்ள \"வகைப்படுத்தி\" ஐப் " +"பார்க்கவும்." #: ../source/specifications/core-metadata.rst:147 #: ../source/specifications/core-metadata.rst:453 @@ -12507,14 +17686,14 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" -msgstr "" +msgstr "எடுத்துக்காட்டுகள் ::" #: ../source/specifications/core-metadata.rst:155 msgid "Supported-Platform (multiple use)" -msgstr "" +msgstr "ஆதரவு-தளம் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:159 msgid "" @@ -12523,6 +17702,9 @@ msgid "" "binary distribution was compiled. The semantics of the Supported-Platform " "field are not specified in this PEP." msgstr "" +"பி.கே.சி-இன்ஃபோ கோப்பைக் கொண்ட பைனரி விநியோகங்கள் பைனரி வழங்கல் தொகுக்கப்பட்ட OS மற்றும் " +"சிபியு ஐக் குறிப்பிட அவற்றின் மெட்டாடேட்டாவில் ஆதரவு-தளம் புலத்தைப் பயன்படுத்தும். " +"ஆதரிக்கப்பட்ட-தளம் புலத்தின் சொற்பொருள் இந்த PEP இல் குறிப்பிடப்படவில்லை." #: ../source/specifications/core-metadata.rst:173 msgid "Summary" @@ -12530,11 +17712,11 @@ msgstr "" #: ../source/specifications/core-metadata.rst:177 msgid "A one-line summary of what the distribution does." -msgstr "" +msgstr "வழங்கல் என்ன செய்கிறது என்பதற்கான ஒரு வரி சுருக்கம்." #: ../source/specifications/core-metadata.rst:197 msgid "This field may be specified in the message body instead." -msgstr "" +msgstr "இந்த புலம் அதற்கு பதிலாக செய்தி உடலில் குறிப்பிடப்படலாம்." #: ../source/specifications/core-metadata.rst:200 msgid "" @@ -12543,6 +17725,9 @@ msgid "" "size for this field, though people shouldn't include their instruction " "manual as the description." msgstr "" +"பல பத்திகளுக்கு இயங்கக்கூடிய விநியோகத்தின் நீண்ட விளக்கம். மெட்டாடேட்டாவைக் கையாளும் " +"மென்பொருள் இந்தத் துறைக்கு எந்த அதிகபட்ச அளவையும் கருதக்கூடாது, இருப்பினும் மக்கள் தங்கள் " +"அறிவுறுத்தல் கையேட்டை விளக்கமாக சேர்க்கக்கூடாது." #: ../source/specifications/core-metadata.rst:205 msgid "" @@ -12551,6 +17736,10 @@ msgid "" "optional; programs can also display the contents of the field as-is. This " "means that authors should be conservative in the markup they use." msgstr "" +"இந்த புலத்தின் உள்ளடக்கங்களை மறுசீரமைப்பு மார்க்அப் [1] _ ஐப் பயன்படுத்தி எழுதலாம். " +"மெட்டாடேட்டாவுடன் பணிபுரியும் திட்டங்களுக்கு, மார்க்அப்பை ஆதரிப்பது விருப்பமானது; நிரல்கள் " +"புலத்தின் உள்ளடக்கங்களையும் காண்பிக்க முடியும். இதன் பொருள் ஆசிரியர்கள் அவர்கள் பயன்படுத்தும் " +"மார்க்அப்பில் பழமைவாதமாக இருக்க வேண்டும்." #: ../source/specifications/core-metadata.rst:211 msgid "" @@ -12559,6 +17748,10 @@ msgid "" "pipe (\"|\") char. As a result, the Description field is encoded into a " "folded field that can be interpreted by RFC822 parser [2]_." msgstr "" +"RFC 822 வடிவமைப்பைப் பொறுத்து உள்தள்ளலுடன் வெற்று கோடுகள் மற்றும் கோடுகளை ஆதரிக்க, " +"எந்தவொரு சி.ஆர்.எல்.எஃப் எழுத்தும் 7 இடைவெளிகளால் பின்னொட்டு செய்யப்பட வேண்டும், அதைத் " +"தொடர்ந்து குழாய் (\"|\") கரி. இதன் விளைவாக, விளக்க புலம் ஒரு மடிந்த புலத்தில் " +"குறியாக்கம் செய்யப்படுகிறது, இது RFC822 பாகுபடுத்தி [2] _ ஆல் விளக்கப்படலாம்." #: ../source/specifications/core-metadata.rst:228 msgid "" @@ -12566,6 +17759,9 @@ msgid "" "and a pipe char have to be replaced by a single CRLF when the field is " "unfolded using a RFC822 reader." msgstr "" +"இந்த குறியாக்கம் ஒரு சி.ஆர்.எல்.எஃப் இன் எந்தவொரு நிகழ்வுகளும் 7 இடைவெளிகளும் ஒரு பைப் " +"கரி ஒரு சி.ஆர்.எல்.எஃப் மூலம் மாற்றப்பட வேண்டும், இது ஒரு ஆர்.எஃப்.சி 822 ரீடரைப் " +"பயன்படுத்தி புலம் வெளிவரும் போது." #: ../source/specifications/core-metadata.rst:232 msgid "" @@ -12573,16 +17769,21 @@ msgid "" "message body (i.e., after a completely blank line following the headers, " "with no indentation or other special formatting necessary)." msgstr "" +"மாற்றாக, விநியோகத்தின் விளக்கம் அதற்கு பதிலாக செய்தி உடலில் வழங்கப்படலாம் (அதாவது, " +"தலைப்புகளைப் பின்பற்றி முற்றிலும் வெற்று வரிக்குப் பிறகு, உள்தள்ளல் அல்லது பிற சிறப்பு " +"வடிவங்கள் தேவையில்லை)." #: ../source/specifications/core-metadata.rst:241 msgid "Description-Content-Type" -msgstr "" +msgstr "விளக்கம்-உள்ளடக்க வகை" #: ../source/specifications/core-metadata.rst:245 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:248 msgid "" @@ -12600,6 +17801,17 @@ msgid "" "possibility for PyPI and other tools to be able to render Markdown and other " "formats." msgstr "" +"வரலாற்று ரீதியாக, PYPI எளிய உரையில் விளக்கங்களை ஆதரித்தது மற்றும் `மறுசீரமைப்பு (ஓய்வு) " +"` _, " +"மற்றும் உஉகுமொ இல் ஓய்வெடுக்க முடியும். இருப்பினும், விநியோக ஆசிரியர்கள் விளக்கத்தை " +"`மார்க் பேரூர் ` _ (: rfc: " +"`7763`) இல் எழுதுவது பொதுவானது, ஏனெனில் பல குறியீடு ஓச்டிங் தளங்கள் மார்க் பேரூர் " +"வாசிப்புகளை வழங்குகின்றன விளக்கத்திற்கான கோப்பை மீண்டும் பயன்படுத்தும். பைபி வடிவமைப்பை " +"அடையாளம் காணவில்லை, எனவே விளக்கத்தை சரியாக வழங்க முடியவில்லை. இதன் விளைவாக பைபியில் " +"பல தொகுப்புகள் மோசமாக வழங்கப்பட்ட விளக்கங்களுடன் மார்க் பேரூர் எளிய உரையாகவோ அல்லது " +"மோசமாகவோ இருக்கும்போது, ஓய்வாக வழங்க முயற்சிக்கப்பட்டது. இந்த புலம் விநியோக எழுத்தாளரின் " +"விளக்கத்தின் வடிவமைப்பைக் குறிப்பிட அனுமதிக்கிறது, பைபி மற்றும் பிற கருவிகளுக்கான மார்க் " +"பேரூர் மற்றும் பிற வடிவங்களை வழங்குவதற்கான வாய்ப்பைத் திறக்கிறது." #: ../source/specifications/core-metadata.rst:261 msgid "" @@ -12608,26 +17820,30 @@ msgid "" "html>`_). Briefly, this means that it has a ``type/subtype`` part and then " "it can optionally have a number of parameters:" msgstr "" +"இந்த புலத்தின் வடிவம் http இல் உள்ள `` உள்ளடக்க-வகை` தலைப்பு (அதாவது: `rfc 1341 " +"` `_) . சுருக்கமாக, " +"இதன் பொருள் இது ஒரு `` வகை/துணை வகை`` பகுதியைக் கொண்டுள்ளது, பின்னர் அது விருப்பமாக " +"பல அளவுருக்களைக் கொண்டிருக்கலாம்:" #: ../source/specifications/core-metadata.rst:267 msgid "Format::" -msgstr "" +msgstr "வடிவம் ::" #: ../source/specifications/core-metadata.rst:271 msgid "The ``type/subtype`` part has only a few legal values:" -msgstr "" +msgstr "`` வகை/துணை வகை`` பகுதியில் சில சட்ட மதிப்புகள் மட்டுமே உள்ளன:" #: ../source/specifications/core-metadata.rst:273 msgid "``text/plain``" -msgstr "" +msgstr "`` உரை/வெற்று``" #: ../source/specifications/core-metadata.rst:274 msgid "``text/x-rst``" -msgstr "" +msgstr "`` உரை/x-rst``" #: ../source/specifications/core-metadata.rst:275 msgid "``text/markdown``" -msgstr "" +msgstr "`` உரை/மார்க் டவுன்``" #: ../source/specifications/core-metadata.rst:277 msgid "" @@ -12635,6 +17851,9 @@ msgid "" "the description. The only legal value is ``UTF-8``. If omitted, it is " "assumed to be ``UTF-8``." msgstr "" +"விளக்கத்தின் எழுத்துக்குறி குறியாக்கத்தைக் குறிப்பிட `` சார்செட்`` அளவுருவைப் " +"பயன்படுத்தலாம். ஒரே சட்ட மதிப்பு `` UTF-8``. விடுபட்டால், அது `` utf-8`` என்று " +"கருதப்படுகிறது." #: ../source/specifications/core-metadata.rst:281 msgid "" @@ -12643,14 +17862,19 @@ msgid "" "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:286 msgid "``GFM`` for :rfc:`GitHub-flavored Markdown <7764#section-3.2>`" -msgstr "" +msgstr "`` Gfm`` க்கு: RFC: `Github-சுவை மார்க் பேரூர் <7764#பிரிவு -3.2>`" #: ../source/specifications/core-metadata.rst:287 msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" -msgstr "" +msgstr "`` காமன்மார்க்``` க்கு: ஆர்.எஃப்.சி: `காமன்மார்க் <7764#பிரிவு -3.5>`" #: ../source/specifications/core-metadata.rst:305 msgid "" @@ -12658,6 +17882,9 @@ msgid "" "attempt to render it as ``text/x-rst; charset=UTF-8`` and fall back to " "``text/plain`` if it is not valid rst." msgstr "" +"ஒரு `` விளக்கம்-உள்ளடக்க வகை`` குறிப்பிடப்படவில்லை என்றால், விண்ணப்பங்கள் அதை `` " +"உரை/எக்ச்-ஆர்எச்டி என வழங்க முயற்சிக்க வேண்டும்; charset = utf-8`` மற்றும் `` " +"உரை/வெற்று`` இது செல்லுபடியாகாது என்றால் மீண்டும் விழுங்கள்." #: ../source/specifications/core-metadata.rst:309 msgid "" @@ -12665,6 +17892,8 @@ msgid "" "content type is ``text/plain`` (Although PyPI will probably reject anything " "with an unrecognized value)." msgstr "" +"ஒரு `` விளக்கம்-உள்ளடக்க வகை`` அங்கீகரிக்கப்படாத மதிப்பு என்றால், கருதப்பட்ட உள்ளடக்க வகை ``" +" உரை/வெற்று`` (பைபி அடையாளம் காணப்படாத மதிப்பைக் கொண்ட எதையும் நிராகரிக்கும் என்றாலும்)." #: ../source/specifications/core-metadata.rst:313 msgid "" @@ -12672,6 +17901,9 @@ msgid "" "not specified or is set to an unrecognized value, then the assumed " "``variant`` is ``GFM``." msgstr "" +"`` விளக்கம்-உள்ளடக்க வகை`` `` உரை/மார்க் டவுன்`` மற்றும் `` மாறுபாடு`` என்பது " +"குறிப்பிடப்படவில்லை அல்லது அங்கீகரிக்கப்படாத மதிப்புக்கு அமைக்கப்பட்டால், கருதப்பட்ட `` " +"மாறுபாடு`` ." #: ../source/specifications/core-metadata.rst:317 msgid "" @@ -12679,16 +17911,21 @@ msgid "" "``variant`` defaults to ``GFM`` and thus it is equivalent to the example " "before it." msgstr "" +"ஆகவே, மேலே உள்ள கடைசி எடுத்துக்காட்டுக்கு, `` சர்செட்`` இயல்புநிலை `` utf-8`` மற்றும் " +"`` மாறுபாடு`` இயல்புநிலை `` gfm`` க்கு இயல்புநிலையாகிறது, இதனால் அது அதற்கு முன் " +"எடுத்துக்காட்டுக்கு சமம்." #: ../source/specifications/core-metadata.rst:326 msgid "Keywords" -msgstr "" +msgstr "முக்கிய வார்த்தைகள்" #: ../source/specifications/core-metadata.rst:330 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:339 msgid "" @@ -12697,26 +17934,33 @@ msgid "" "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:348 msgid "Author" -msgstr "" +msgstr "நூலாசிரியர்" #: ../source/specifications/core-metadata.rst:352 msgid "" "A string containing the author's name at a minimum; additional contact " "information may be provided." msgstr "" +"ஆசிரியரின் பெயரைக் கொண்ட ஒரு சரம் குறைந்தபட்சம்; கூடுதல் தொடர்பு செய்தி வழங்கப்படலாம்." #: ../source/specifications/core-metadata.rst:365 msgid "Author-email" -msgstr "" +msgstr "ஆசிரியர்-கடந்த காலம்" #: ../source/specifications/core-metadata.rst:369 msgid "" "A string containing the author's e-mail address. It can contain a name and " "e-mail address in the legal forms for a RFC-822 ``From:`` header." msgstr "" +"ஆசிரியரின் மின்னஞ்சல் முகவரியைக் கொண்ட ஒரு சரம். இது ஒரு RFC-822 `` என்பதற்கான சட்ட " +"படிவங்களில் ஒரு பெயர் மற்றும் மின்னஞ்சல் முகவரியைக் கொண்டிருக்கலாம்: `` தலைப்பு." #: ../source/specifications/core-metadata.rst:377 #: ../source/specifications/core-metadata.rst:424 @@ -12724,16 +17968,18 @@ msgid "" "Per RFC-822, this field may contain multiple comma-separated e-mail " "addresses::" msgstr "" +"RFC-822 க்கு, இந்த துறையில் பல கமாவால் பிரிக்கப்பட்ட மின்னஞ்சல் முகவரிகள் இருக்கலாம் ::" #: ../source/specifications/core-metadata.rst:387 msgid "Maintainer" -msgstr "" +msgstr "பராமரிப்பாளர்" #: ../source/specifications/core-metadata.rst:391 msgid "" "A string containing the maintainer's name at a minimum; additional contact " "information may be provided." msgstr "" +"பராமரிப்பாளரின் பெயரைக் கொண்ட ஒரு சரம் குறைந்தபட்சம்; கூடுதல் தொடர்பு செய்தி வழங்கப்படலாம்." #: ../source/specifications/core-metadata.rst:394 msgid "" @@ -12741,16 +17987,21 @@ msgid "" "by someone other than the original author: it should be omitted if it is " "identical to ``Author``." msgstr "" +"அசல் எழுத்தாளரைத் தவிர வேறு ஒருவரால் ஒரு திட்டம் பராமரிக்கப்படும்போது இந்த புலம் " +"பயன்படுத்தப்பட வேண்டும் என்பதை நினைவில் கொள்க: இது `` எழுத்தாளர்`` க்கு ஒத்ததாக இருந்தால் " +"அது தவிர்க்கப்பட வேண்டும்." #: ../source/specifications/core-metadata.rst:408 msgid "Maintainer-email" -msgstr "" +msgstr "பராமரிப்பாளர்-எமெயில்" #: ../source/specifications/core-metadata.rst:412 msgid "" "A string containing the maintainer's e-mail address. It can contain a name " "and e-mail address in the legal forms for a RFC-822 ``From:`` header." msgstr "" +"பராமரிப்பாளரின் மின்னஞ்சல் முகவரியைக் கொண்ட ஒரு சரம். இது ஒரு RFC-822 `` என்பதற்கான சட்" +"ட படிவங்களில் ஒரு பெயர் மற்றும் மின்னஞ்சல் முகவரியைக் கொண்டிருக்கலாம்: `` தலைப்பு." #: ../source/specifications/core-metadata.rst:416 msgid "" @@ -12758,14 +18009,17 @@ msgid "" "by someone other than the original author: it should be omitted if it is " "identical to ``Author-email``." msgstr "" +"அசல் எழுத்தாளரைத் தவிர வேறு ஒருவரால் ஒரு திட்டம் பராமரிக்கப்படும்போது இந்த புலம் " +"பயன்படுத்தப்பட வேண்டும் என்பதை நினைவில் கொள்க: இது `` ஆசிரியர்-எமெயில்`` க்கு ஒத்ததாக " +"இருந்தால் அது தவிர்க்கப்பட வேண்டும்." #: ../source/specifications/core-metadata.rst:434 msgid "License" -msgstr "" +msgstr "உரிமம்" #: ../source/specifications/core-metadata.rst:437 msgid "in favour of ``License-Expression``." -msgstr "" +msgstr "`` உரிம-வெளிப்பாடு`` க்கு ஆதரவாக." #: ../source/specifications/core-metadata.rst:441 msgid "" @@ -12774,6 +18028,10 @@ msgid "" "``License`` and PyPI will reject uploads. See `PEP 639 `__." msgstr "" +"மேனிலை தரவு 2.4 இன் படி, `` உரிமம்`` மற்றும் `` உரிமம்-வெளிப்பாடு`` இருவழி. இரண்டும் " +"குறிப்பிடப்பட்டால், மேனிலை தரவு பாகுபடுத்தும் கருவிகள் `` உரிமம்`` ஐ புறக்கணிக்கும், " +"மேலும் பதிவேற்றங்களை PYPI நிராகரிக்கும். `PEP 639 ____ ஐப் பார்க்கவும்." #: ../source/specifications/core-metadata.rst:446 msgid "" @@ -12784,10 +18042,15 @@ msgid "" "``Classifier`` field, or to indicate a variation or exception to such a " "license." msgstr "" +"\"உரிமம்\" ட்ரோவ் வகைப்படுத்திகளிடமிருந்து உரிமம் இல்லாத விநியோகத்தை உள்ளடக்கிய உரிமத்தை " +"குறிக்கும் உரை. காண்க: குறிப்பு: `\" வகைப்படுத்தி \"<மெட்டாடேட்டா-கிளாசிஃபையர்>` கீழே. " +"உரிமத்தின் ஒரு குறிப்பிட்ட பதிப்பைக் குறிப்பிடவும் இந்த புலம் பயன்படுத்தப்படலாம், இது `` " +"வகைப்படுத்தி`` புலம் வழியாக பெயரிடப்பட்டது, அல்லது அத்தகைய உரிமத்திற்கு மாறுபாடு அல்லது" +" விதிவிலக்கைக் குறிக்கலாம்." #: ../source/specifications/core-metadata.rst:466 msgid "License-Expression" -msgstr "" +msgstr "உரிம-வெளிப்பாடு" #: ../source/specifications/core-metadata.rst:470 msgid "" @@ -12795,10 +18058,13 @@ msgid "" "org/pep-0639/#term-license-expression>`__ as `defined in PEP 639 `__." msgstr "" +"செல்லுபடியாகும் SPDX `உரிம வெளிப்பாடு __ __ PEP 639 ____." #: ../source/specifications/core-metadata.rst:489 msgid "License-File (multiple use)" -msgstr "" +msgstr "உரிம-கோப்பு (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:493 msgid "" @@ -12806,10 +18072,13 @@ msgid "" "The path is located within the project source tree, relative to the project " "root directory. For details see :pep:`639`." msgstr "" +"ஒவ்வொரு நுழைவும் உரிமம் தொடர்பான கோப்பின் பாதையின் சரம் பிரதிநிதித்துவமாகும். திட்ட மூல " +"மரத்திற்குள் இந்த பாதை அமைந்துள்ளது, இது திட்ட ரூட் கோப்பகத்துடன் ஒப்பிடும்போது. " +"விவரங்களுக்கு காண்க: PEP: `639`." #: ../source/specifications/core-metadata.rst:510 msgid "Classifier (multiple use)" -msgstr "" +msgstr "வகைப்படுத்தி (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:514 msgid "" @@ -12818,6 +18087,9 @@ msgid "" "Package Index publishes a dynamic list of `currently defined classifiers " "`__." msgstr "" +"ஒவ்வொரு நுழைவும் விநியோகத்திற்கான ஒற்றை வகைப்பாடு மதிப்பைக் கொடுக்கும் ஒரு சரம். " +"வகைப்படுத்திகள் இதில் விவரிக்கப்பட்டுள்ளன: PEP: `301`, மற்றும் பைதான் தொகுப்பு குறியீடு` " +"தற்போது வரையறுக்கப்பட்ட வகைப்படுத்திகள் __ __." #: ../source/specifications/core-metadata.rst:520 msgid "" @@ -12825,6 +18097,9 @@ msgid "" "``License-Expression`` instead. See `PEP 639 `_." msgstr "" +"`` உரிமம் :: `` வகைப்படுத்துபவர்களின் பயன்பாடு மேனிலை தரவு 2.4 இல் நீக்கப்பட்டது, அதற்கு " +"பதிலாக `` உரிம-வெளிப்பாடு` ஐப் பயன்படுத்தவும். `PEP 639 ` _ ஐப் பார்க்கவும்." #: ../source/specifications/core-metadata.rst:524 #: ../source/specifications/core-metadata.rst:614 @@ -12832,10 +18107,11 @@ msgstr "" #: ../source/specifications/core-metadata.rst:783 msgid "This field may be followed by an environment marker after a semicolon." msgstr "" +"இந்த புலத்தை ஒரு அரைக்காற்புள்ளிக்குப் பிறகு சுற்றுச்சூழல் குறிப்பான் பின்பற்றலாம்." #: ../source/specifications/core-metadata.rst:535 msgid "Requires-Dist (multiple use)" -msgstr "" +msgstr "தேவைப்படும் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:538 #: ../source/specifications/core-metadata.rst:601 @@ -12845,22 +18121,27 @@ msgid "" "The field format specification was relaxed to accept the syntax used by " "popular publishing tools." msgstr "" +"பிரபலமான வெளியீட்டு கருவிகளால் பயன்படுத்தப்படும் தொடரியல் ஏற்றுக்கொள்ள புல வடிவமைப்பு " +"விவரக்குறிப்பு தளர்த்தப்பட்டது." #: ../source/specifications/core-metadata.rst:542 msgid "" "Each entry contains a string naming some other distutils project required by " "this distribution." msgstr "" +"ஒவ்வொரு நுழைவுக்கும் இந்த விநியோகத்தால் தேவைப்படும் வேறு சில தொலைதூர திட்டங்களுக்கு " +"பெயரிடும் சரம் உள்ளது." #: ../source/specifications/core-metadata.rst:545 msgid "The format of a requirement string contains from one to four parts:" -msgstr "" +msgstr "ஒரு தேவை சரத்தின் வடிவம் ஒன்று முதல் நான்கு பகுதிகளைக் கொண்டுள்ளது:" #: ../source/specifications/core-metadata.rst:547 msgid "" "A project name, in the same format as the ``Name:`` field. The only " "mandatory part." msgstr "" +"ஒரு திட்ட பெயர், `` பெயர்: `` புலம் போன்ற அதே வடிவத்தில். ஒரே கட்டாய பகுதி." #: ../source/specifications/core-metadata.rst:549 msgid "" @@ -12869,34 +18150,46 @@ msgid "" "The names MUST conform to the restrictions specified by the ``Provides-Extra:" "`` field." msgstr "" +"'கூடுதல்' பெயர்களின் கமாவால் பிரிக்கப்பட்ட பட்டியல். இவை தேவையான திட்டத்தால் " +"வரையறுக்கப்படுகின்றன, கூடுதல் சார்புகள் தேவைப்படக்கூடிய குறிப்பிட்ட அம்சங்களைக் குறிக்கின்" +"றன. `` வழங்கும்-எக்ச்ட்ரா: `` புலத்தால் குறிப்பிடப்பட்ட கட்டுப்பாடுகளுக்கு பெயர்கள் இணங்க " +"வேண்டும்." #: ../source/specifications/core-metadata.rst:553 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:556 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:559 msgid "See :pep:`508` for full details of the allowed format." -msgstr "" +msgstr "காண்க: PEP: `508` அனுமதிக்கப்பட்ட வடிவமைப்பின் முழு விவரங்களுக்கு." #: ../source/specifications/core-metadata.rst:561 msgid "" "The project names should correspond to names as found on the `Python Package " "Index`_." msgstr "" +"திட்ட பெயர்கள் `பைதான் தொகுப்பு குறியீட்டு`_ இல் காணப்படும் பெயர்களுடன் ஒத்திருக்க வேண்டும்." #: ../source/specifications/core-metadata.rst:564 msgid "" "Version specifiers must follow the rules described in :doc:`version-" "specifiers`." msgstr "" +"பதிப்பு விவரக்குறிப்புகள் விவரிக்கப்பட்டுள்ள விதிகளைப் பின்பற்ற வேண்டும்: DOC: " +"`பதிப்பு-விவரிப்பாளர்கள்`." #: ../source/specifications/core-metadata.rst:578 msgid "Requires-Python" @@ -12908,24 +18201,29 @@ msgid "" "compatible with. Installation tools may look at this when picking which " "version of a project to install." msgstr "" +"இந்த புலம் வழங்கல் பொருந்தக்கூடிய பைதான் பதிப்பை (களை) குறிப்பிடுகிறது. நிறுவ வேண்டிய " +"திட்டத்தின் எந்த பதிப்பை எடுக்கும்போது நிறுவல் கருவிகள் இதைப் பார்க்கலாம்." #: ../source/specifications/core-metadata.rst:586 msgid "The value must be in the format specified in :doc:`version-specifiers`." msgstr "" +"மதிப்பு குறிப்பிடப்பட்ட வடிவத்தில் இருக்க வேண்டும்: DOC: `பதிப்பு-விவரிப்பாளர்கள்`." #: ../source/specifications/core-metadata.rst:588 msgid "" "For example, if a distribution uses :ref:`f-strings ` " "then it may prevent installation on Python < 3.6 by specifying::" msgstr "" +"எடுத்துக்காட்டாக, ஒரு வழங்கல் பயன்படுத்தினால்: ref: `f-strings ` " +"பின்னர் இது பைதான் <3.6 இல் நிறுவுவதைத் தடுக்கலாம் ::" #: ../source/specifications/core-metadata.rst:593 msgid "This field cannot be followed by an environment marker." -msgstr "" +msgstr "இந்த புலத்தை சுற்றுச்சூழல் குறிப்பானைப் பின்பற்ற முடியாது." #: ../source/specifications/core-metadata.rst:598 msgid "Requires-External (multiple use)" -msgstr "" +msgstr "தேவை-எக்ச்டெர்னல் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:605 msgid "" @@ -12934,12 +18232,18 @@ msgid "" "to downstream project maintainers, and has no semantics which are meaningful " "to the ``distutils`` distribution." msgstr "" +"ஒவ்வொரு நுழைவுக்கும் வழங்கல் பயன்படுத்தப்பட வேண்டிய அமைப்பில் சில சார்புநிலையை விவரிக்கும் " +"ஒரு சரம் உள்ளது. இந்த புலம் கீழ்நிலை திட்ட பராமரிப்பாளர்களுக்கு ஒரு குறிப்பாக செயல்படுவதை" +" நோக்கமாகக் கொண்டுள்ளது, மேலும் `` தொலைதூரங்கள்` விநியோகத்திற்கு அர்த்தமுள்ள சொற்பொழிவுகள் " +"இல்லை." #: ../source/specifications/core-metadata.rst:610 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:616 msgid "" @@ -12948,24 +18252,31 @@ msgid "" "`Version specifier specification `: they should " "correspond to the version scheme used by the external dependency." msgstr "" +"அவை பைதான் அல்லாத மென்பொருள் வெளியீடுகளைக் குறிப்பிடுவதால், இந்த புலத்திற்கான பதிப்பு " +"எண்கள் ** அல்ல ** இல் குறிப்பிடப்பட்டுள்ள வடிவமைப்பிற்கு இணங்க தேவையில்லை: re: `பதிப்பு " +"விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-விவரக்குறிப்புகள்>`: அவை பதிப்பிற்கு ஒத்ததாக இருக்" +"க வேண்டும் வெளிப்புற சார்பு பயன்படுத்தும் திட்டம்." #: ../source/specifications/core-metadata.rst:621 msgid "Notice that there is no particular rule on the strings to be used." msgstr "" +"பயன்படுத்த வேண்டிய சரங்களில் குறிப்பிட்ட விதி எதுவும் இல்லை என்பதைக் கவனியுங்கள்." #: ../source/specifications/core-metadata.rst:633 msgid "Project-URL (multiple-use)" -msgstr "" +msgstr "PROJECT-URL (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:637 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:644 msgid "The label is free text limited to 32 characters." -msgstr "" +msgstr "சிட்டை இலவச உரை 32 எழுத்துகளுக்கு வரையறுக்கப்பட்டுள்ளது." #: ../source/specifications/core-metadata.rst:646 msgid "" @@ -12974,10 +18285,14 @@ msgid "" "known\" labels, which can then be given special presentations when being " "rendered for human consumption. See :ref:`well-known-project-urls`." msgstr "" +"தொடங்கி: PEP: `753`, திட்ட மேனிலை தரவு நுகர்வோர் (பைதான் தொகுப்பு குறியீட்டு போன்றவை)" +"\" நன்கு அறியப்பட்ட \"லேபிள்களைக் கண்டறிய ஒரு நிலையான இயல்பாக்கம் செயல்முறையைப் " +"பயன்படுத்தலாம், பின்னர் மனித நுகர்வுக்காக வழங்கப்படும்போது சிறப்பு விளக்கக்காட்சிகள் " +"வழங்கப்படலாம். காண்க: ref: `நன்கு அறியப்பட்ட-திட்ட-urls`." #: ../source/specifications/core-metadata.rst:656 msgid "Provides-Extra (multiple use)" -msgstr "" +msgstr "வழங்குகிறது-எக்ச்ட்ரா (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:659 msgid "" @@ -12985,6 +18300,9 @@ msgid "" "required). For older metadata versions, value restrictions were brought into " "line with ``Name:`` and normalization rules were introduced." msgstr "" +": PEP: `685` தடைசெய்யப்பட்ட செல்லுபடியாகும் மதிப்புகள் தெளிவற்றதாக இருக்க வேண்டும் " +"(அதாவது இயல்பாக்கம் தேவையில்லை). பழைய மேனிலை தரவு பதிப்புகளுக்கு, மதிப்பு " +"கட்டுப்பாடுகள் `` பெயர்: `` மற்றும் இயல்பாக்குதல் விதிகள் அறிமுகப்படுத்தப்பட்டன." #: ../source/specifications/core-metadata.rst:664 msgid "" @@ -12994,12 +18312,19 @@ msgid "" "hyphen. Names are limited to those which match the following regex (which " "guarantees unambiguity)::" msgstr "" +"விருப்ப அம்சத்தின் பெயரைக் கொண்ட ஒரு சரம். செல்லுபடியாகும் பெயர் சிறிய ASCII எழுத்துக்கள்" +", ASCII எண்கள் மற்றும் ஐபன் ஆகியவற்றை மட்டுமே கொண்டுள்ளது. இது ஒரு கடிதம் அல்லது எண்ணுடன் " +"தொடங்கி முடிக்க வேண்டும். ஐபன்களை மற்றொரு ஐபன் பின்பற்ற முடியாது. பின்வரும் ரீசெக்சுடன் " +"பொருந்தக்கூடிய பெயர்களுக்கு பெயர்கள் வரையறுக்கப்பட்டுள்ளன (இது தெளிவற்ற தன்மைக்கு பொறுப்பு " +"அளிக்கிறது) ::" #: ../source/specifications/core-metadata.rst:672 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:680 msgid "" @@ -13008,6 +18333,10 @@ msgid "" "comma (,). The requirements are evaluated for each requested feature and " "added to the set of requirements for the distribution." msgstr "" +"இரண்டாவது விநியோகத்திற்கு சதுர அடைப்புக்குறிக்குள் வைப்பதன் மூலம் விருப்பமான சார்பு " +"தேவைப்படுகிறது, மேலும் அவற்றை கமா (,) உடன் பிரிப்பதன் மூலம் பல அம்சங்களைக் கோரலாம். " +"கோரப்பட்ட ஒவ்வொரு அம்சத்திற்கும் தேவைகள் மதிப்பீடு செய்யப்பட்டு விநியோகத்திற்கான தேவைகளின் " +"தொகுப்பில் சேர்க்கப்படுகின்றன." #: ../source/specifications/core-metadata.rst:690 msgid "" @@ -13015,12 +18344,16 @@ msgid "" "that are needed for running automated tests and generating documentation, " "respectively." msgstr "" +"இரண்டு அம்ச பெயர்கள் `` சோதனை`` மற்றும் `டாக்`` முறையே தானியங்கி சோதனைகளை இயக்குவதற்கும்" +" ஆவணங்களை உருவாக்குவதற்கும் தேவையான சார்புகளுக்கு ஒதுக்கப்பட்டுள்ளன." #: ../source/specifications/core-metadata.rst:694 msgid "" "It is legal to specify ``Provides-Extra:`` without referencing it in any " "``Requires-Dist:``." msgstr "" +"`` வழங்கும்-எக்ச்ட்ரா: `` எந்தவொரு `` தேவைப்படும்-டிச்ட்: `` இல் குறிப்பிடாமல் " +"குறிப்பிடுவது சட்டபூர்வமானது." #: ../source/specifications/core-metadata.rst:697 msgid "" @@ -13029,6 +18362,10 @@ msgid "" "comparisons. Tools writing metadata MUST raise an error if two ``Provides-" "Extra:`` entries would clash after being normalized." msgstr "" +"பழைய மேனிலை தரவு பதிப்புகளுக்கான தரவை எழுதும்போது, `` பெயருக்குப் பயன்படுத்தப்படும் " +"அதே விதிகளைப் பின்பற்றி பெயர்கள் இயல்பாக்கப்பட வேண்டும்: `` ஒப்பீடுகளைச் செய்யும்போது புலம். " +"இரண்டு `` வழங்கும்-எக்ச்ட்ரா: `` இயல்பாக்கப்பட்ட பின்னர் உள்ளீடுகள் மோதினால் மெட்டாடேட்டாவை " +"எழுதும் கருவிகள் பிழையை உயர்த்த வேண்டும்." #: ../source/specifications/core-metadata.rst:702 msgid "" @@ -13039,10 +18376,16 @@ msgid "" "Tools MAY choose to raise an error when reading an invalid name for older " "metadata versions." msgstr "" +"பழைய மேனிலை தரவு பதிப்புகளுக்கான தரவைப் படிக்கும்போது, புதிய மேனிலை தரவு " +"பதிப்புகளின் கீழ் இந்த புலத்திற்கான மதிப்புகள் செல்லாது என்பதை கருவிகள் எச்சரிக்க வேண்டும். " +"`` பெயருக்கான விதிகளைப் பின்பற்றி ஒரு மதிப்பு செல்லாது என்றால்: `` எந்தவொரு முக்கிய " +"மேனிலை தரவு பதிப்பிலும், பயனருக்கு எச்சரிக்கை செய்யப்பட வேண்டும் மற்றும் தெளிவற்ற தன்மையைத்" +" தவிர்க்க மதிப்பு புறக்கணிக்கப்பட வேண்டும். பழைய மேனிலை தரவு பதிப்புகளுக்கு தவறான " +"பெயரைப் படிக்கும்போது பிழையை உயர்த்த கருவிகள் தேர்வு செய்யலாம்." #: ../source/specifications/core-metadata.rst:710 msgid "Rarely Used Fields" -msgstr "" +msgstr "அரிதாகவே பயன்படுத்தப்படும் புலங்கள்" #: ../source/specifications/core-metadata.rst:712 msgid "" @@ -13051,6 +18394,10 @@ msgid "" "it isn't at all clear how tools should interpret them in the context of an " "open index server such as `PyPI `__." msgstr "" +"இந்த பிரிவில் உள்ள புலங்கள் தற்போது அரிதாகவே பயன்படுத்தப்படுகின்றன, ஏனெனில் அவற்றின் " +"வடிவமைப்பு லினக்ச் தொகுப்பு மேலாண்மை அமைப்புகளில் ஒப்பிடக்கூடிய வழிமுறைகளால் ஈர்க்கப்பட்டது" +", மேலும் `பைபி <போன்ற திறந்த குறியீட்டு சேவையகத்தின் சூழலில் கருவிகள் அவற்றை எவ்வாறு " +"விளக்க வேண்டும் என்பது தெளிவாகத் தெரியவில்லை https://pypi.org> ____." #: ../source/specifications/core-metadata.rst:717 msgid "" @@ -13061,10 +18408,15 @@ msgid "" "used for their originally intended purpose in combination with a curated " "package repository." msgstr "" +"இதன் விளைவாக, பிரபலமான நிறுவல் கருவிகள் அவற்றை முற்றிலுமாக புறக்கணிக்கின்றன, இதன் " +"பொருள் தொகுப்பு வெளியீட்டாளர்கள் அவற்றை சரியான முறையில் அமைக்க சிறிய ஊக்கத்தொகை இல்லை. " +"இருப்பினும், அவை மேனிலை தரவு விவரக்குறிப்பில் தக்கவைக்கப்பட்டுள்ளன, ஏனெனில் அவை செய்தி " +"நோக்கங்களுக்காக இன்னும் பயனுள்ளதாக இருக்கும், மேலும் அவை ஒரு தொகுக்கப்பட்ட தொகுப்பு " +"களஞ்சியத்துடன் இணைந்து அவற்றின் முதலில் நோக்கம் கொண்ட நோக்கத்திற்காக பயன்படுத்தப்படலாம்." #: ../source/specifications/core-metadata.rst:727 msgid "Provides-Dist (multiple use)" -msgstr "" +msgstr "வழங்கும்-டீச்ட் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:734 msgid "" @@ -13072,6 +18424,9 @@ msgid "" "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:739 msgid "" @@ -13081,6 +18436,11 @@ msgid "" "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:746 msgid "" @@ -13092,6 +18452,12 @@ msgid "" "bindings``, allowing other projects to depend only on having at most one of " "them installed." msgstr "" +"ஒரு வழங்கல் ஒரு \"மெய்நிகர்\" திட்ட பெயரையும் வழங்கக்கூடும், இது தனித்தனியாக " +"விநியோகிக்கப்பட்ட எந்தவொரு திட்டத்திற்கும் பொருந்தாது: பல திட்டங்களில் ஒன்றால் வழங்கக்கூடிய " +"ஒரு சுருக்க திறனைக் குறிக்க அத்தகைய பெயர் பயன்படுத்தப்படலாம். எ.கா., பல திட்டங்கள் " +"கொடுக்கப்பட்ட ORM ஆல் பயன்படுத்த RDBMS பிணைப்புகளை வழங்கக்கூடும்: ஒவ்வொரு திட்டமும் இது ``" +" ORM-பிணைப்புகளை` வழங்குகிறது என்று அறிவிக்கலாம், மற்ற திட்டங்கள் அவற்றில் " +"பெரும்பாலானவற்றில் நிறுவப்பட்டிருப்பதை மட்டுமே சார்ந்து இருக்க அனுமதிக்கிறது." #: ../source/specifications/core-metadata.rst:754 msgid "" @@ -13099,10 +18465,13 @@ msgid "" "in :doc:`version-specifiers`. The distribution's version number will be " "implied if none is specified." msgstr "" +"ஒரு பதிப்பு அறிவிப்பு வழங்கப்படலாம் மற்றும் விவரிக்கப்பட்டுள்ள விதிகளைப் பின்பற்ற வேண்டும்: " +"DOC: `பதிப்பு-விவரக்குறிப்புகள்`. எதுவும் குறிப்பிடப்படாவிட்டால் விநியோகத்தின் பதிப்பு எண்" +" குறிக்கப்படும்." #: ../source/specifications/core-metadata.rst:769 msgid "Obsoletes-Dist (multiple use)" -msgstr "" +msgstr "வழக்கற்றுப் போகும் (பல பயன்பாடு)" #: ../source/specifications/core-metadata.rst:776 msgid "" @@ -13110,12 +18479,17 @@ msgid "" "which this distribution renders obsolete, meaning that the two projects " "should not be installed at the same time." msgstr "" +"ஒவ்வொரு நுழைவுக்கும் ஒரு டிச்டிடில்ச் திட்டத்தின் விநியோகத்தை விவரிக்கும் ஒரு சரம் உள்ளது, " +"இது இந்த வழங்கல் வழக்கற்றுப் போகிறது, அதாவது இரண்டு திட்டங்களும் ஒரே நேரத்தில் " +"நிறுவப்படக்கூடாது." #: ../source/specifications/core-metadata.rst:780 msgid "" "Version declarations can be supplied. Version numbers must be in the format " "specified in :doc:`version-specifiers`." msgstr "" +"பதிப்பு அறிவிப்புகள் வழங்கப்படலாம். பதிப்பு எண்கள் குறிப்பிடப்பட்ட வடிவத்தில் இருக்க வேண்டும்:" +" DOC: `பதிப்பு-விவரிப்பாளர்கள்`." #: ../source/specifications/core-metadata.rst:785 msgid "" @@ -13123,58 +18497,83 @@ msgid "" "g. Gorgon 2.3 gets subsumed into Torqued Python 1.0. When you install " "Torqued Python, the Gorgon distribution should be removed." msgstr "" +"திட்டத்தின் பெயர் மாற்றங்கள் இருந்தால் இந்த துறையின் மிகவும் பொதுவான பயன்பாடு, எ.கா. கோர்கன்" +" 2.3 முறுக்கு பைதான் 1.0 க்குள் நுழைகிறது. நீங்கள் முறுக்கு பைதானை நிறுவும்போது, கோர்கன்" +" விநியோகத்தை அகற்ற வேண்டும்." #: ../source/specifications/core-metadata.rst:798 msgid "Deprecated Fields" +msgstr "நீக்கப்பட்ட புலங்கள்" + +#: ../source/specifications/core-metadata.rst:800 +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:804 +#: ../source/specifications/core-metadata.rst:809 msgid "Home-page" -msgstr "" +msgstr "முகப்பு பக்கம்" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" +"ஒன்றுக்கு: PEP: `753`, பயன்படுத்தவும்: Ref:` கோர்-மெட்டாடேட்டா-திட்ட-உர்எல்` அதற்கு " +"பதிலாக." -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." -msgstr "" +msgstr "விநியோகத்தின் முகப்பு பக்கத்திற்கான முகவரி ஐக் கொண்ட ஒரு சரம்." -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" -msgstr "" +msgstr "பதிவிறக்க-உல்ல்" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" -msgstr "" +msgstr "தேவை" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" -msgstr "" +msgstr "`` தேவை-டிச்ட்`` க்கு ஆதரவாக" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" +"ஒவ்வொரு நுழைவுக்கும் இந்த தொகுப்பால் தேவைப்படும் வேறு சில தொகுதி அல்லது தொகுப்பை " +"விவரிக்கும் ஒரு சரம் உள்ளது." -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13184,34 +18583,47 @@ msgid "" "on the end consisting of the letter 'a' or 'b' followed by a number. Example " "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" +"ஒரு பதிப்பு அறிவிப்பு என்பது நிபந்தனை ஆபரேட்டர்கள் மற்றும் பதிப்பு எண்களின் தொடர் ஆகும், " +"இது காற்புள்ளிகளால் பிரிக்கப்பட்டுள்ளது. நிபந்தனை ஆபரேட்டர்கள் \"<\", \">\" ', \"<=\", " +"\"> =\", \"==\", மற்றும் \"! =\" ஆகியவற்றில் ஒன்றாக இருக்க வேண்டும். பதிப்பு எண்கள் `` " +"distutils.version.strictversion` வகுப்பு: இரண்டு அல்லது மூன்று புள்ளி-பிரிக்கப்பட்ட " +"எண் கூறுகள், 'A' அல்லது என்ற எழுத்தை உள்ளடக்கிய ஒரு விருப்பமான \"முன் வெளியீட்டு\" " +"குறிச்சொல்லுடன் ஏற்றுக்கொள்ளப்பட்ட வடிவத்தில் இருக்க வேண்டும் 'பி' அதைத் தொடர்ந்து ஒரு எண். " +"எடுத்துக்காட்டு பதிப்பு எண்கள் \"1.0\", \"2.3A2\", \"1.3.99\"," -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 msgid "" "Any number of conditional operators can be specified, e.g. the string " "\">1.0, !=1.3.4, <2.0\" is a legal version declaration." msgstr "" +"எந்தவொரு நிபந்தனை ஆபரேட்டர்களும் குறிப்பிடப்படலாம், எ.கா. \"> 1.0,! = 1.3.4, <2.0\" " +"என்ற சரம் ஒரு சட்ட பதிப்பு அறிவிப்பாகும்." -#: ../source/specifications/core-metadata.rst:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" +"பின்வரும் அனைத்தும் சாத்தியமான தேவை சரங்கள்: \"RFC822\", \"Zlib (> = 1.1.4)\", " +"\"ZOPE\"." -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" -msgstr "" +msgstr "வழங்குகிறது" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" -msgstr "" +msgstr "`` வழங்கும்-டிச்ட்`` க்கு ஆதரவாக" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13219,96 +18631,114 @@ msgid "" "(without a comparison operator); the package’s version number will be " "implied if none is specified." msgstr "" +"ஒவ்வொரு உள்ளீட்டிலும் ஒரு தொகுப்பு அல்லது தொகுதியை விவரிக்கும் ஒரு சரம் உள்ளது, அது " +"நிறுவப்பட்டவுடன் இந்த தொகுப்பு வழங்கப்படும். இந்த சரங்கள் தேவைகள் புலங்களில் " +"பயன்படுத்தப்படும்வற்றுடன் பொருந்த வேண்டும். ஒரு பதிப்பு அறிவிப்பு வழங்கப்படலாம் (ஒப்பீட்டு " +"ஆபரேட்டர் இல்லாமல்); எதுவும் குறிப்பிடப்படவில்லை என்றால் தொகுப்பின் பதிப்பு எண் " +"குறிக்கப்படும்." -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" -msgstr "" +msgstr "வழக்கற்றுப்போன" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" -msgstr "" +msgstr "`` வழக்கற்றுப் போய்விடும்-டிச்ட்`` க்கு ஆதரவாக" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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 "" +"இந்த புலத்தின் மிகவும் பொதுவான பயன்பாடு ஒரு தொகுப்பு பெயர் மாற்றங்கள் இருந்தால், எ.கா. " +"கோர்கன் 2.3 முறுக்கு பைதான் 1.0 க்குள் நுழைகிறது. நீங்கள் முறுக்கு பைதானை நிறுவும்போது, " +"கோர்கன் தொகுப்பு அகற்றப்பட வேண்டும்." -#: ../source/specifications/core-metadata.rst:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" +"மார்ச் 2001: கோர் மேனிலை தரவு 1.0 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `241`." -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" +"ஏப்ரல் 2003: கோர் மேனிலை தரவு 1.1 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `314`:" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" +"பிப்ரவரி 2010: கோர் மேனிலை தரவு 1.2 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `345`." -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" +"பிப்ரவரி 2018: கோர் மேனிலை தரவு 2.1 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `566`." -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." -msgstr "" +msgstr "`` விளக்கம்-உள்ளடக்க-வகை`` மற்றும் `` வழங்குகிறது-எக்ச்ட்ரா``." -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." -msgstr "" +msgstr "மெட்டாடேட்டாவை சாதொபொகு ஆக மாற்றுவதற்கான நியமன முறை சேர்க்கப்பட்டது." -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." -msgstr "" +msgstr "`` பெயர்` `புலத்தின் இலக்கணத்தை கட்டுப்படுத்தியது." -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" +"அக்டோபர் 2020: கோர் மேனிலை தரவு 2.2 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `643`." -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." -msgstr "" +msgstr "`` டைனமிக்`` புலம் சேர்க்கப்பட்டது." -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" +"மார்ச் 2022: கோர் மேனிலை தரவு 2.3 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `685`." -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." -msgstr "" +msgstr "கூடுதல் பெயர்கள் இயல்பாக்கப்பட வேண்டும்." -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" +"ஆகச்ட் 2024: கோர் மேனிலை தரவு 2.4 மூலம் அங்கீகரிக்கப்பட்டது: PEP: `639`." -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." -msgstr "" +msgstr "`` உரிம-வெளிப்பாடு`` புலத்தை சேர்த்தது." -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." -msgstr "" +msgstr "`` உரிம-கோப்பு`` புலத்தை சேர்த்தது." -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" -msgstr "" +msgstr "மறுசீரமைக்கப்பட்ட டெக்ச்ட் மார்க்அப்: https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" -msgstr "" +msgstr "RFC 822 நீண்ட தலைப்பு புலங்கள் :: RFC: `822#பிரிவு -3.1.1`" #: ../source/specifications/dependency-groups.rst:5 msgid "Dependency Groups" -msgstr "" +msgstr "சார்பு குழுக்கள்" #: ../source/specifications/dependency-groups.rst:7 msgid "" @@ -13316,6 +18746,9 @@ msgid "" "package requirements in ``pyproject.toml`` files such that they are not " "included in project metadata when it is built." msgstr "" +"இந்த விவரக்குறிப்பு சார்பு குழுக்களை வரையறுக்கிறது, இது தொகுப்பு தேவைகளை `` " +"pyproject.toml`` கோப்புகளில் சேமிப்பதற்கான ஒரு வழிமுறையாகும், அவை கட்டமைக்கப்பட்டால் " +"திட்ட மெட்டாடேட்டாவில் சேர்க்கப்படாதவை." #: ../source/specifications/dependency-groups.rst:11 msgid "" @@ -13323,6 +18756,9 @@ msgid "" "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 "" @@ -13330,6 +18766,8 @@ msgid "" "standardized subset of the capabilities of ``requirements.txt`` files (which " "are ``pip``-specific)." msgstr "" +"அடிப்படையில், சார்பு குழுக்கள் `` தேவைகள். Txt`` கோப்புகளின் திறன்களின் தரப்படுத்தப்பட்ட " +"துணைக்குழு என்று கருதப்பட வேண்டும் (அவை `` பிப்`-குறிப்பிட்டவை)." #: ../source/specifications/dependency-groups.rst:20 #: ../source/specifications/dependency-specifiers.rst:26 @@ -13338,19 +18776,19 @@ msgstr "" #: ../source/specifications/index-hosted-attestations.rst:17 #: ../source/specifications/inline-script-metadata.rst:13 msgid "Specification" -msgstr "" +msgstr "விவரக்குறிப்பு" #: ../source/specifications/dependency-groups.rst:25 msgid "This is a simple table which shows a ``test`` group::" -msgstr "" +msgstr "இது ஒரு எளிய அட்டவணை, இது `` சோதனை`` குழுவைக் காட்டுகிறது ::" #: ../source/specifications/dependency-groups.rst:30 msgid "and a similar table which defines ``test`` and ``coverage`` groups::" -msgstr "" +msgstr "`` சோதனை`` மற்றும் `` கவரேச்`` குழுக்களை வரையறுக்கும் ஒத்த அட்டவணை ::" #: ../source/specifications/dependency-groups.rst:37 msgid "The ``[dependency-groups]`` Table" -msgstr "" +msgstr "`` [சார்பு-குழுக்கள்] `` அட்டவணை" #: ../source/specifications/dependency-groups.rst:39 msgid "" @@ -13359,6 +18797,10 @@ msgid "" "number of user-defined keys, each of which has, as its value, a list of " "requirements." msgstr "" +"சார்பு குழுக்கள் `` pyproject.toml`` இல் `` சார்பு-குழுக்கள்`` என்ற அட்டவணையாக " +"வரையறுக்கப்படுகின்றன. `` சார்பு-குழுக்கள்` அட்டவணையில் தன்னிச்சையான எண்ணிக்கையிலான பயனர் " +"வரையறுக்கப்பட்ட விசைகள் உள்ளன, அவை ஒவ்வொன்றும் அதன் மதிப்பாக, தேவைகளின் பட்டியலைக் " +"கொண்டுள்ளன." #: ../source/specifications/dependency-groups.rst:44 msgid "" @@ -13367,6 +18809,10 @@ msgid "" "Dependency Groups MUST :ref:`normalize ` these names " "before comparisons." msgstr "" +"`` [சார்பு-குழுக்கள்] `` விசைகள், சில சமயங்களில் \"குழு பெயர்கள்\" என்றும் அழைக்கப்பட " +"வேண்டும்: குறிப்பு: `செல்லுபடியாகும் இயல்பாக்கப்படாத பெயர்கள் <பெயர்-வடிவ>`. சார்பு " +"குழுக்களைக் கையாளும் கருவிகள் கட்டாயம்: குறிப்பு: `இயல்பாக்குதல் <பெயர்-இயல்பாக்கம்>` " +"ஒப்பீடுகளுக்கு முன் இந்த பெயர்கள்." #: ../source/specifications/dependency-groups.rst:49 msgid "" @@ -13374,6 +18820,8 @@ msgid "" "and if duplicate names are detected after normalization, tools SHOULD emit " "an error." msgstr "" +"அசல், இயல்பாக்கப்படாத பெயரை பயனர்களுக்கு வழங்க கருவிகள் விரும்ப வேண்டும், மேலும் " +"இயல்பாக்கத்திற்குப் பிறகு நகல் பெயர்கள் கண்டறியப்பட்டால், கருவிகள் பிழையை வெளியிட வேண்டும்." #: ../source/specifications/dependency-groups.rst:53 msgid "" @@ -13382,22 +18830,28 @@ msgid "" "Strings must be valid :ref:`dependency specifiers `, " "and tables must be valid Dependency Group Includes." msgstr "" +"தேவை பட்டியல்கள், `` [சார்பு-குழுக்கள்] `` இல் உள்ள மதிப்புகள் சரங்கள், அட்டவணைகள் " +"(பைத்தானில் `டிக்ட்``) அல்லது சரங்கள் மற்றும் அட்டவணைகளின் கலவையைக் கொண்டிருக்கலாம். சரங்கள் " +"செல்லுபடியாகும்: ref: `சார்பு குறிப்பான்கள் <சார்பு-விவரக்குறிப்புகள்>`, மற்றும் அட்டவணைகள்" +" சரியான சார்பு குழு அடங்கும்." #: ../source/specifications/dependency-groups.rst:59 msgid "Dependency Group Include" -msgstr "" +msgstr "சார்பு குழு அடங்கும்" #: ../source/specifications/dependency-groups.rst:61 msgid "" "A Dependency Group Include includes another Dependency Group in the current " "group." -msgstr "" +msgstr "ஒரு சார்பு குழுவில் தற்போதைய குழுவில் மற்றொரு சார்பு குழு அடங்கும்." #: ../source/specifications/dependency-groups.rst:64 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:67 msgid "" @@ -13408,6 +18862,11 @@ msgid "" "evaluate to ``[\"c\", \"a\", \"b\", \"d\"]`` when Dependency Group Includes " "are expanded." msgstr "" +"பெயரிடப்பட்ட சார்பு குழுவின் உள்ளடக்கங்களுக்கு சமமானதாக அடங்கும், சேர்க்கப்பட்ட இடத்தில் " +"தற்போதைய குழுவில் செருகப்படுகிறது. எடுத்துக்காட்டாக, `` foo = [\"a\", \"b\"] `` ஒரு" +" குழு, மற்றும் `` பார் = [\"சி\", {சேர்க்கவும்-குழு = \"ஃபூ\"}, \"டி\"] `` மற்றொன்று" +", `` பார்`` `` [\"சி\", \"ஏ\", \"பி\", \"டி\"] `` சார்புடைய குழு சேர்க்கப்படும்போது" +" விரிவாக்கப்படும்போது மதிப்பீடு செய்ய வேண்டும்." #: ../source/specifications/dependency-groups.rst:73 msgid "" @@ -13415,6 +18874,9 @@ 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:90 msgid "" @@ -13423,6 +18885,10 @@ msgid "" "any other case in which they are asked to process the same requirement " "multiple times with different version constraints." msgstr "" +"`` அனைத்தையும்`` இன் தீர்க்கப்பட்ட மதிப்பு `` " +"[\"ஃபூ\", \"ஃபூ\", \"ஃபூ> 1.0\", \"ஃபூ <1.0\"] `` ஆக இருக்க வேண்டும். கருவிகள் " +"அத்தகைய பட்டியலை சரியாகக் கையாள வேண்டும், அதே நேரத்தில் வெவ்வேறு பதிப்பு தடைகளுடன் ஒரே " +"தேவையை பல முறை செயலாக்கும்படி கேட்கப்படும் வேறு எந்த வழக்கையும் அவர்கள் கையாளுவார்கள்." #: ../source/specifications/dependency-groups.rst:95 msgid "" @@ -13431,10 +18897,13 @@ 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:100 msgid "Package Building" -msgstr "" +msgstr "தொகுப்பு கட்டிடம்" #: ../source/specifications/dependency-groups.rst:102 msgid "" @@ -13443,6 +18912,9 @@ msgid "" "``METADATA`` files should not include referenceable fields containing " "Dependency Groups." msgstr "" +"கட்டிய பின்தளத்தில் கட்டமைக்கப்பட்ட விநியோகங்களில் சார்பு குழு தரவை தொகுப்பு மெட்டாடேட்டாவா" +"க சேர்க்கக்கூடாது. இதன் பொருள் Sdist `` pkg-info`` மற்றும் சக்கரம் `` மெட்டாடேட்டா`` " +"கோப்புகள் சார்பு குழுக்களைக் கொண்ட குறிப்பிடக்கூடிய புலங்களைக் கொண்டிருக்கக்கூடாது." #: ../source/specifications/dependency-groups.rst:106 msgid "" @@ -13451,10 +18923,14 @@ msgid "" "``[dependency-groups]``. However, the table's contents are not part of a " "built package's interfaces." msgstr "" +"எவ்வாறாயினும், மாறும் மெட்டாடேட்டாவின் மதிப்பீட்டில் சார்பு குழுக்களைப் பயன்படுத்துவது " +"செல்லுபடியாகும், மேலும் SDIST களில் சேர்க்கப்பட்டுள்ள `` pyproject.toml`` கோப்புகள் " +"இன்னும் `` [சார்பு-குழுக்கள்] `` கொண்டிருக்கும். இருப்பினும், அட்டவணையின் உள்ளடக்கங்கள் " +"கட்டப்பட்ட தொகுப்பின் இடைமுகங்களின் ஒரு பகுதியாக இல்லை." #: ../source/specifications/dependency-groups.rst:112 msgid "Installing Dependency Groups & Extras" -msgstr "" +msgstr "சார்பு குழுக்கள் மற்றும் கூடுதல் நிறுவுதல்" #: ../source/specifications/dependency-groups.rst:114 msgid "" @@ -13462,6 +18938,9 @@ msgid "" "referring to Dependency Groups. Tools are expected to provide dedicated " "interfaces for this purpose." msgstr "" +"சார்பு குழுக்களை நிறுவ அல்லது குறிப்பிடுவதற்கு தொடரியல் அல்லது " +"விவரக்குறிப்பு-வரையறுக்கப்பட்ட இடைமுகம் எதுவும் இல்லை. கருவிகள் இந்த நோக்கத்திற்காக பிரத்யே" +"க இடைமுகங்களை வழங்கும் என்று எதிர்பார்க்கப்படுகிறது." #: ../source/specifications/dependency-groups.rst:118 msgid "" @@ -13472,10 +18951,16 @@ msgid "" "Dependency Groups whose names match extras, and tools MAY treat such " "matching as an error." msgstr "" +"கூடுதல்வற்றை நிர்வகிப்பதற்காகச் செய்வதைப் போலவே சார்பு குழுக்களுடன் தொடர்புகொள்வதற்கு அதே " +"அல்லது ஒத்த இடைமுகங்களை வழங்க கருவிகள் தேர்வு செய்யலாம். கருவிகள் ஆசிரியர்கள் " +"அறிவுறுத்தப்படுகிறார்கள், விவரக்குறிப்பைக் கொண்டிருப்பதைத் தடைசெய்யவில்லை, அதன் பெயர் சார்பு" +" குழுவுடன் பொருந்துகிறது. தனித்தனியாக, பயனர்கள் சார்பு குழுக்களை உருவாக்குவதைத் தவிர்க்" +"க அறிவுறுத்தப்படுகிறார்கள், அதன் பெயர்கள் கூடுதல் பொருந்துகின்றன, மேலும் கருவிகள் அத்தகைய " +"பொருத்தத்தை பிழையாகக் கருதலாம்." #: ../source/specifications/dependency-groups.rst:126 msgid "Validation and Compatibility" -msgstr "" +msgstr "சரிபார்ப்பு மற்றும் பொருந்தக்கூடிய தன்மை" #: ../source/specifications/dependency-groups.rst:128 msgid "" @@ -13484,18 +18969,25 @@ msgid "" "possibility of future extensions to the specification, so that they do not " "unnecessarily emit errors or warnings." msgstr "" +"சார்பு குழுக்களை ஆதரிக்கும் கருவிகள் தரவைப் பயன்படுத்துவதற்கு முன்பு அதை சரிபார்க்க " +"விரும்பலாம். இத்தகைய சரிபார்ப்பை செயல்படுத்தும்போது, விவரக்குறிப்புக்கு எதிர்கால " +"நீட்டிப்புகளின் சாத்தியக்கூறுகள் குறித்து ஆசிரியர்கள் அறிந்திருக்க வேண்டும், இதனால் அவர்கள் " +"தேவையின்றி பிழைகள் அல்லது எச்சரிக்கைகளை வெளியிடுவதில்லை." #: ../source/specifications/dependency-groups.rst:133 msgid "" "Tools SHOULD error when evaluating or processing unrecognized data in " "Dependency Groups." msgstr "" +"சார்பு குழுக்களில் அங்கீகரிக்கப்படாத தரவை மதிப்பீடு செய்யும்போது அல்லது செயலாக்கும்போது " +"கருவிகள் பிழையாக இருக்க வேண்டும்." #: ../source/specifications/dependency-groups.rst:136 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:139 msgid "" @@ -13503,6 +18995,8 @@ msgid "" "allow the ``foo`` group to be used and only error if the ``bar`` group is " "used:" msgstr "" +"இதன் பொருள் பின்வரும் தரவின் முன்னிலையில், பெரும்பாலான கருவிகள் `` ஃபூ`` குழுவை " +"பயன்படுத்த அனுமதிக்க வேண்டும், மேலும் `` பார்`` குழு பயன்படுத்தப்பட்டால் மட்டுமே பிழை:" #: ../source/specifications/dependency-groups.rst:150 msgid "" @@ -13510,11 +19004,14 @@ msgid "" "Linters and validators are an example, as their purpose is to validate the " "contents of all Dependency Groups." msgstr "" +"பல அறியப்பட்ட கருவிகள் உள்ளன, அவை கடுமையானதாக இருக்க நல்ல காரணத்தைக் கொண்டுள்ளன. அனைத்து" +" சார்பு குழுக்களின் உள்ளடக்கங்களையும் சரிபார்ப்பதே அவற்றின் நோக்கம் என்பதால், லிண்டர்கள் மற்றும் " +"வாலிடேட்டர்கள் ஒரு எடுத்துக்காட்டு." #: ../source/specifications/dependency-groups.rst:155 #: ../source/specifications/inline-script-metadata.rst:123 msgid "Reference Implementation" -msgstr "" +msgstr "குறிப்பு செயல்படுத்தல்" #: ../source/specifications/dependency-groups.rst:157 msgid "" @@ -13522,20 +19019,25 @@ msgid "" "Group to stdout, newline delimited. The output is therefore valid " "``requirements.txt`` data." msgstr "" +"பின்வரும் குறிப்பு செயல்படுத்தல் ஒரு சார்பு குழுவின் உள்ளடக்கங்களை stdout க்கு " +"அச்சிடுகிறது, நியூலைன் பிரிக்கப்பட்டது. எனவே வெளியீடு செல்லுபடியாகும் `` தேவைகள். " +"Txt`` தரவு." #: ../source/specifications/dependency-groups.rst:250 msgid "October 2024: This specification was approved through :pep:`735`." -msgstr "" +msgstr "அக்டோபர் 2024: இந்த விவரக்குறிப்பு அங்கீகரிக்கப்பட்டது: PEP: `735`." #: ../source/specifications/dependency-specifiers.rst:7 msgid "Dependency specifiers" -msgstr "" +msgstr "சார்பு குறிப்பான்கள்" #: ../source/specifications/dependency-specifiers.rst:9 msgid "" "This document describes the dependency specifiers format as originally " "specified in :pep:`508`." msgstr "" +"இந்த ஆவணம் முதலில் குறிப்பிடப்பட்டுள்ளபடி சார்பு குறிப்பிட்ட வடிவமைப்பை விவரிக்கிறது: " +"PEP: `508`." #: ../source/specifications/dependency-specifiers.rst:12 msgid "" @@ -13545,6 +19047,12 @@ msgid "" "Sometimes dependencies are only relevant in one platform, or only some " "versions are acceptable, so the language permits describing all these cases." msgstr "" +"ஒரு சார்புநிலையின் வேலை, பிஐபி [#PIP] போன்ற கருவிகளை நிறுவுவதற்கு சரியான தொகுப்பைக்" +" கண்டுபிடிப்பது. சில நேரங்களில் இது மிகவும் தளர்வானது - ஒரு பெயரைக் குறிப்பிடுவது, சி" +"ல நேரங்களில் மிகவும் குறிப்பிட்டது - நிறுவ ஒரு குறிப்பிட்ட கோப்பைக் குறிப்பிடுகிறது. சி" +"ல நேரங்களில் சார்புநிலைகள் ஒரு தளத்தில் மட்டுமே பொருத்தமானவை, அல்லது சில பதிப்புகள் " +"மட்டுமே ஏற்றுக்கொள்ளத்தக்கவை, எனவே இந்த நிகழ்வுகள் அனைத்தையும் விவரிக்கும் மொழி " +"அனுமதிக்கிறது." #: ../source/specifications/dependency-specifiers.rst:18 msgid "" @@ -13555,18 +19063,25 @@ msgid "" "specification ` is not actually implemented in pip, but " "we use that format rather than pip's current native format." msgstr "" +"வரையறுக்கப்பட்ட மொழி ஒரு சிறிய வரி அடிப்படையிலான வடிவமாகும், இது ஏற்கனவே PIP தேவைகள்" +" கோப்புகளில் பரவலான பயன்பாட்டில் உள்ளது, இருப்பினும் அந்தக் கோப்புகள் அனுமதிக்கும் கட்டளை " +"வரி விருப்பத்தை நாங்கள் குறிப்பிடவில்லை. ஒரு எச்சரிக்கை உள்ளது - முகவரி குறிப்பு படிவம்" +", குறிப்பிடப்பட்டுள்ளது: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு " +"-விவரக்குறிப்புகள்>` உண்மையில் PIP இல் செயல்படுத்தப்படவில்லை, ஆனால் PIP இன் தற்போதைய சொந்த " +"வடிவமைப்பைக் காட்டிலும் அந்த வடிவமைப்பைப் பயன்படுத்துகிறோம்." #: ../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 "" +msgstr "குறைந்தபட்ச முகவரி அடிப்படையிலான தேடல் ::" #: ../source/specifications/dependency-specifiers.rst:40 msgid "Concepts" -msgstr "" +msgstr "கருத்துக்கள்" #: ../source/specifications/dependency-specifiers.rst:42 msgid "" @@ -13576,16 +19091,23 @@ msgid "" "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 "" +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 "" @@ -13595,12 +19117,18 @@ msgid "" "such as comments, multiple line support via continuations, or other such " "features." msgstr "" +"விநியோக விவரக்குறிப்பு ASCII உரையில் எழுதப்பட்டுள்ளது. ஒரு துல்லியமான இலக்கணத்தை வழங்க " +"நாங்கள் ஒரு வோக்கோசு [#பார்ச்லி] _ இலக்கணத்தைப் பயன்படுத்துகிறோம். விவரங்கள் ஒரு பெரிய " +"அமைப்பில் உட்பொதிக்கப்படும் என்று எதிர்பார்க்கப்படுகிறது, இது கருத்துகள், தொடர்ச்சியான பல " +"வரி உதவி அல்லது இதுபோன்ற பிற நற்பொருத்தங்கள் போன்ற ஃப்ரேமிங்கை வழங்குகிறது." #: ../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 "" @@ -13608,50 +19136,57 @@ msgid "" "specifier specification `. (Note: URI is defined in :rfc:" "`std-66 <3986>`)::" msgstr "" +"பதிப்புகள்: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-விவரக்குறிப்புகள்>` " +"விதிகளின் படி குறிப்பிடப்படலாம். ." #: ../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 "" +msgstr "கூடுதல் பெயர்களுக்கான கட்டுப்பாடுகள் வரையறுக்கப்பட்டுள்ளன: PEP: `685`." #: ../source/specifications/dependency-specifiers.rst:113 msgid "Giving us a rule for name based requirements::" -msgstr "" +msgstr "பெயர் அடிப்படையிலான தேவைகளுக்கு ஒரு விதியை எங்களுக்கு வழங்குதல் ::" #: ../source/specifications/dependency-specifiers.rst:117 msgid "And a rule for direct reference specifications::" -msgstr "" +msgstr "மற்றும் நேரடி குறிப்பு விவரக்குறிப்புகளுக்கான விதி ::" #: ../source/specifications/dependency-specifiers.rst:121 msgid "Leading to the unified rule that can specify a dependency.::" -msgstr "" +msgstr "சார்புநிலையைக் குறிப்பிடக்கூடிய ஒருங்கிணைந்த விதிக்கு வழிவகுக்கிறது. ::" #: ../source/specifications/dependency-specifiers.rst:126 msgid "Whitespace" -msgstr "" +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:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" -msgstr "" +msgstr "பெயர்கள்" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13662,38 +19197,54 @@ msgid "" "redefinition of name may take place in a future metadata PEP. The regex (run " "with re.IGNORECASE) is::" msgstr "" +"பைதான் விநியோக பெயர்கள் தற்போது வரையறுக்கப்பட்டுள்ளன: PEP: `345`. விநியோகங்களுக்கான " +"முதன்மை அடையாளங்காட்டியாக பெயர்கள் செயல்படுகின்றன. அவை அனைத்து சார்பு " +"விவரக்குறிப்புகளிலும் உள்ளன, மேலும் அவை சொந்தமாக ஒரு விவரக்குறிப்பாக இருக்க போதுமானவை" +". இருப்பினும், பைபி பெயர்களில் கடுமையான கட்டுப்பாடுகளை வைக்கிறது - அவை ஒரு வழக்கு " +"உணர்வற்ற ரெசெக்சுடன் பொருந்த வேண்டும் அல்லது அவை ஏற்றுக்கொள்ளப்படாது. அதன்படி, இந்த ஆவணத்தில்" +" அந்த ரீசெக்சுக்கு அடையாளங்காட்டிகளுக்கான ஏற்றுக்கொள்ளக்கூடிய மதிப்புகளை நாங்கள் " +"கட்டுப்படுத்துகிறோம். பெயரின் முழு மறுவரையறை எதிர்கால மேனிலை தரவு பெப்பில் நடைபெறலாம்" +". ரீசெக்ச் (RE.IGNORECASE உடன் இயக்கவும்) ::" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" -msgstr "" +msgstr "கூடுதல்" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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:155 +#: ../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:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" +"பல கூடுதல் பட்டியலிடப்பட்டால், அனைத்து சார்புகளும் ஒன்றிணைக்கப்படுகின்றன." -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" -msgstr "" +msgstr "பதிப்புகள்" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13703,12 +19254,19 @@ msgid "" "brackets around a version are present for compatibility with :pep:`345` but " "should not be generated, only accepted." msgstr "" +"பதிப்பு எண்கள் மற்றும் பதிப்பு ஒப்பீடுகள் இரண்டிலும் மேலும் விவரங்களுக்கு `பதிப்பு " +"விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-விவரக்குறிப்புகள்>` ஐப் பார்க்கவும். பதிப்பு " +"விவரக்குறிப்புகள் பயன்படுத்தக்கூடிய விநியோகத்தின் பதிப்புகளைக் கட்டுப்படுத்துகின்றன. அவை " +"முகவரி வழியாக இல்லாமல், பெயரால் பார்க்கப்படும் விநியோகங்களுக்கு மட்டுமே பொருந்தும். " +"பதிப்பு ஒப்பீடு குறிப்பான்கள் அம்சத்திலும் பயன்படுத்தப்படுகிறது. ஒரு பதிப்பைச் சுற்றியுள்ள " +"விருப்ப அடைப்புக்குறிகள் பொருந்தக்கூடிய தன்மைக்கு உள்ளன: PEP: `345` ஆனால் " +"உருவாக்கப்படக்கூடாது, ஏற்றுக்கொள்ளப்பட்டது." -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" -msgstr "" +msgstr "சுற்றுச்சூழல் குறிப்பான்கள்" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13716,14 +19274,20 @@ msgid "" "older Python versions it has to be installed as a dependency. This can be " "expressed as so::" msgstr "" +"சுற்றுச்சூழல் குறிப்பான்கள் ஒரு சார்பு விவரக்குறிப்பை சார்புநிலை எப்போது பயன்படுத்த வேண்டும்" +" என்பதை விவரிக்கும் ஒரு விதியை வழங்க அனுமதிக்கின்றன. உதாரணமாக, ஆர்க்பர்ச் தேவைப்படும் ஒரு" +" தொகுப்பைக் கவனியுங்கள். பைத்தானில் 2.7 ஆர்க்பர்ச் எப்போதும் இருக்கும். பழைய பைதான் " +"பதிப்புகளில் இது ஒரு சார்புநிலையாக நிறுவப்பட வேண்டும். இதை அவ்வாறு வெளிப்படுத்தலாம் ::" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13731,8 +19295,12 @@ msgid "" "document fixes some issues that were observed in the design described in :" "pep:`426`." msgstr "" +"மார்க்கர் மொழி பைத்தானால் ஈர்க்கப்பட்டு, பாதுகாப்பு பாதிப்பாக மாறக்கூடிய தன்னிச்சையான " +"குறியீட்டை இயக்காமல் பாதுகாப்பாக மதிப்பீடு செய்யும் திறனுக்காக தேர்ந்தெடுக்கப்படுகிறது. " +"குறிப்பான்கள் முதலில் தரப்படுத்தப்பட்டன: PEP: `345`. இந்த ஆவணம் விவரிக்கப்பட்ட வடிவமைப்பில் " +"காணப்பட்ட சில சிக்கல்களை சரிசெய்கிறது: PEP: `426`." -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13744,8 +19312,16 @@ msgid "" "Python behaviour. Otherwise an error should be raised. e.g. the following " "will result in errors::" msgstr "" +"மார்க்கர் வெளிப்பாடுகளில் ஒப்பீடுகள் ஒப்பீட்டு ஆபரேட்டரால் தட்டச்சு செய்கின்றன. " +"இல் இல்லாத <மார்க்கர்_ஓபி> ஆபரேட்டர்கள் பைத்தானில் உள்ள சரங்களுக்கு அவர்கள் செய்வதைப் போலவே " +"செயல்படுகிறார்கள். ஆபரேட்டர்கள் பதிப்பு ஒப்பீட்டு விதிகளைப் " +"பயன்படுத்துகின்றன: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு " +"<பதிப்பு-விவரக்குறிப்புகள்>` அவை வரையறுக்கப்படும்போது (அதாவது இரு தரப்பினரும் சரியான " +"பதிப்பு விவரக்குறிப்பைக் கொண்டிருக்கும்போது). இந்த விவரக்குறிப்பின் வரையறுக்கப்பட்ட நடத்தை " +"எதுவும் இல்லை என்றால், ஆபரேட்டர் பைத்தானில் இருந்தால், ஆபரேட்டர் மீண்டும் பைதான் நடத்தைக்கு " +"விழுகிறார். இல்லையெனில் பிழை எழுப்பப்பட வேண்டும். எ.கா. பின்வருபவை பிழைகள் ::" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13754,29 +19330,41 @@ msgid "" "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 "" +"பயனர் வழங்கப்பட்ட மாறிலிகள் எப்போதுமே `` '`` அல்லது `\" \"` `` மேற்கோள் மதிப்பெண்களுடன் " +"சரங்களாக குறியாக்கம் செய்யப்படுகின்றன. பின்வாங்கல் தப்பித்தல் வரையறுக்கப்படவில்லை, ஆனால் " +"தற்போதுள்ள செயலாக்கங்கள் அவற்றை ஆதரிக்கின்றன. அவை இந்த விவரக்குறிப்பில் சேர்க்கப்படவில்லை, " +"ஏனெனில் அவை சிக்கலான தன்மையைச் சேர்க்கின்றன இன்று அவற்றைக் காணக்கூடிய தேவை இல்லை. ASCII- " +"மட்டும்." -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 "" +"\"OS_NAME\" போன்ற மார்க்கர் இலக்கணத்தில் உள்ள மாறிகள் மதிப்புகளுக்குத் தீர்கின்றன, பைதான் இயக்" +"க நேரத்தில் பார்க்கப்படுகின்றன. \"கூடுதல்\" தவிர அனைத்து மதிப்புகளும் இன்று அனைத்து பைதான்" +" பதிப்புகளிலும் வரையறுக்கப்பட்டுள்ளன - ஒரு மதிப்பு வரையறுக்கப்படாவிட்டால் குறிப்பான்களை " +"செயல்படுத்துவதில் பிழை." -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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 "" +"கொடுக்கப்பட்ட பைதான் செயல்படுத்தலில் மதிப்பைக் கணக்கிட முடியாத மாறிகள் பதிப்புகளுக்கு `` " +"0`` ஆகவும், மற்ற எல்லா மாறிகளுக்கும் வெற்று சரம் என்றும் மதிப்பீடு செய்ய வேண்டும்." -#: ../source/specifications/dependency-specifiers.rst:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13785,229 +19373,253 @@ msgid "" "this special handling is taking place, the \"extra\" variable should result " "in an error like all other unknown variables." msgstr "" +"\"கூடுதல்\" மாறி சிறப்பு. சக்கரத்தில் கொடுக்கப்பட்ட கூடுதல் விவரக்குறிப்புகள் `` " +"மெட்டாடேட்டா`` கோப்பில் எந்த விவரக்குறிப்புகள் பொருந்தும் என்பதைக் குறிக்க இது சக்கரங்களால் " +"பயன்படுத்தப்படுகிறது, ஆனால் `` மெட்டாடேட்டா`` கோப்பு ஒரு வரைவு பதிப்பை அடிப்படையாகக் " +"கொண்டது என்பதால்: PEP: `426`, இல்லை இதற்கான தற்போதைய விவரக்குறிப்பு. பொருட்படுத்தாமல், " +"இந்த சிறப்பு கையாளுதல் நடைபெறும் ஒரு சூழலுக்கு வெளியே, \"கூடுதல்\" மாறி மற்ற அனைத்து " +"அறியப்படாத மாறிகள் போன்ற பிழையை ஏற்படுத்தும்." -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" -msgstr "" +msgstr "மார்க்கர்" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" -msgstr "" +msgstr "பைதான் சமமான" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" -msgstr "" +msgstr "மாதிரி மதிப்புகள்" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" -msgstr "" +msgstr "`` os_name``" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" -msgstr "" +msgstr ": PY: தரவு: `os.name`" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" -msgstr "" +msgstr "`` posix``, `` சாவா``" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" -msgstr "" +msgstr "`` sys_platform``" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" -msgstr "" +msgstr ": PY: தரவு: `sys.platform`" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" +"`` லினக்ச்``, `` லினக்ச் 2``, `` டார்வின்``, `` `சாவா 1.8.0_51`` (\" லினக்ச் \"பைதான் " +"3 இலிருந்து மற்றும் பைதான் 2 இலிருந்து\" லினக்ச் 2 \"என்பதை நினைவில் கொள்க)" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" -msgstr "" +msgstr "`` இயங்குதள_மச்சின்``" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" -msgstr "" +msgstr ": py: func: `platurm.machine ()`" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" -msgstr "" +msgstr "`` x86_64``" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" -msgstr "" +msgstr "`` platurm_python_implementation``" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" -msgstr "" +msgstr ":py:func:`platform.python_implementation()`" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" -msgstr "" +msgstr "`` Cpython``, `` jython``" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" -msgstr "" +msgstr "`` PLATURM_REELEASE``" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" -msgstr "" +msgstr ":py:func:`platform.release()`" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" -msgstr "" +msgstr "`` `3.14.1-X86_64-Linode39``,` `` 14.5.0``, `` `` 1.8.0_51`" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" -msgstr "" +msgstr "`` இயங்குதள_ அமைப்பு``" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" -msgstr "" +msgstr ": py: func: `platurm.system ()`" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" -msgstr "" +msgstr "`` லினக்ச்``, `` விண்டோச்``, `` சாவா``" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" -msgstr "" +msgstr "`` PLATER_VERSION``" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" -msgstr "" +msgstr ": py: func: `platurm.version ()`" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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 "" +"``#1 SMP FRI APR 25 13:07:35 EDT 2014` `` `` சாவா ஆட்ச்பாட் (டி.எம்) 64-பிட் சர்வர் " +"வி.எம். 02:18:53 PDT 2015; ரூட்: xnu-2782.40.9 ~ 2/reulation_x86_64``" -#: ../source/specifications/dependency-specifiers.rst:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" -msgstr "" +msgstr "`` python_version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" -msgstr "" +msgstr "`` '.'" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" -msgstr "" +msgstr "`` 3.4``, `` 2.7``" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" -msgstr "" +msgstr "`` python_full_version``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" -msgstr "" +msgstr ":py:func:`platform.python_version()`" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" -msgstr "" +msgstr "`` 3.4.0``, `` 3.5.0b1``" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" -msgstr "" +msgstr "`` செயல்படுத்தல்_பெயர்``" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" -msgstr "" +msgstr ":py:data:`sys.implementation.name `" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" -msgstr "" +msgstr "`` cpython``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" -msgstr "" +msgstr "`` செயல்படுத்தல்_்வெர்சன்``" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" -msgstr "" +msgstr "கீழே உள்ள வரையறையைக் காண்க" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" -msgstr "" +msgstr "`` கூடுதல்``" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." -msgstr "" +msgstr "விவரக்குறிப்பை விளக்கும் சூழலால் வரையறுக்கப்படும்போது தவிர பிழை." -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" -msgstr "" +msgstr "`` சோதனை``" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" +"`` செயல்படுத்தல்_்வெர்சன்`` மார்க்கர் மாறி இதிலிருந்து பெறப்பட்டது: py: தரவு: `" +"sys.implementation.version `:" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" +"இந்த சுற்றுச்சூழல் குறிப்பான்கள் பிரிவு, ஆரம்பத்தில் வரையறுக்கப்பட்டுள்ளது: PEP: `508`, " +"சுற்றுச்சூழல் குறிப்பான்கள் பிரிவை மீறுகிறது: PEP:` 345`." -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" -msgstr "" +msgstr "முழுமையான இலக்கணம்" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" -msgstr "" +msgstr "முழுமையான வோக்கோசு இலக்கணம் ::" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" -msgstr "" +msgstr "ஒரு சோதனை நிரல் - இலக்கணம் ஒரு சரத்தில் இருந்தால் `` இலக்கணம்``:" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." -msgstr "" +msgstr "நவம்பர் 2015: இந்த விவரக்குறிப்பு அங்கீகரிக்கப்பட்டது: PEP: `508`." -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." "python_version_tuple()[:2])``, to accommodate potential future versions of " "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" +"சூலை 2019: `` python_version`` இன் வரையறை `மாற்றப்பட்டது <பைதான்-பதிப்பு-சேஞ்ச்_>` " +"`_` `தளத்திலிருந்து. ) [: 2]) ``, 2 இலக்க பெரிய மற்றும் சிறிய பதிப்புகளுடன் பைத்தானின்" +" எதிர்கால பதிப்புகளுக்கு இடமளிக்க (எ.கா. 3.10). [#future_versions] _" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 msgid "" "June 2024: The definition of ``version_many`` was changed to allow trailing " "commas, matching with the behavior of the Python implementation that has " "been in use since late 2022." msgstr "" +"சூன் 2024: 2022 ஆம் ஆண்டின் பிற்பகுதியிலிருந்து பயன்பாட்டில் உள்ள பைதான் அமலாக்கத்தின் " +"நடத்தையுடன் பொருந்தக்கூடிய, `` பதிப்பு_மனி`` இன் வரையறை மாற்றப்பட்டது." -#: ../source/specifications/dependency-specifiers.rst:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" +"PIP, பைதான் தொகுப்புகளுக்கான பரிந்துரைக்கப்பட்ட நிறுவி (http://pip.readthedocs.org/" +"en/stable/)" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" -msgstr "" +msgstr "வோக்கோசு பெக் நூலகம். (https://pypi.python.org/pypi/parsly/)" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" "peps/issues/560)" msgstr "" +"சுற்றுச்சூழல் மார்க்கர் மாறியின் வரையறையுடன் எதிர்கால பைதான் பதிப்புகள் சிக்கலாக இருக்கலாம் " +"`` பைதான்_்வெர்சன்`` (https://github.com/python/peps/issues/560)" #: ../source/specifications/direct-url.rst:6 msgid "Recording the Direct URL Origin of installed distributions" -msgstr "" +msgstr "நிறுவப்பட்ட விநியோகங்களின் நேரடி முகவரி தோற்றத்தை பதிவு செய்தல்" #: ../source/specifications/direct-url.rst:8 msgid "" @@ -14016,6 +19628,10 @@ msgid "" "Origin of the distribution. The general structure and usage of ``*.dist-" "info`` directories is described in :ref:`recording-installed-packages`." msgstr "" +"இந்த ஆவணம் ஒரு: கோப்பு: ``*. டிச்ட்-இன்ஃபோ`` ஒரு நிறுவப்பட்ட விநியோகத்தின் கோப்பகத்தில் " +"`டைரக்ட்_ஆர்ல்.சோன்` கோப்பைக் குறிப்பிடுகிறது, விநியோகத்தின் நேரடி முகவரி தோற்றத்தை பதிவு" +" செய்ய. ``*.Dist-info`` கோப்பகங்களின் பொதுவான கட்டமைப்பும் பயன்பாடும் இதில் " +"விவரிக்கப்பட்டுள்ளது: ref: `பதிவு-நிறுவப்பட்ட-தொகுப்புகள்`." #: ../source/specifications/direct-url.rst:17 msgid "" @@ -14023,19 +19639,26 @@ msgid "" "directory by installers when installing a distribution from a requirement " "specifying a direct URL reference (including a VCS URL)." msgstr "" +"தி: கோப்பு: `direct_url.json` கோப்பு உருவாக்கப்பட வேண்டும்: கோப்பு:`*. டிச்ட்-இன்ஃபோ` " +"கோப்பகத்தை நிறுவிகள் மூலம் நேரடி முகவரி குறிப்பைக் குறிப்பிடும் தேவையிலிருந்து ஒரு " +"விநியோகத்தை நிறுவும் போது (வி.சி.எச் முகவரி உட்பட)." #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 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 "" +"இந்த சாதொபொகு கோப்பு ஒரு UTF-8 குறியாக்கப்பட்டதாக இருக்க வேண்டும்,: RFC: `8259` " +"இணக்கமான, சீரியலைசேசன்: DOC:` நேரடி-உர்எல்-தரவு-கட்டமைப்பு`." #: ../source/specifications/direct-url.rst:29 msgid "" @@ -14044,6 +19667,10 @@ msgid "" "attempt to infer any VCS information and therefore MUST NOT output any VCS " "related information (such as ``vcs_info``) in :file:`direct_url.json`." msgstr "" +"கோரப்பட்ட முகவரி இல் கோப்பு: // திட்டம் மற்றும் வி.சி.எச் புதுப்பித்தலைக் கொண்டிருக்கும் உள்" +"ளக கோப்பகத்தை சுட்டிக்காட்டும்போது, நிறுவிகள் எந்த வி.சி.எச் தகவலையும் ஊகிக்க " +"முயற்சிக்கக்கூடாது, எனவே எந்த வி.சி.எச் தொடர்பான தகவல்களையும் வெளியிடக்கூடாது (போன்றவை " +"`VCS_INFO` `) இல்: கோப்பு:` direct_url.json`." #: ../source/specifications/direct-url.rst:36 msgid "" @@ -14054,14 +19681,21 @@ msgid "" "provided in the requested URL as faithfully as possible. This information is " "however *enriched* with more precise data, such as ``commit_id``." msgstr "" +"ஒரு பொதுவான விதியாக, நிறுவிகள் உருவாக்கும் போது கோரப்பட்ட முகவரி இல் வழங்கப்பட்ட " +"தகவல்களை முடிந்தவரை பாதுகாக்க வேண்டும்: கோப்பு: `direct_url.json`. எடுத்துக்காட்டாக " +"பயனர்: கடவுச்சொல் சூழல் மாறிகள் பாதுகாக்கப்பட வேண்டும், மேலும் கோரப்பட்ட முகவரி இல் " +"வழங்கப்பட்ட திருத்தத்தை முடிந்தவரை உண்மையாகவே `` கோரப்பட்ட_ரெவிசன்`` பிரதிபலிக்க வேண்டும்" +". எவ்வாறாயினும், `` கமிட்_ஐடி`` போன்ற துல்லியமான தரவுகளுடன் இந்த செய்தி * " +"செறிவூட்டப்படுகிறது." #: ../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 "" +msgstr "ஒரு `` sydread_url.json`` ஐ உருவாக்கும் கட்டளைகள்:" #: ../source/specifications/direct-url.rst:49 msgid "``pip install https://example.com/app-1.0.tgz``" @@ -14075,7 +19709,7 @@ msgstr "" msgid "" "``pip install \"app @ git+https://example.com/repo/app." "git#subdirectory=setup\"``" -msgstr "" +msgstr "`` பிஐபி நிறுவவும்" #: ../source/specifications/direct-url.rst:52 msgid "``pip install ./app``" @@ -14092,6 +19726,11 @@ msgid "" "directory where the git repository has been cloned to, and ``dir_info`` will " "be present with ``\"editable\": true`` and no ``vcs_info`` will be set)" msgstr "" +"`` பிஐபி நிறுவுதல் -பொருத்தப்பட்ட " +"\"பயன்பாடு @ git+https: //example.com/repo/app.git#subdirectory=setup\" `` (இந்" +"த விசயத்தில், `` url`` உள்ளக கோப்பகமாக இருக்கும் களஞ்சியம் நகலி செய்யப்பட்டுள்ளது, மற்றும் " +"`` dir_info`` `` திருத்தக்கூடியது \": உண்மை`` மற்றும் இல்லை `` vcs_info`` " +"அமைக்கப்படும்)" #: ../source/specifications/direct-url.rst:58 msgid "``pip install -e ./app``" @@ -14099,7 +19738,7 @@ msgstr "" #: ../source/specifications/direct-url.rst:60 msgid "Commands that *do not* generate a ``direct_url.json``" -msgstr "" +msgstr "* `` Direct_url.json`` ஐ உருவாக்காத * கட்டளைகள்" #: ../source/specifications/direct-url.rst:62 msgid "``pip install app``" @@ -14111,11 +19750,11 @@ msgstr "" #: ../source/specifications/direct-url.rst:69 msgid "March 2020: This specification was approved through :pep:`610`." -msgstr "" +msgstr "மார்ச் 2020: இந்த விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `610`." #: ../source/specifications/direct-url-data-structure.rst:7 msgid "Direct URL Data Structure" -msgstr "" +msgstr "நேரடி முகவரி தரவு அமைப்பு" #: ../source/specifications/direct-url-data-structure.rst:9 msgid "" @@ -14123,6 +19762,9 @@ msgid "" "represent URLs to python projects and distribution artifacts such as VCS " "source trees, local source trees, source distributions and wheels." msgstr "" +"இந்த ஆவணம் ஒரு JSON-Serializable சுருக்க தரவு கட்டமைப்பைக் குறிப்பிடுகிறது, இது " +"பைதான் திட்டங்களுக்கான முகவரி களைக் குறிக்கும் மற்றும் வி.சி.எச் மூல மரங்கள், உள்ளக மூல " +"மரங்கள், மூல வழங்கல் மற்றும் சக்கரங்கள் போன்ற விநியோக கலைப்பொருட்கள்." #: ../source/specifications/direct-url-data-structure.rst:13 msgid "" @@ -14132,12 +19774,19 @@ msgid "" "other examples are provided in the :ref:`Version specifier specification " "`." msgstr "" +"எழுதும் நேரத்தில், இந்த தரவு கட்டமைப்பின் பகுதிகளை ஒரு முகவரி ஆக எவ்வாறு ஒன்றிணைப்பது " +"என்பது முறையாக குறிப்பிடப்படவில்லை, அவை கருவிகளுக்கு அனுப்பப்படலாம். ஒரு பொதுவான " +"பிரதிநிதித்துவம் PIP முகவரி வடிவம் (`VCS உதவி ` _), பிற " +"எடுத்துக்காட்டுகள்: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு " +"<பதிப்பு-விவரக்குறிப்புகள்>`." #: ../source/specifications/direct-url-data-structure.rst:21 msgid "" "The Direct URL Data Structure MUST be a dictionary, serializable to JSON " "according to :rfc:`8259`." msgstr "" +"நேரடி முகவரி தரவு அமைப்பு ஒரு அகராதியாக இருக்க வேண்டும், இதன் படி சாதொபொகு க்கு " +"வரிசைப்படுத்தக்கூடியது: RFC: `8259`." #: ../source/specifications/direct-url-data-structure.rst:24 msgid "" @@ -14145,6 +19794,9 @@ msgid "" "``string``. Its content must be a valid URL according to the `WHATWG URL " "Standard `_." msgstr "" +"அதில் குறைந்தது இரண்டு புலங்கள் இருக்க வேண்டும். முதலாவது `` url``, வகை `` சரம்``. அதன்" +" உள்ளடக்கம் `whatewg முகவரி தரநிலை ` _ இன் படி செல்லுபடியாகும்" +" முகவரி ஆக இருக்க வேண்டும்." #: ../source/specifications/direct-url-data-structure.rst:28 msgid "" @@ -14154,22 +19806,31 @@ msgid "" "directory). These info fields have a (possibly empty) subdictionary as " "value, with the possible keys defined below." msgstr "" +"`` Url`` எதைக் குறிக்கிறது என்பதைப் பொறுத்து, இரண்டாவது புலம் `` vcs_info`` (`` " +"url`` ஒரு வி.சி.எச் குறிப்பு என்றால்), `` `url`` என்றால்` `url`` மூல காப்பகம் அல்லது " +"ஒரு சக்கரம்), அல்லது `` dir_info`` (`` url`` என்றால் உள்ளக அடைவு என்றால்). இந்த செய்தி " +"புலங்கள் ஒரு (சாத்தியமான வெற்று) அடக்குமுறையை மதிப்பாக வைத்திருக்கின்றன, கீழே " +"வரையறுக்கப்பட்ட விசைகள் உள்ளன." #: ../source/specifications/direct-url-data-structure.rst:35 msgid "Security Considerations" -msgstr "" +msgstr "பாதுகாப்பு பரிசீலனைகள்" #: ../source/specifications/direct-url-data-structure.rst:37 msgid "" "When persisted, ``url`` MUST be stripped of any sensitive authentication " "information, for security reasons." msgstr "" +"தொடர்ந்து இருக்கும்போது, பாதுகாப்பு காரணங்களுக்காக, `` url`` எந்தவொரு முக்கியமான அங்கீகா" +"ர தகவல்களையும் அகற்ற வேண்டும்." #: ../source/specifications/direct-url-data-structure.rst:40 msgid "" "The user:password section of the URL MAY however be composed of environment " "variables, matching the following regular expression:" msgstr "" +"பயனர்: முகவரி இன் கடவுச்சொல் பிரிவு சுற்றுச்சூழல் மாறிகள் கொண்டதாக இருக்கலாம், பின்வரும் " +"வழக்கமான வெளிப்பாட்டுடன் பொருந்துகிறது:" #: ../source/specifications/direct-url-data-structure.rst:48 msgid "" @@ -14177,18 +19838,23 @@ msgid "" "security sensitive string. A typical example is ``git`` in the case of a URL " "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" +"கூடுதலாக, பயனர்: முகவரி இன் கடவுச்சொல் பிரிவு நன்கு அறியப்பட்ட, பாதுகாப்பு அல்லாத " +"உணர்திறன் கொண்ட சரமாக இருக்கலாம். `` Ssh: // git@gitlab.com/பயனர்/ரெப்போ`` போன்ற " +"முகவரி இன் விசயத்தில் `` கிட்`` ஒரு பொதுவான எடுத்துக்காட்டு." -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" -msgstr "" +msgstr "பகஅ முகவரி கள்" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../source/specifications/direct-url-data-structure.rst:57 msgid "" "When ``url`` refers to a VCS repository, the ``vcs_info`` key MUST be " "present as a dictionary with the following keys:" msgstr "" +"`` Url`` ஒரு வி.சி.எச் களஞ்சியத்தைக் குறிக்கும் போது, `` VCS_INFO`` விசை பின்வரும் " +"விசைகளுடன் அகராதியாக இருக்க வேண்டும்:" -#: ../source/specifications/direct-url-data-structure.rst:58 +#: ../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 " @@ -14196,51 +19862,71 @@ msgid "" "MUST be compatible with the corresponding VCS, so an installer can hand it " "off without transformation to a checkout/download command of the VCS." msgstr "" +"ஒரு `` vcs`` விசை (வகை `` சரம்```) இருக்க வேண்டும், இதில் VC களின் பெயரைக் கொண்டுள்ளது" +" (அதாவது `` git``, `` hg``, `` bzr``, `` svn ``). இந்த விவரக்குறிப்பை " +"திருத்துவதற்கு ஒரு PEP ஐ எழுதுவதன் மூலம் பிற வி.சி.க்கள் பதிவு செய்யப்பட வேண்டும். `` " +"Url`` மதிப்பு தொடர்புடைய VC களுடன் இணக்கமாக இருக்க வேண்டும், எனவே ஒரு நிறுவி பகஅ இன் " +"புதுப்பித்து/பதிவிறக்க கட்டளைக்கு மாற்றப்படாமல் அதை ஒப்படைக்க முடியும்." -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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:68 +#: ../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:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" -msgstr "" +msgstr "காப்பக முகவரி கள்" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../source/specifications/direct-url-data-structure.rst:82 msgid "" "When ``url`` refers to a source archive or a wheel, the ``archive_info`` key " "MUST be present as a dictionary with the following keys:" msgstr "" +"`` Url`` ஒரு மூல காப்பகம் அல்லது சக்கரத்தைக் குறிக்கும் போது, `` காப்பகம்_இன்ஃபோ`` விசை " +"பின்வரும் விசைகளுடன் அகராதியாக இருக்க வேண்டும்:" -#: ../source/specifications/direct-url-data-structure.rst:81 +#: ../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:84 +#: ../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:88 +#: ../source/specifications/direct-url-data-structure.rst:92 msgid "These hash names SHOULD always be normalized to be lowercase." -msgstr "" +msgstr "இந்த ஆச் பெயர்கள் எப்போதும் சிறிய எழுத்துக்களாக இயல்பாக்கப்பட வேண்டும்." -#: ../source/specifications/direct-url-data-structure.rst:90 +#: ../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 " @@ -14248,70 +19934,94 @@ msgid "" "secure algorithm from :py:data:`hashlib.algorithms_guaranteed` SHOULD always " "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" +"எந்த ஆச் வழிமுறையும் மூலம் கிடைக்கும்: PY: MOD: `ஆச்லிப்` (குறிப்பாக ஏதேனும் தேர்ச்சி " +"பெறக்கூடியது: PY: FUNC:` Hashlib.new () `மற்றும் கூடுதல் அளவுருக்கள் தேவையில்லை) ஆசச்" +" அகராதி ஒரு விசையாக பயன்படுத்தப்படலாம் . இருந்து குறைந்தது ஒரு பாதுகாப்பான வழிமுறை: " +"PY: தரவு: `hashlib.algorithms_ugranaled` எப்போதும் சேர்க்கப்பட வேண்டும். எழுதும் " +"நேரத்தில், `` சா 256`` குறிப்பாக பரிந்துரைக்கப்படுகிறது." -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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:103 +#: ../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:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" -msgstr "" +msgstr "உள்ளக கோப்பகங்கள்" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../source/specifications/direct-url-data-structure.rst:116 msgid "" "When ``url`` refers to a local directory, the ``dir_info`` key MUST be " "present as a dictionary with the following key:" msgstr "" +"`` Url`` ஒரு உள்ளக கோப்பகத்தைக் குறிக்கும் போது, `` dir_info`` விசை பின்வரும் " +"விசையுடன் அகராதியாக இருக்க வேண்டும்:" -#: ../source/specifications/direct-url-data-structure.rst:113 +#: ../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:116 +#: ../source/specifications/direct-url-data-structure.rst:122 msgid "" "When ``url`` refers to a local directory, it MUST have the ``file`` scheme " "and be compliant with :rfc:`8089`. In particular, the path component must be " "absolute. Symbolic links SHOULD be preserved when making relative paths " "absolute." msgstr "" +"`` Url`` ஒரு உள்ளக கோப்பகத்தைக் குறிக்கும் போது, அதற்கு `` கோப்பு`` திட்டத்தைக் கொண்டிருக்" +"க வேண்டும் மற்றும் இணக்கமாக இருக்க வேண்டும்: RFC: `8089`. குறிப்பாக, பாதை கூறு " +"முழுமையானதாக இருக்க வேண்டும். உறவினர் பாதைகளை முழுமையானதாக மாற்றும்போது குறியீட்டு " +"இணைப்புகள் பாதுகாக்கப்பட வேண்டும்." -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" -msgstr "" +msgstr "துணை அடைவுகளில் திட்டங்கள்" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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 "" +msgstr "`` Pyproject.toml`` அல்லது `` setup.py. `அமைந்துள்ளது." -#: ../source/specifications/direct-url-data-structure.rst:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" -msgstr "" +msgstr "பதிவுசெய்யப்பட்ட வி.சி." -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14321,187 +20031,215 @@ msgid "" "name (lowercased). Additional fields that would be necessary to support such " "VCS SHOULD be prefixed with the VCS command name." msgstr "" +"இந்த பிரிவு பதிவுசெய்யப்பட்ட வி.சி.எச்சை பட்டியலிடுகிறது; விரிவாக்கப்பட்ட, `` vcs``, " +"`` கோரப்பட்ட_ரெவிசன்`` மற்றும் `` vcs_info`` இன் பிற துறைகளை எவ்வாறு பயன்படுத்துவது " +"என்பது பற்றிய வி.சி.எச்-குறிப்பிட்ட தகவல்கள்; மற்றும் சில சந்தர்ப்பங்களில் கூடுதல் " +"வி.சி.எச்-குறிப்பிட்ட புலங்கள். இந்த விவரக்குறிப்பை திருத்துவதற்கு ஒரு PEP ஐ எழுதுவதன் " +"மூலம் அவற்றை பதிவு செய்ய பரிந்துரைக்கப்பட்டாலும் கருவிகள் மற்ற வி.சி.க்களை ஆதரிக்கக்கூடும்" +". `` Vcs`` புலம் கட்டளை பெயராக இருக்க வேண்டும் (கீழ்நிலை). அத்தகைய வி.சி.க்களை ஆதரிக்க " +"தேவையான கூடுதல் புலங்கள் வி.சி.எச் கட்டளை பெயருடன் முன்னொட்டப்பட வேண்டும்." -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" -msgstr "" +msgstr "அறிவிலி" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:154 +#: ../source/specifications/direct-url-data-structure.rst:181 +#: ../source/specifications/direct-url-data-structure.rst:199 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "Home page" -msgstr "" +msgstr "முகப்பு பக்கம்" -#: ../source/specifications/direct-url-data-structure.rst:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" -msgstr "" +msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:220 msgid "vcs command" -msgstr "" +msgstr "வி.சி.எச் கட்டளை" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" -msgstr "" +msgstr "அறிவிலி" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:160 +#: ../source/specifications/direct-url-data-structure.rst:187 +#: ../source/specifications/direct-url-data-structure.rst:205 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "``vcs`` field" -msgstr "" +msgstr "`` vcs`` புலம்" -#: ../source/specifications/direct-url-data-structure.rst:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../source/specifications/direct-url-data-structure.rst:164 +#: ../source/specifications/direct-url-data-structure.rst:190 +#: ../source/specifications/direct-url-data-structure.rst:208 +#: ../source/specifications/direct-url-data-structure.rst:227 msgid "``requested_revision`` field" -msgstr "" +msgstr "`` கோரப்பட்டது_ரெவிசன்` புலம்" -#: ../source/specifications/direct-url-data-structure.rst:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../source/specifications/direct-url-data-structure.rst:167 +#: ../source/specifications/direct-url-data-structure.rst:193 +#: ../source/specifications/direct-url-data-structure.rst:211 +#: ../source/specifications/direct-url-data-structure.rst:232 msgid "``commit_id`` field" -msgstr "" +msgstr "`` கமிட்_ஐடி`` புலம்" -#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." -msgstr "" +msgstr "ஒரு கமிட் ஆச் (40 எக்சாடெசிமல் எழுத்துக்கள் சா 1)." -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 "" +"கருவிகள் `` கோரப்பட்ட_ரெவிசன்`` ஒரு அறிவிலி ref உடன் ஒத்திருக்கிறதா என்பதை தீர்மானிக்க " +"`` அறிவிலி சோ-ரெஃப்`` மற்றும் `` அறிவிலி சிம்போலிக்-ரெஃப்`` கட்டளைகளைப் பயன்படுத்தலாம். " +"இதையொட்டி, `` refs/tags/`` உடன் ஒரு REF ஒரு குறிச்சொல்லுடன் ஒத்திருக்கிறது, மேலும் " +"ஒரு கிளோனிங் ஒரு கிளைக்கு ஒத்த பிறகு `` refs/ரிமோட்டுகள்/தோற்றம்/`` உடன் தொடங்கும்." -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" -msgstr "" +msgstr "மெர்குரியல்" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" -msgstr "" +msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" -msgstr "" +msgstr "எச்.சி." -#: ../source/specifications/direct-url-data-structure.rst:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." -msgstr "" +msgstr "ஒரு மாற்ற ஐடி (40 எக்சாடெசிமல் எழுத்துக்கள்)." -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" -msgstr "" +msgstr "கடைவீதி" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" -msgstr "" +msgstr "https://www.breezy-vcs.org/" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" -msgstr "" +msgstr "பொத்தான்" -#: ../source/specifications/direct-url-data-structure.rst:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." -msgstr "" +msgstr "ஒரு குறிச்சொல் பெயர், கிளை பெயர், திருத்த ஐடி." -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." -msgstr "" +msgstr "ஒரு திருத்த ஐடி." -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" -msgstr "" +msgstr "எச்.வி.என்" -#: ../source/specifications/direct-url-data-structure.rst:216 +#: ../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 "" +"`` கோரப்பட்ட_ரெவிசன்`` `` எச்.வி.என் புதுப்பிப்பு` `` `--revision`` விருப்பத்துடன் " +"இணக்கமாக இருக்க வேண்டும். கீழ்ப்படிதலில், கிளை அல்லது குறிச்சொல் `` url`` இன் ஒரு " +"பகுதியாகும்." -#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" -msgstr "" +msgstr "சாதொபொகு SCHEMA" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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 "" +"`` Adrent_url.json`` இன் உள்ளடக்கங்களை சரிபார்க்க பின்வரும் சாதொபொகு திட்டத்தைப் " +"பயன்படுத்தலாம்:" -#: ../source/specifications/direct-url-data-structure.rst:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" -msgstr "" +msgstr "மூல காப்பகம்:" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" -msgstr "" +msgstr "குறிச்சொல் மற்றும் கமிட்-ஆச் உடன் git url:" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" -msgstr "" +msgstr "உள்ளக அடைவு:" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" -msgstr "" +msgstr "திருத்தக்கூடிய பயன்முறையில் உள்ளக அடைவு:" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 msgid "" "March 2020: This specification was approved through :pep:`610`, defining the " "``direct_url.json`` metadata file." msgstr "" +"மார்ச் 2020: இந்த விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `610`,` `` " +"direct_url.json`` மேனிலை தரவு கோப்பை வரையறுக்கிறது." -#: ../source/specifications/direct-url-data-structure.rst:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." msgstr "" +"சனவரி 2023: `` காப்பகம்_இன்ஃபோ.ஆச்கள்` விசையை (`கலந்துரையாடல் <காப்பகம்-இன்ஃபோ-ஆச்கள்_>` " +"_) சேர்த்தது." #: ../source/specifications/entry-points.rst:5 msgid "Entry points specification" -msgstr "" +msgstr "நுழைவு புள்ளிகள் விவரக்குறிப்பு" #: ../source/specifications/entry-points.rst:7 msgid "" "*Entry points* are a mechanism for an installed distribution to advertise " "components it provides to be discovered and used by other code. For example:" msgstr "" +"* நுழைவு புள்ளிகள்* என்பது நிறுவப்பட்ட விநியோகத்திற்கான ஒரு வழிமுறையாகும், இது பிற " +"குறியீட்டால் கண்டுபிடிக்கப்பட்டு பயன்படுத்தப்பட வேண்டிய கூறுகளை விளம்பரப்படுத்துகிறது. " +"உதாரணமாக:" #: ../source/specifications/entry-points.rst:11 msgid "" @@ -14510,6 +20248,10 @@ msgid "" "installs the distribution, it will create a command-line wrapper for each " "entry point." msgstr "" +"விநியோகங்கள் `` Console_scripts`` நுழைவு புள்ளிகளைக் குறிப்பிடலாம், ஒவ்வொன்றும் ஒரு " +"செயல்பாட்டைக் குறிக்கின்றன. * பிஐபி * (அல்லது மற்றொரு கன்சோல்_ச்கிரிப்ட்ச் விழிப்புணர்வு " +"நிறுவி) விநியோகத்தை நிறுவும் போது, இது ஒவ்வொரு நுழைவு புள்ளிக்கும் ஒரு கட்டளை-வரி " +"ரேப்பரை உருவாக்கும்." #: ../source/specifications/entry-points.rst:14 msgid "" @@ -14518,6 +20260,10 @@ msgid "" "installed packages. For more about this, see :doc:`/guides/creating-and-" "discovering-plugins`." msgstr "" +"செருகுநிரல்களை ஏற்ற பயன்பாடுகள் நுழைவு புள்ளிகளைப் பயன்படுத்தலாம்; எ.கா. பைக்மென்ட்ச் (ஒரு" +" தொடரியல் சிறப்பம்சமாக கருவி) தனித்தனியாக நிறுவப்பட்ட தொகுப்புகளிலிருந்து கூடுதல் " +"லெக்சர்கள் மற்றும் பாணிகளைப் பயன்படுத்தலாம். இதைப் பற்றி மேலும் அறிய, காண்க: DOC: " +"`/வழிகாட்டிகள்/உருவாக்குதல் மற்றும் கண்டுபிடித்தல்-பிளகின்ச்`." #: ../source/specifications/entry-points.rst:19 msgid "" @@ -14530,14 +20276,22 @@ msgid "" "metadata` to portably read published entry point metadata (potentially with " "different caching and conflict resolution strategies)." msgstr "" +"இயக்க நேரத்தில் படிக்கப்படும் ஒருங்கிணைப்பு புள்ளி மெட்டாடேட்டாவை வழங்க செட்டுப்லூல்களுடன் " +"கட்டப்பட்ட தொகுப்புகளை அனுமதிக்க நுழைவு புள்ளி கோப்பு வடிவம் முதலில் உருவாக்கப்பட்டது: " +"PY: MOD: `INSPROMLIB.Metadata`. இது இப்போது ஒரு PYPA இயங்குதள விவரக்குறிப்பாக " +"வரையறுக்கப்பட்டுள்ளது, வெளியிடுவதற்கு `` setuptools`` தவிர வேறு பல கருவிகளை " +"அனுமதிக்க: py: mod: `importlib.metadata` இணக்கமான நுழைவு புள்ளி மேனிலை தரவு " +"மற்றும் இயக்க நேர நூலகங்கள்: py: mod:` வெளியிடப்பட்ட நுழைவு புள்ளி மெட்டாடேட்டாவைப் படிக்" +"க இறக்குமதி லிப்." #: ../source/specifications/entry-points.rst:28 msgid "Data model" -msgstr "" +msgstr "தரவு மாதிரி" #: ../source/specifications/entry-points.rst:30 msgid "Conceptually, an entry point is defined by three required properties:" msgstr "" +"கருத்தியல் ரீதியாக, ஒரு நுழைவு புள்ளி மூன்று தேவையான பண்புகளால் வரையறுக்கப்படுகிறது:" #: ../source/specifications/entry-points.rst:32 msgid "" @@ -14551,6 +20305,15 @@ msgid "" "of letters, numbers and underscores, separated by dots (regex ``^\\w+(\\." "\\w+)*$``)." msgstr "" +"** குழு ** ஒரு நுழைவு புள்ளி சொந்தமானது என்பது எந்த வகையான பொருளை வழங்குகிறது " +"என்பதைக் குறிக்கிறது. உதாரணமாக, `` கன்சோல்_ச்கிரிப்ட்ச்`` என்பது ஒரு கட்டளையாகப் " +"பயன்படுத்தக்கூடிய செயல்பாடுகளைக் குறிக்கும் நுழைவு புள்ளிகளுக்கானது, அதே நேரத்தில் `` " +"பைக்மென்ட்ச். நுகர்வோர் பொதுவாக எதிர்பார்த்த இடைமுகத்தை வரையறுக்கிறார்கள். மோதல்களைத் " +"தவிர்ப்பதற்கு, ஒரு புதிய குழுவை வரையறுக்கும் நுகர்வோர் நுகர்வோர் திட்டத்திற்கு சொந்தமான " +"PYPI பெயருடன் தொடங்கி பெயர்களைப் பயன்படுத்த வேண்டும், அதைத் தொடர்ந்து `` .``. குழு " +"பெயர்கள் கடிதங்கள், எண்கள் மற்றும் அடிக்கோடிட்டுக் காட்டங்களின் ஒன்று அல்லது அதற்கு மேற்பட்ட " +"குழுக்களாக இருக்க வேண்டும், அவை புள்ளிகளால் பிரிக்கப்படுகின்றன (regex ``^\\ w+(\\. \\ " +"W+)*$ ``)." #: ../source/specifications/entry-points.rst:42 msgid "" @@ -14564,6 +20327,15 @@ msgid "" "is recommended to use only letters, numbers, underscores, dots and dashes " "(regex ``[\\w.-]+``)." msgstr "" +"** பெயர் ** இந்த நுழைவு புள்ளியை அதன் குழுவிற்குள் அடையாளம் காட்டுகிறது. இதன் துல்லியமா" +"ன பொருள் நுகர்வோர் வரை. கன்சோல் ச்கிரிப்ட்களைப் பொறுத்தவரை, நுழைவு புள்ளியின் பெயர் அதைத் " +"தொடங்க பயன்படுத்தப்படும் கட்டளை. ஒரு விநியோகத்திற்குள், நுழைவு புள்ளி பெயர்கள் தனித்துவமா" +"க இருக்க வேண்டும். வெவ்வேறு விநியோகங்கள் ஒரே பெயரை வழங்கினால், இதுபோன்ற மோதல்களை எவ்வாறு" +" கையாள்வது என்பதை நுகர்வோர் தீர்மானிக்கிறார். பெயரில் `` = `` தவிர வேறு எந்த " +"எழுத்துக்களும் இருக்கலாம், ஆனால் அது எந்த இடைவெளி எழுத்திலும் தொடங்கவோ முடிவடையவோ " +"முடியாது, அல்லது `` [`` உடன் தொடங்க முடியாது. புதிய நுழைவு புள்ளிகளுக்கு, " +"எழுத்துக்கள், எண்கள், அடிக்கோடிட்டுக் காட்டுதல், புள்ளிகள் மற்றும் கோடுகள் (regex `[\\ w .-]" +"+` `) மட்டுமே பயன்படுத்த பரிந்துரைக்கப்படுகிறது." #: ../source/specifications/entry-points.rst:51 msgid "" @@ -14572,6 +20344,9 @@ msgid "" "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 "" @@ -14579,6 +20354,9 @@ msgid "" "for want of a better term, especially where it points to a function to " "launch a program." msgstr "" +"சில கருவிகள் இந்த வகையான பொருள் குறிப்பை ஒரு 'நுழைவு புள்ளி' என்று அழைக்கின்றன, ஒரு " +"சிறந்த காலத்தை விரும்புவதற்காக, குறிப்பாக ஒரு நிரலைத் தொடங்குவதற்கான செயல்பாட்டை இது " +"சுட்டிக்காட்டுகிறது." #: ../source/specifications/entry-points.rst:68 msgid "" @@ -14587,6 +20365,10 @@ msgid "" "If these are specified, the entry point requires the dependencies of those " "'extras'. See the metadata field :ref:`metadata_provides_extra`." msgstr "" +"ஒரு விருப்ப சொத்து உள்ளது: ** கூடுதல் ** என்பது நுழைவு புள்ளியை வழங்கும் விநியோகத்தின் " +"விருப்ப அம்சங்களை அடையாளம் காணும் சரங்களின் தொகுப்பாகும். இவை குறிப்பிடப்பட்டால், நுழைவு " +"புள்ளிக்கு அந்த 'கூடுதல்' சார்புநிலைகள் தேவைப்படுகின்றன. மேனிலை தரவு புலத்தைக் காண்க: " +"ref: `Metadata_provides_extra`." #: ../source/specifications/entry-points.rst:73 msgid "" @@ -14596,10 +20378,16 @@ msgid "" "of handling extras was tied to setuptools' model of managing 'egg' packages, " "but newer tools such as pip and virtualenv use a different model." msgstr "" +"ஒரு நுழைவு புள்ளிக்கு கூடுதல் பயன்படுத்துவது இனி பரிந்துரைக்கப்படாது. ஏற்கனவே உள்ள " +"விநியோகங்களிலிருந்து அவற்றை பாகுபடுத்த நுகர்வோர் ஆதரிக்க வேண்டும், ஆனால் பின்னர் அவற்றைப் " +"புறக்கணிக்கலாம். புதிய வெளியீட்டு கருவிகள் கூடுதல் குறிப்புகளை ஆதரிக்க தேவையில்லை. " +"கூடுதல் கையாளுதலின் செயல்பாடு 'முட்டை' தொகுப்புகளை நிர்வகிக்கும் செடுப்டூல்சின் " +"மாதிரியுடன் பிணைக்கப்பட்டுள்ளது, ஆனால் பிஐபி மற்றும் மெய்நிகர்இவி போன்ற புதிய கருவிகள் " +"வேறு மாதிரியைப் பயன்படுத்துகின்றன." #: ../source/specifications/entry-points.rst:80 msgid "File format" -msgstr "" +msgstr "கோப்பு வடிவம்" #: ../source/specifications/entry-points.rst:82 msgid "" @@ -14609,6 +20397,11 @@ msgid "" "distributions, and in :ref:`binary-distribution-format` for wheels. The file " "uses the UTF-8 character encoding." msgstr "" +"நுழைவு புள்ளிகள் எனப்படும் கோப்பில் வரையறுக்கப்பட்டுள்ளன: கோப்பு: `entry_points.txt` இல்:" +" கோப்பு:`*. டிச்ட்-இன்ஃபோ` விநியோகத்தின் அடைவு. இது விவரிக்கப்பட்டுள்ள கோப்பகமாகும்: " +"குறிப்பு: நிறுவப்பட்ட விநியோகங்களுக்கான `பதிவு-நிறுவப்பட்ட-பேக்கேச்கள்`, மற்றும் இல்: " +"ref:` பைனரி-விநியோக வடிவிலான சக்கரங்களுக்கு. கோப்பு யுடிஎஃப் -8 எழுத்து " +"குறியாக்கத்தைப் பயன்படுத்துகிறது." #: ../source/specifications/entry-points.rst:88 msgid "" @@ -14617,12 +20410,18 @@ msgid "" "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 "" @@ -14631,6 +20430,9 @@ msgid "" "extras. If extras are used, they are a comma-separated list inside square " "brackets." msgstr "" +"கட்டமைப்பு கோப்பின் பிரிவுகள் நுழைவு புள்ளி குழுக்களைக் குறிக்கின்றன, பெயர்கள் பெயர்கள், " +"மற்றும் மதிப்புகள் பொருள் குறிப்பு மற்றும் விருப்ப கூடுதல் இரண்டையும் குறியாக்குகின்றன. " +"கூடுதல் பயன்படுத்தப்பட்டால், அவை சதுர அடைப்புக்குறிக்குள் கமாவால் பிரிக்கப்பட்ட பட்டியல்." #: ../source/specifications/entry-points.rst:105 msgid "" @@ -14643,10 +20445,18 @@ msgid "" "it is recommended only to insert a space between the object reference and " "the left square bracket." msgstr "" +"ஒரு மதிப்புக்குள், வாசகர்கள் பெருங்குடலுக்கு முன் அல்லது அதற்குப் பிறகு, பொருள் குறிப்பு " +"மற்றும் இடது சதுர அடைப்புக்குறிக்கு இடையில், கூடுதல் பெயர்களுக்கும் சதுர " +"அடைப்புக்குறிகளுக்கும், அவற்றை வரையறுக்கும் காலன்களுக்கும் இடையில், மற்றும் சரியான " +"சதுரத்திற்குப் பிறகு இடங்களை ஏற்றுக்கொண்டு புறக்கணிக்க வேண்டும் அடைப்புக்குறி. கூடுதல் " +"அம்சங்களுக்கான தொடரியல் முறையாக குறிப்பிடப்பட்டுள்ளது: PEP: `508` (` `கூடுதல்``) மற்றும்" +" குறிப்பிடப்பட்ட மதிப்புகள் மீதான கட்டுப்பாடுகள்: PEP:` 685`. கோப்பை எழுதும் கருவிகளுக்கு" +", பொருள் குறிப்பு மற்றும் இடது சதுர அடைப்புக்குறிக்கு இடையில் ஒரு இடத்தை செருக மட்டுமே " +"பரிந்துரைக்கப்படுகிறது." #: ../source/specifications/entry-points.rst:128 msgid "Use for scripts" -msgstr "" +msgstr "ச்கிரிப்டுகளுக்கு பயன்படுத்தவும்" #: ../source/specifications/entry-points.rst:130 msgid "" @@ -14658,12 +20468,20 @@ msgid "" "return an integer to be used as a process exit code, and returning ``None`` " "is equivalent to returning ``0``." msgstr "" +"நுழைவு புள்ளிகளின் இரண்டு குழுக்கள் பேக்கேசிங்கில் சிறப்பு முக்கியத்துவம் வாய்ந்தவை: `` " +"கன்சோல்_ச்கிரிப்ட்ச்`` மற்றும் `` gui_scripts``. இரு குழுக்களிலும், தொகுப்பு நிறுவப்பட்ட " +"பின் கணினி செல்லில் கட்டளையாக நுழைவு புள்ளியின் பெயர் பயன்படுத்தப்பட வேண்டும். பொருள் " +"குறிப்பு ஒரு செயல்பாட்டை சுட்டிக்காட்டுகிறது, இது இந்த கட்டளை இயக்கப்படும்போது எந்த " +"வாதங்களும் இல்லாமல் அழைக்கப்படும். செயல்பாடு ஒரு முழு எண்ணாக ஒரு செயல்முறை வெளியேறும் " +"குறியீடாகப் பயன்படுத்தப்படலாம், மேலும் `` எதுவுமில்லை` `திரும்பப் பெறுவது` `0``." #: ../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 "" +"உதாரணமாக, நுழைவு புள்ளி `` mycmd = mymod: main`` இது போன்ற ஒரு ச்கிரிப்டைத் " +"தொடங்கும் கட்டளையை உருவாக்கும் ::" #: ../source/specifications/entry-points.rst:145 msgid "" @@ -14675,6 +20493,14 @@ msgid "" "but cannot use standard streams unless application code redirects them. " "Other platforms do not have the same distinction." msgstr "" +"`` கன்சோல்_ச்கிரிப்ட்ச்`` மற்றும் `` gui_scripts` ஆகியவற்றுக்கு இடையிலான வேறுபாடு " +"சாளரங்கள் அமைப்புகளை மட்டுமே பாதிக்கிறது. `` console_scripts`` ஒரு கன்சோலில் " +"இயங்கக்கூடியதாக இருக்கும், எனவே அவை ஒரு கன்சோலுடன் இணைக்கப்பட்டு பயன்படுத்தலாம்: py: " +"தரவு: `sys.stdin`,: py: data:` sys.stdout` மற்றும்: py: தரவு: ` உள்ளீடு மற்றும் " +"வெளியீட்டிற்கு sys.stderr`. `` gui_scripts`` ஒரு GUI இயங்கக்கூடியதாக " +"மூடப்பட்டிருக்கும், எனவே அவை கன்சோல் இல்லாமல் தொடங்கப்படலாம், ஆனால் பயன்பாட்டுக் குறியீடு " +"அவற்றை திருப்பிவிடாவிட்டால் நிலையான ச்ட்ரீம்களைப் பயன்படுத்த முடியாது. மற்ற தளங்களில் ஒரே " +"வேறுபாடு இல்லை." #: ../source/specifications/entry-points.rst:153 msgid "" @@ -14683,6 +20509,10 @@ msgid "" "not responsible for putting this directory in the ``PATH`` environment " "variable which defines where command-line tools are found." msgstr "" +"நிறுவல் திட்டத்தின் ச்கிரிப்ட்ச் கோப்பகத்தில் `` கன்சோல்_ச்கிரிப்ட்ச்`` மற்றும் `` gui_scripts` " +"ஆகிய இரண்டிற்கும் ரேப்பர்களை நிறுவும் கருவிகள் அமைக்கும் என்று எதிர்பார்க்கப்படுகிறது. " +"கட்டளை-வரி கருவிகள் எங்கு காணப்படுகின்றன என்பதை வரையறுக்கும் `` பாதை` சுற்றுச்சூழல் " +"மாறியில் இந்த கோப்பகத்தை வைப்பதற்கு அவர்கள் பொறுப்பல்ல." #: ../source/specifications/entry-points.rst:158 msgid "" @@ -14691,16 +20521,21 @@ msgid "" "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 "" +"அக்டோபர் 2017: இந்த விவரக்குறிப்பு செட்ப்டூல்சின் (கலந்துரையாடல்_) இருக்கும் நுழைவு " +"புள்ளிகள் அம்சத்தை முறைப்படுத்த எழுதப்பட்டது." #: ../source/specifications/externally-managed-environments.rst:6 msgid "Externally Managed Environments" -msgstr "" +msgstr "வெளிப்புறமாக நிர்வகிக்கப்பட்ட சூழல்கள்" #: ../source/specifications/externally-managed-environments.rst:8 msgid "" @@ -14709,6 +20544,10 @@ msgid "" "as the operating system package manager in a Linux distribution, or as a " "bundled Python environment in an application with a dedicated installer)." msgstr "" +"சில பைதான் நிறுவல்கள் பைத்தானை நிறுவிய பயனரால் முழுமையாக நிர்வகிக்கப்படுகின்றன, மற்றவை " +"மற்றொரு வழிமுறையால் வழங்கப்படலாம் மற்றும் நிர்வகிக்கப்படலாம் (லினக்ச் விநியோகத்தில் இயக்க " +"முறைமை தொகுப்பு மேலாளர் அல்லது ஒரு பிரத்யேக நிறுவியுடன் ஒரு பயன்பாட்டில் தொகுக்கப்பட்ட " +"பைதான் சூழலாக) ." #: ../source/specifications/externally-managed-environments.rst:13 msgid "" @@ -14717,6 +20556,9 @@ msgid "" "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 "" @@ -14726,6 +20568,11 @@ msgid "" "installation environment, and should instead guide the end user towards " "using :ref:`virtual-environments`." msgstr "" +"இந்த விவரக்குறிப்பு `` வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` மார்க்கர் கோப்பை வரையறுக்கிறது, இது" +" ஒரு பைதான் நிறுவலை பைதான்-குறிப்பிட்ட கருவிகளைக் குறிக்க அனுமதிக்கிறது, அதாவது `` " +"பிஐபி`` அவை மொழிபெயர்ப்பாளரின் இயல்புநிலை நிறுவல் சூழலில் தொகுப்புகளை நிறுவவோ அல்லது " +"அகற்றவோ இல்லை, அதற்கு பதிலாக இறுதி பயனரைப் பயன்படுத்துவதை வழிநடத்த வேண்டும்: ref: " +"`மெய்நிகர்-சுற்றுச்சூழல்." #: ../source/specifications/externally-managed-environments.rst:24 msgid "" @@ -14735,10 +20582,15 @@ msgid "" "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 "" +msgstr "சொல்" #: ../source/specifications/externally-managed-environments.rst:34 msgid "" @@ -14746,10 +20598,13 @@ msgid "" "contexts that it spans. For clarity, this specification uses the following " "terms in specific ways:" msgstr "" +"இந்த விவரக்குறிப்பில் பயன்படுத்தப்படும் சில சொற்கள் அது பரவியிருக்கும் சூழல்களில் பல " +"அர்த்தங்களைக் கொண்டுள்ளன. தெளிவுக்கு, இந்த விவரக்குறிப்பு பின்வரும் சொற்களை குறிப்பிட்ட " +"வழிகளில் பயன்படுத்துகிறது:" #: ../source/specifications/externally-managed-environments.rst:61 msgid "distro" -msgstr "" +msgstr "டிச்ட்ரோ" #: ../source/specifications/externally-managed-environments.rst:39 msgid "" @@ -14759,6 +20614,11 @@ msgid "" "and software written in other languages. That is, this is the sense used in " "phrases such as \"Linux distro\" or \"Berkeley Software Distribution.\"" msgstr "" +"\"விநியோகத்திற்கான\" குறுகிய, பல்வேறு வகையான மென்பொருள்களின் தொகுப்பாகும், இது (இந்த " +"ஆவணத்துடன் தொடர்புடைய சூழல்களில்) பைதான் மொழிபெயர்ப்பாளர், பைத்தானில் எழுதப்பட்ட மென்பொருள் " +"மற்றும் பிற மொழிகளில் எழுதப்பட்ட மென்பொருள் உட்பட ஒன்றாக ஒன்றாக வேலை செய்ய " +"வடிவமைக்கப்பட்டுள்ளது. அதாவது, இது \"லினக்ச் டிச்ட்ரோ\" அல்லது " +"\"பெர்க்லி மென்பொருள் வழங்கல்\" போன்ற சொற்றொடர்களில் பயன்படுத்தப்படும் உணர்வு." #: ../source/specifications/externally-managed-environments.rst:46 msgid "" @@ -14766,6 +20626,9 @@ msgid "" "or FreeBSD. It can also be an overlay distribution that installs on top of " "an existing OS, such as Homebrew or MacPorts." msgstr "" +"ஒரு டிச்ட்ரோ டெபியன், ஃபெடோரா அல்லது ஃப்ரீ.பி.எச்.டி போன்ற அதன் சொந்த இயக்க முறைமையாக " +"(ஓஎச்) இருக்கலாம். இது ஓம்பிரூ அல்லது மேக்போர்ட்ச் போன்ற ஏற்கனவே உள்ள OS க்கு மேல் நிறுவும் " +"மேலடுக்கு விநியோகமாகவும் இருக்கலாம்." #: ../source/specifications/externally-managed-environments.rst:51 msgid "" @@ -14777,16 +20640,25 @@ msgid "" "\"distribution\" at all. In the Python packaging sense, it uses the full " "phrase \"distribution package\" or just \"package\" (see below)." msgstr "" +"இந்த ஆவணம் குறுகிய கால \"டிச்ட்ரோ\" ஐப் பயன்படுத்துகிறது, ஏனெனில் \"வழங்கல்\" என்ற சொல் " +"பைதான் பேக்கேசிங் சூழல்களில் மற்றொரு பொருளைக் கொண்டுள்ளது: பைதான் மொழி மென்பொருளின் ஒற்றை " +"பகுதியின் மூல அல்லது பைனரி விநியோக தொகுப்பு, அதாவது `` செட்டுப்டூல்கள் என்ற பொருளில். " +"Dist.distribution`` அல்லது \"Sdist\". குழப்பத்தைத் தவிர்க்க, இந்த ஆவணம் \"வழங்கல்\" என்" +"ற எளிய வார்த்தையைப் பயன்படுத்தாது. பைதான் பேக்கேசிங் அர்த்தத்தில், இது " +"\"விநியோக தொகுப்பு\" அல்லது \"தொகுப்பு\" என்ற முழு சொற்றொடரைப் பயன்படுத்துகிறது (கீழே " +"காண்க)." #: ../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 "" +msgstr "தொகுப்பு" #: ../source/specifications/externally-managed-environments.rst:64 msgid "" @@ -14795,6 +20667,10 @@ msgid "" "`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 "" @@ -14802,6 +20678,9 @@ msgid "" "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 "" @@ -14811,10 +20690,14 @@ msgid "" "\" (Again, in many cases, a Python package is shipped inside a distro's " "package named something like ``python-`` plus the Python package name.)" msgstr "" +"இந்த ஆவணம் பொதுவாக ஒரு டிச்ட்ரோவின் தொகுப்பு மேலாளரால் நிறுவலின் அலகுகளைக் குறிக்க " +"\"தொகுப்பு\" என்ற வார்த்தையைப் பயன்படுத்தாது (போன்றவை `.deb`` அல்லது` .rpm`` கோப்புகள் " +"போன்றவை). தேவைப்படும்போது, இது \"ஒரு டிச்ட்ரோவின் தொகுப்பு\" போன்ற சொற்றொடரைப் " +"பயன்படுத்துகிறது. ." #: ../source/specifications/externally-managed-environments.rst:102 msgid "Python-specific package manager" -msgstr "" +msgstr "பைதான்-குறிப்பிட்ட தொகுப்பு மேலாளர்" #: ../source/specifications/externally-managed-environments.rst:82 msgid "" @@ -14824,12 +20707,18 @@ msgid "" "Install command `_ as well as direct usage of a ``setup.py`` " "command." msgstr "" +"பைதான் பேக்கேசிங் தரநிலைகளுக்கு இணங்க பைதான் தொகுப்புகளை நிறுவுதல், மேம்படுத்துதல் " +"மற்றும்/அல்லது அகற்றுவதற்கான ஒரு கருவி. மிகவும் பிரபலமான பைதான்-குறிப்பிட்ட தொகுப்பு " +"மேலாளர் பிப்_; மற்ற எடுத்துக்காட்டுகளில் பழைய `எளிதான நிறுவல் கட்டளை <எளிதான-நிறுவல்_>`" +" _ மற்றும் `` setup.py`` கட்டளையின் நேரடி பயன்பாடு ஆகியவை அடங்கும்." #: ../source/specifications/externally-managed-environments.rst:92 msgid "" "(Note that the ``easy_install`` command was removed in setuptools version " "52, released 23 January 2021.)" msgstr "" +"(Note that the ``easy_install`` கட்டளை was removed in setuptools version 52, " +"released 23 மா-தை 2021.)" #: ../source/specifications/externally-managed-environments.rst:96 msgid "" @@ -14839,10 +20728,12 @@ msgid "" "on Conda-created environments, most of the concerns in this document do not " "apply to ``conda`` when acting as a Python-specific package manager.)" msgstr "" +". காண்டா உருவாக்கிய சூழல்களில், பைதான்-குறிப்பிட்ட தொகுப்பு மேலாளராக செயல்படும்போது இந்" +"த ஆவணத்தில் உள்ள பெரும்பாலான கவலைகள் `` கான்டா`` க்கு பொருந்தாது.)" #: ../source/specifications/externally-managed-environments.rst:118 msgid "distro package manager" -msgstr "" +msgstr "டிச்ட்ரோ தொகுப்பு மேலாளர்" #: ../source/specifications/externally-managed-environments.rst:105 msgid "" @@ -14856,6 +20747,15 @@ msgid "" "upgrading it in a way that would satisfy a Python-specific package manager " "will generally leave a distro package manager in an inconsistent state." msgstr "" +"அந்த டிச்ட்ரோவின் நிறுவப்பட்ட நிகழ்வில் ஒரு டிச்ட்ரோவின் தொகுப்புகளை நிறுவுதல், " +"மேம்படுத்துதல் மற்றும்/அல்லது அகற்றுவதற்கான ஒரு கருவி, இது பைதான் தொகுப்புகள் மற்றும் " +"பைதான் அல்லாத தொகுப்புகளை நிறுவும் திறன் கொண்டது, எனவே பொதுவாக நிறுவப்பட்ட மென்பொருளின்" +" சொந்த தரவுத்தளத்தை பொதுவாகக் கொண்டுள்ளது : ref: `நிறுவப்பட்ட விநியோகங்களின் தரவுத்தளம் " +"<பதிவு-நிறுவப்பட்ட-பேக்கேச்கள்>`. எடுத்துக்காட்டுகளில் `` apt``, `dpkg``,` `dnf``,` " +"`rpm``,` `பேக்மேன்``, மற்றும்` `ப்ரூ`` ஆகியவை அடங்கும். முக்கிய நற்பொருத்தம் என்னவென்றால், " +"ஒரு டிச்ட்ரோ தொகுப்பு மேலாளரால் ஒரு தொகுப்பு நிறுவப்பட்டிருந்தால், ஒரு பைதான்-குறிப்பிட்" +"ட தொகுப்பு மேலாளரை திருப்திப்படுத்தும் வகையில் அதை அகற்றுவது அல்லது மேம்படுத்துவது " +"பொதுவாக ஒரு டிச்ட்ரோ தொகுப்பு மேலாளரை சீரற்ற நிலையில் விட்டுவிடுவார்." #: ../source/specifications/externally-managed-environments.rst:117 msgid "" @@ -14863,10 +20763,13 @@ msgid "" "\"system's package manager\" to refer to a distro package manager in certain " "contexts." msgstr "" +"இந்த ஆவணம் சில சூழல்களில் டிச்ட்ரோ தொகுப்பு மேலாளரைப் பார்க்க " +"\"வெளிப்புற தொகுப்பு மேலாளர்\" அல்லது \"கணினியின் தொகுப்பு மேலாளர்\" போன்ற " +"சொற்றொடர்களையும் பயன்படுத்துகிறது." #: ../source/specifications/externally-managed-environments.rst:127 msgid "shadow" -msgstr "" +msgstr "நிழல்" #: ../source/specifications/externally-managed-environments.rst:121 msgid "" @@ -14877,10 +20780,16 @@ msgid "" "``a.py`` in a later ``sys.path`` entry, then ``import a`` returns the module " "from the former, and we say that A 2.0 shadows A 1.0." msgstr "" +"நிறுவப்பட்ட பைதான் தொகுப்பை நிழலாடுவது, நிழல் தொகுப்பிலிருந்து எந்த கோப்புகளையும் " +"அகற்றாமல் இறக்குமதிக்கு வேறு சில தொகுப்புகளை விரும்புகிறது. இதற்கு `` sys.bath`` இல் " +"பல உள்ளீடுகள் தேவைப்படுகின்றன: தொகுப்பு A 2.0 ஒரு `` sys.bath`` நுழைவாயிலில் `` " +"a.py`` தொகுப்பை நிறுவுகிறது, மேலும் 1.0 ஐ நிறுவுகிறது தொகுதி `a.py```` a.py`` " +"பின்னர் `` sys.bath`` நுழைவாயிலில், `` இறக்குமதி a`` முந்தையவற்றிலிருந்து தொகுதியைத் " +"தருகிறது, மேலும் 2.0 நிழல்கள் 1.0 என்று நாங்கள் கூறுகிறோம்." #: ../source/specifications/externally-managed-environments.rst:132 msgid "This specification is twofold." -msgstr "" +msgstr "இந்த விவரக்குறிப்பு இரு மடங்கு." #: ../source/specifications/externally-managed-environments.rst:134 msgid "" @@ -14892,6 +20801,11 @@ msgid "" "provides a means for the distributor to indicate how to use a virtual " "environment as an alternative." msgstr "" +"முதலாவதாக, ஒரு பைதான் மொழிபெயர்ப்பாளரின் விநியோகச்தர்களுக்கு அந்த மொழிபெயர்ப்பாளருக்கு " +"அதன் தொகுப்புகள் பைதானுக்கு வெளிப்புற வழிமுறைகளை நிர்வகிப்பதாகக் குறிக்க ஒரு வழி இது " +"விவரிக்கிறது ** `sys.bath`` எந்த வகையிலும் (குறிப்பாக மீறப்படாவிட்டால் சேர்க்கவும், " +"மேம்படுத்தவும்/தரமிறக்கவும் அல்லது அகற்றவும்). மெய்நிகர் சூழலை மாற்றாக எவ்வாறு " +"பயன்படுத்துவது என்பதைக் குறிக்க விநியோகச்தருக்கு இது ஒரு வழிமுறையை வழங்குகிறது." #: ../source/specifications/externally-managed-environments.rst:142 msgid "" @@ -14900,6 +20814,10 @@ msgid "" "with a self-compiled interpreter, or with a distro that has not explicitly " "marked its interpreter, will work as it always has worked." msgstr "" +"இது ஒரு விருப்பமான பொறிமுறையாகும்: இயல்பாக, மேலோடை மூலங்களிலிருந்து தொகுக்கப்பட்ட " +"பைதான் மொழிபெயர்ப்பாளர் அவ்வளவு குறிக்கப்பட மாட்டார், எனவே `` பிஐபி நிறுவுதல்`` ஒரு தன்" +"வய ஒருங்கிணைந்த மொழிபெயர்ப்பாளருடன் அல்லது அதன் வெளிப்படையாகக் குறிக்கப்படாத ஒரு " +"டிச்ட்ரோவுடன் இயங்குகிறது மொழிபெயர்ப்பாளர், அது எப்போதும் வேலை செய்ததால் வேலை செய்யும்." #: ../source/specifications/externally-managed-environments.rst:148 msgid "" @@ -14913,10 +20831,20 @@ msgid "" "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 "" @@ -14924,18 +20852,25 @@ msgid "" "not an external tool such as apt) installs a package into a certain Python " "context, it should make the following checks by default:" msgstr "" +"ஒரு பைதான் -குறிப்பிட்ட தொகுப்பு நிறுவி (அதாவது, பிஐபி போன்ற ஒரு கருவி - APT போன்ற " +"வெளிப்புற கருவி அல்ல) ஒரு தொகுப்பை ஒரு குறிப்பிட்ட பைதான் சூழலில் நிறுவுவதற்கு முன், " +"இது இயல்புநிலையாக பின்வரும் சோதனைகளை உருவாக்க வேண்டும்:" #: ../source/specifications/externally-managed-environments.rst:167 msgid "" "Is it running outside of a virtual environment? It can determine this by " "whether ``sys.prefix == sys.base_prefix``." msgstr "" +"இது ஒரு மெய்நிகர் சூழலுக்கு வெளியே இயங்குகிறதா? `` Sys.prefix == " +"sys.base_prefix`` என்பதன் மூலம் இதை தீர்மானிக்க முடியும்." #: ../source/specifications/externally-managed-environments.rst:170 msgid "" "Is there an ``EXTERNALLY-MANAGED`` file in the directory identified by " "``sysconfig.get_path(\"stdlib\", sysconfig.get_default_scheme())``?" msgstr "" +"`` Sysconfig.get_path (\"stdlib\", sysconfig.get_default_scheme ()) `` `` `` " +"ஆல் அடையாளம் காணப்பட்ட கோப்பகத்தில் `` வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` கோப்பு உள்ளதா?" #: ../source/specifications/externally-managed-environments.rst:173 msgid "" @@ -14943,6 +20878,9 @@ msgid "" "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 "" @@ -14951,6 +20889,9 @@ msgid "" "be enabled by default and should carry some connotation that its use is " "risky." msgstr "" +"கட்டளை-வரி கொடி ``-பிரேக்-சிச்டம்-பேக்கேச்கள்`` போன்ற இந்த விதிகளை பயனருக்கு மேலெழுத " +"நிறுவி ஒரு வழியைக் கொண்டிருக்க வேண்டும். இந்த விருப்பம் இயல்புநிலையாக இயக்கப்படக்கூடாது, " +"அதன் பயன்பாடு ஆபத்தானது என்ற சில அர்த்தங்களைக் கொண்டிருக்க வேண்டும்." #: ../source/specifications/externally-managed-environments.rst:182 msgid "" @@ -14968,6 +20909,19 @@ msgid "" "underscore or hyphen. If it cannot find either of those, or if the language " "code is ``None``, it should look for a key simply named ``Error``." msgstr "" +"`` வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` கோப்பு என்பது ஒரு ஐ.என்.ஐ-பாணி மேனிலை தரவு " +"கோப்பாகும், இது நிலையான நூலக கட்டமைப்பு_ தொகுதி மூலம் பாகுபடுத்தக்கூடியதாக இருக்கும். " +"கோப்பை `` configparser.configparser (இடைக்கணிப்பு = எதுவுமில்லை) `` `யுடிஎஃப் -8 " +"குறியாக்கத்தைப் பயன்படுத்துவதன் மூலம் பாகுபடுத்த முடியும் என்றால், அதில் ஒரு பிரிவு` `" +"[வெளிப்புறமாக நிர்வகிக்கப்படும்]` `ஆகியவற்றைக் கொண்டுள்ளது, பின்னர் நிறுவி ஒரு பிழை " +"செய்தியைத் தேட வேண்டும் கோப்பில் குறிப்பிடப்பட்டுள்ளது மற்றும் அதன் பிழையின் ஒரு பகுதியாக " +"அதை வெளியிடுகிறது. டூப்பின் முதல் உறுப்பு `` locale.getLocale " +"(locale.lc_messages) ``, அதாவது, மொழிக் குறியீடு, `` எதுவுமில்லை'` அல்ல என்றால், " +"அது பிழை செய்தியை பெயரிடப்பட்ட ஒரு முக்கிய மதிப்பாக பார்க்க வேண்டும் `` பிழை- `` மொழித்" +" குறியீட்டைத் தொடர்ந்து. அந்த விசை இல்லையென்றால், மொழிக் குறியீட்டில் அடிக்கோடிட்டு அல்லது " +"ஐபன் இருந்தால், அது `` பிழை-` 'என்ற விசையை அடிக்கோடிட்டுக் காட்ட வேண்டும். அவற்றில் " +"ஏதேனும் ஒன்றைக் கண்டுபிடிக்க முடியாவிட்டால், அல்லது மொழிக் குறியீடு `` எதுவுமில்லை`` " +"என்றால், அது வெறுமனே `` பிழை` என்ற பெயரைக் காண வேண்டும்." #: ../source/specifications/externally-managed-environments.rst:200 msgid "" @@ -14977,6 +20931,10 @@ msgid "" "should suggest that the user create a virtual environment to install " "packages." msgstr "" +"நிறுவி கோப்பில் பிழை செய்தியைக் கண்டுபிடிக்க முடியாவிட்டால் (கோப்பை பாகுபடுத்த முடியாது" +" அல்லது பொருத்தமான பிழை விசை இல்லாததால்), நிறுவி அதன் சொந்த முன் வரையறுக்கப்பட்ட பிழை " +"செய்தியைப் பயன்படுத்த வேண்டும், இது பயனரை பரிந்துரைக்க வேண்டும் தொகுப்புகளை நிறுவ ஒரு " +"மெய்நிகர் சூழலை உருவாக்கவும்." #: ../source/specifications/externally-managed-environments.rst:206 msgid "" @@ -14986,12 +20944,19 @@ msgid "" "directory. For instance, Debian may ship a file in ``/usr/lib/python3.9/" "EXTERNALLY-MANAGED`` consisting of something like" msgstr "" +"பைதான் அல்லாத-குறிப்பிட்ட தொகுப்பு மேலாளரைக் கொண்ட மென்பொருள் விநியோகச்தர்கள், அவர்களின் " +"பைதான் தொகுப்பின் `` sys.bath`` இல் உள்ள நூலகங்களை நிர்வகிக்கும், பொதுவாக, `` " +"வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` கோப்பை அவர்களின் நிலையான நூலக கோப்பகத்தில் அனுப்ப வேண்டும்" +". உதாரணமாக, டெபியன் ஒரு கோப்பை ``/usr/lib/python3.9/வெளிப்புறமாக நிர்வகிக்கப்பட்ட` " +"போன்றவற்றில் அனுப்பலாம்." #: ../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 "" @@ -15000,10 +20965,14 @@ msgid "" "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 "" +msgstr "இலக்கு `` சிச்கான்ஃபிக்`` திட்டத்திற்கு மட்டுமே எழுதுதல்" #: ../source/specifications/externally-managed-environments.rst:249 msgid "" @@ -15012,6 +20981,10 @@ msgid "" "the scheme returned by ``sysconfig.get_default_scheme()``, but based on " "configuration (e.g. ``pip install --user``), it may use a different scheme." msgstr "" +"வழக்கமாக, ஒரு பைதான் தொகுப்பு நிறுவி `` சிச்கான்ஃபிக்`` நிலையான நூலக தொகுப்பு மூலம் " +"திரும்பிய திட்டத்தில் கோப்பகங்களுக்கு நிறுவுகிறது. பொதுவாக, இது `` " +"sysconfig.get_default_scheme () `` வழங்கிய திட்டமாகும், ஆனால் உள்ளமைவின் அடிப்படையில்" +" (எ.கா." #: ../source/specifications/externally-managed-environments.rst:255 msgid "" @@ -15022,42 +20995,56 @@ msgid "" "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 "" +msgstr "டிச்ட்ரோக்களுக்கான பரிந்துரைகள்" #: ../source/specifications/externally-managed-environments.rst:273 msgid "" "This section is non-normative. It provides best practices we believe distros " "should follow unless they have a specific reason otherwise." msgstr "" +"இந்த பிரிவு நெறிமுறையற்றது. டிச்ட்ரோக்கள் ஒரு குறிப்பிட்ட காரணத்தை இல்லாவிட்டால் " +"அவர்களுக்கு பின்பற்ற வேண்டும் என்று நாங்கள் நம்புகிறோம்." #: ../source/specifications/externally-managed-environments.rst:277 msgid "Mark the installation as externally managed" -msgstr "" +msgstr "வெளிப்புறமாக நிர்வகிக்கப்பட்டபடி நிறுவலைக் குறிக்கவும்" #: ../source/specifications/externally-managed-environments.rst:279 msgid "" "Distros should create an ``EXTERNALLY-MANAGED`` file in their ``stdlib`` " "directory." msgstr "" +"டிச்ட்ரோக்கள் தங்கள் `` stdlib`` கோப்பகத்தில் `` வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` கோப்பை " +"உருவாக்க வேண்டும்." #: ../source/specifications/externally-managed-environments.rst:283 msgid "Guide users towards virtual environments" -msgstr "" +msgstr "மெய்நிகர் சூழல்களை நோக்கி பயனர்களை வழிநடத்துங்கள்" #: ../source/specifications/externally-managed-environments.rst:285 msgid "" @@ -15069,6 +21056,12 @@ msgid "" "venv`` does not work, the message should indicate clearly how to make " "``python3 -m venv`` work properly." msgstr "" +"டிச்ட்ரோவின் தொகுப்பு மேலாளர் வழியாக கணினி அளவிலான தொகுப்புகளை எவ்வாறு நிறுவுவது " +"மற்றும் மெய்நிகர் சூழலை எவ்வாறு அமைப்பது என்பதைக் குறிக்கும் பயனுள்ள மற்றும் டிச்ட்ரோ தொடர்பா" +"ன பிழை செய்தியை கோப்பில் கொண்டிருக்க வேண்டும். `` பைதான் 3`` கட்டளை கிடைக்கும் (குறிப்பா" +"க `` பிப்`` அல்லது `` கெட் -பிப்`` கிடைக்கும் இடத்தில்) உங்கள் டிச்ட்ரோ பெரும்பாலும் " +"பயனர்களால் பயன்படுத்தப்பட்டால்) ஆனால் `` பைதான் 3 -எம் வென்வ்``` வேலை செய்யாது, செய்தி `` " +"பைதான் 3 -எம் வெர்வ்`` சரியாக வேலை செய்வது எப்படி என்பதை தெளிவாகக் குறிக்க வேண்டும்." #: ../source/specifications/externally-managed-environments.rst:293 msgid "" @@ -15083,10 +21076,20 @@ msgid "" "for Python for end users (e.g., ``python3`` on Fedora or ``python3-full`` on " "Debian) depends on pipx." msgstr "" +"பைதான்-மொழி பயன்பாடுகளை நிறுவுவதற்கான கருவியான PIPX_ ஐ பேக்கேசிங் செய்வதைக் " +"கவனியுங்கள், மேலும் அதை பிழையில் பரிந்துரைக்கவும். PIPX தானாகவே அந்த பயன்பாட்டிற்கான ஒரு" +" மெய்நிகர் சூழலை உருவாக்குகிறது, இது சில பைதான்-மொழி மென்பொருளை (இது டிச்ட்ரோவில் " +"கிடைக்கவில்லை) நிறுவ விரும்பும் இறுதி பயனர்களுக்கு மிகச் சிறந்த இயல்புநிலையாகும், ஆனால் " +"அவை பைதான் பயனர்கள் அல்ல. டிச்ட்ரோவில் உள்ள பிஐபிஎக்ச் பேக்கேசிங் பயனர்களுக்கு `` பிஐபி " +"நிறுவுதல்-யூசர்-பிரேக்-சிச்டம்-பேக்கேச்கள் பிப்எக்ச்`` கணினி தொகுப்புகளை உடைப்பதை * தவிர்க்" +"க அறிவுறுத்துவதன் முரண்பாட்டைத் தவிர்க்கிறது. விசயங்களை ஒழுங்குபடுத்துவதைக் கவனியுங்கள், " +"எனவே இறுதி பயனர்களுக்கான பைத்தானுக்கான உங்கள் டிச்ட்ரோவின் தொகுப்பு / சூழல் (எ.கா., " +"ஃபெடோராவில் `` பைதான் 3`` அல்லது `` பைதான் 3-ஃபுல்`` டெபியன் மீது) பிப்எக்ச் " +"சார்ந்துள்ளது." #: ../source/specifications/externally-managed-environments.rst:308 msgid "Keep the marker file in container images" -msgstr "" +msgstr "மார்க்கர் கோப்பை கொள்கலன் படங்களில் வைக்கவும்" #: ../source/specifications/externally-managed-environments.rst:310 msgid "" @@ -15096,10 +21099,14 @@ msgid "" "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 "" +msgstr "தனி டிச்ட்ரோ மற்றும் உள்ளக கோப்பகங்களை உருவாக்கவும்" #: ../source/specifications/externally-managed-environments.rst:319 msgid "" @@ -15111,6 +21118,12 @@ msgid "" "system administrator should come before the distro path on ``sys.path`` so " "that local installs take preference over distro packages." msgstr "" +"டிச்ட்ரோக்கள் கணினி மொழிபெயர்ப்பாளரின் `` sys.bath``, ஒன்று டிச்ட்ரோ-நிறுவப்பட்ட " +"தொகுப்புகளுக்கு மற்றும் உள்ளக கணினி நிர்வாகியால் நிறுவப்பட்ட தொகுப்புகளுக்கு ஒன்று வைக்க " +"வேண்டும், மேலும் `` sysconfig.get_default_scheme () `` பிந்தைய பாதை. பிஐபி போன்ற " +"கருவிகள் டிச்ட்ரோ நிறுவப்பட்ட தொகுப்புகளை மாற்றாது என்பதை இது உறுதி செய்கிறது. உள்ளக " +"கணினி நிர்வாகிக்கான பாதை `` sys.path`` இல் டிச்ட்ரோ பாதைக்கு முன் வர வேண்டும், இதனால் " +"உள்ளக நிறுவல்கள் டிச்ட்ரோ தொகுப்புகளை விட முன்னுரிமை பெறுகின்றன." #: ../source/specifications/externally-managed-environments.rst:328 msgid "" @@ -15125,6 +21138,15 @@ msgid "" "wishes to make sure that packages installed via the locally-built " "interpreter don't show up on ``sys.path`` for the distro interpreter.)" msgstr "" +"எடுத்துக்காட்டாக, ஃபெடோரா மற்றும் டெபியன் (மற்றும் அவற்றின் வழித்தோன்றல்கள்) இருவரும் " +"உள்நாட்டில் நிறுவப்பட்ட தொகுப்புகளுக்கு ``/usr/local` மற்றும் டிச்ட்ரோ நிறுவப்பட்ட " +"தொகுப்புகளுக்கு ``/usr`` ஆகியவற்றைப் பயன்படுத்தி இந்த பிளவுகளை செயல்படுத்துகிறார்கள். " +"ஃபெடோரா ``/usr/local/lib/python3.x/site- பேக்கேச்கள்` `` `/usr/lib/python3.x/" +"site-packages`` ஐப் பயன்படுத்துகிறது. . நீங்கள் ``/usr/local/bin`` இல் மேலோடை " +"சிபிதானை உருவாக்கி நிறுவுகிறீர்கள், அது பார்க்கும் ``/usr/local/lib/python3/site-" +"packages``, மற்றும் உள்நாட்டில் கட்டப்பட்ட மொழிபெயர்ப்பாளர் வழியாக நிறுவப்பட்ட தொகுப்புகள் " +"டிச்ட்ரோ மொழிபெயர்ப்பாளருக்கு `` sys.path`` இல் காண்பிக்கப்படாது என்பதை உறுதிப்படுத்த " +"டெபியன் விரும்புகிறார். )" #: ../source/specifications/externally-managed-environments.rst:341 msgid "" @@ -15133,6 +21155,10 @@ msgid "" "and non-distro software installs to ``/usr/local`` by default. This split is " "`recommended by the Filesystem Hierarchy Standard`__." msgstr "" +"``/Usr/local` vs. ``/usr``` பிளவு `` பாதை`` சுற்றுச்சூழல் மாறுபாடு பொதுவாக ``/" +"usr/local/bin:/usr/bin`` மற்றும் எவ்வாறு அடங்கும் என்பதற்கு ஒத்ததாக இருக்கிறது என்பதை " +"நினைவில் கொள்க டிச்ட்ரோ அல்லாத மென்பொருள் இயல்பாக ``/usr/local`` க்கு நிறுவுகிறது. இந்" +"த பிளவு `கோப்பு முறைமை வரிசைமுறை தரநிலையால் பரிந்துரைக்கப்படுகிறது`__." #: ../source/specifications/externally-managed-environments.rst:349 msgid "" @@ -15141,6 +21167,8 @@ msgid "" "wheel or call ``setup.py install``), arrange for those tools to use a " "directory that is not in a ``sysconfig`` scheme but is still on ``sys.path``." msgstr "" +"இதை நீங்கள் செய்ய இரண்டு வழிகள் உள்ளன. ஒன்று, நீங்கள் பைதான் நூலகங்களை நேரடியாக உருவாக்கி " +"பேக்கேசிங் செய்தால் (எ.கா. `திட்டம் ஆனால் இன்னும்` `sys.bath`` இல் உள்ளது." #: ../source/specifications/externally-managed-environments.rst:355 msgid "" @@ -15153,6 +21181,14 @@ msgid "" "from inside a package build. Then you can use ``pip install`` as part of " "your distro packaging." msgstr "" +"மற்றொன்று, நிறுவப்பட்ட கணினியில் இயங்கும் போது ஒரு தொகுப்பு கட்டமைப்பிற்குள் இயங்கும்போது " +"இயல்புநிலை `` சிச்கான்ஃபிக்`` திட்டத்தை மாற்ற ஏற்பாடு செய்ய வேண்டும். BPO-43976_ " +"இலிருந்து `` sysconfig`` தனிப்பயனாக்குதல் கொக்கிகள் இதை எளிதாக்க வேண்டும் (ஒருமுறை " +"ஏற்றுக்கொள்ளப்பட்டு செயல்படுத்தப்பட்டால்): உங்கள் பேக்கேசிங் கருவியை சூழல் மாறியை அமைக்கவும் " +"அல்லது வேறு ஏதேனும் கண்டறியக்கூடிய உள்ளமைவை அமைக்கவும், மேலும் `` " +"get_preferred_schemes`` செயல்பாட்டை வரையறுக்கவும் ஒரு தொகுப்பு கட்டமைப்பிற்குள் இருந்து" +" அழைக்கும்போது திட்டம். உங்கள் டிச்ட்ரோ பேக்கேசிங்கின் ஒரு பகுதியாக `` பிஐபி நிறுவுதல்` " +"ஐப் பயன்படுத்தலாம்." #: ../source/specifications/externally-managed-environments.rst:367 msgid "" @@ -15165,6 +21201,11 @@ msgid "" "absolutely needed, use ``pip uninstall --scheme=posix_distro`` to use pip to " "remove packages from the system-managed directory." msgstr "" +"ஒரு குறிப்பிட்ட திட்டத்திற்கு எதிராக இயங்க PIP க்கு அறிவுறுத்துவதற்கான `` --scheme = " +"... `` விருப்பத்தை சேர்க்க நாங்கள் முன்மொழிகிறோம். . உங்கள் டிச்ட்ரோவின் இருப்பிடத்தில் ஒரு " +"தொகுப்பை நிறுவவும் (`` get_prefered_schemes`` ஐத் தவிர்த்து). கணினி-நிர்வகிக்கப்பட்ட " +"கோப்பகத்திலிருந்து தொகுப்புகளை அகற்ற PIP ஐப் பயன்படுத்த `` பிஐபி நிறுவல் நீக்குதல்-" +"scheme = posix_distro`` ஐப் பயன்படுத்தலாம்." #: ../source/specifications/externally-managed-environments.rst:377 msgid "" @@ -15173,6 +21214,10 @@ msgid "" "the command line. You may want to use the same means for suppressing the " "marker file in build chroots as you do in container images." msgstr "" +"பிஐபி மூலம் தொகுப்புகளை நிறுவ, பிஐபி இயக்க அனுமதிக்க அல்லது கட்டளை வரியில் அதை " +"மேலெழுத, `` வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` மார்க்கர் கோப்பை அடக்க வேண்டும். கொள்கலன் " +"படங்களில் நீங்கள் செய்வது போல மார்க்கர் கோப்பை உருவாக்குவதற்கு அதே வழிமுறையை நீங்கள் பயன்படுத்" +"த விரும்பலாம்." #: ../source/specifications/externally-managed-environments.rst:383 msgid "" @@ -15185,12 +21230,21 @@ msgid "" "packaging process always calls ``pip install --scheme=posix_distro --break-" "system-packages``, which would work too." msgstr "" +"இவற்றை தானாக அமைப்பதன் நன்மை (உங்கள் உருவாக்க சூழலில் மார்க்கர் கோப்பை அடக்குதல் மற்றும் `` " +"get_prefered_schemes`` உங்கள் டிச்ட்ரோவின் திட்டத்தை தானாகவே திருப்பித் தருவது) என்பது " +"ஒரு அலங்காரமற்ற `` பிஐபி நிறுவல்`` ஒரு தொகுப்பு கட்டமைப்பிற்குள் செயல்படும், இது பொதுவா" +"க `` பிஐபி நிறுவுதல்`` உள்நாட்டில் அழைக்கப்படும் ஒரு மாற்றப்படாத மேலோடை உருவாக்க " +"ச்கிரிப்ட் சரியானதைச் செய்யும். நிச்சயமாக, உங்கள் பேக்கேசிங் செயல்முறை எப்போதுமே `` பிஐபி " +"நிறுவல் --சேம் = POSIX_DISTRO-பிரேக்-சிச்டம்-பேக்கேச்கள்`` என்று அழைப்பதை நீங்கள் " +"உறுதிப்படுத்திக் கொள்ளலாம், அதுவும் வேலை செய்யும்." #: ../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 "" @@ -15205,16 +21259,25 @@ msgid "" "``scripts`` and ``/usr/bin`` for distro-packaged entry points and place both " "on ``$PATH``." msgstr "" +"இதேபோல், இறக்குமதி செய்யக்கூடிய பைதான் குறியீட்டிற்காக இல்லாத `` சிச்கான்ஃபிக்` பாதைகள் - " +"அதாவது `` அடங்கும்``, `` பிளாட்டின்க்ளூட்``, `` ச்கிரிப்ட்கள்``, மற்றும் `` தரவு`` - " +"இரண்டு வகைகளும் இருக்க வேண்டும் . உதாரணமாக, ஒரு பொதுவான FHS- இணக்கமான டிச்ட்ரோ " +"இயல்புநிலை திட்டத்தின் `` ``` மற்றும்` `/usr/`` டிச்ட்ரோ-பேக்கேச் செய்யப்பட்ட " +"தலைப்புகளுக்கு` `/usr/incllow`` ஐப் பயன்படுத்தும். தேடல் பாதையைத் தேடுங்கள், இது " +"இயல்புநிலை திட்டத்தின் `` ச்கிரிப்ட்கள்`` மற்றும் ``/usr/bin`` டிச்ட்ரோ-தொகுக்கப்பட்ட நுழைவு" +" புள்ளிகளுக்கு `` $ பாதை`` இரண்டையும் வைக்கவும்." #: ../source/specifications/externally-managed-environments.rst:410 msgid "Implementation Notes" -msgstr "" +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 "" @@ -15222,10 +21285,13 @@ msgid "" "target ``sysconfig`` scheme, but it has three ways of looking up schemes " "when installing:" msgstr "" +"தற்போது (மே 2021 நிலவரப்படி), ஒரு இலக்கை `` சிச்கான்ஃபிக்`` திட்டத்தைத் தேர்ந்தெடுப்பதற்கா" +"ன வழியை பிஐபி நேரடியாக அம்பலப்படுத்தவில்லை, ஆனால் நிறுவும் போது திட்டங்களைப் பார்ப்பதற்கா" +"ன மூன்று வழிகள் உள்ளன:" #: ../source/specifications/externally-managed-environments.rst:422 msgid "``pip install``" -msgstr "" +msgstr "`` பிஐபி நிறுவுதல்``" #: ../source/specifications/externally-managed-environments.rst:420 msgid "" @@ -15233,28 +21299,32 @@ msgid "" "CPython and most current distros) the same as " "``get_preferred_scheme('prefix')``." msgstr "" +"`` Sysconfig.get_default_scheme () ``, இது வழக்கமாக (அப்ச்ட்ரீம் சிபிதான் மற்றும் " +"பெரும்பாலான தற்போதைய டிச்ட்ரோக்களில்) `` get_prefered_scheme ('முன்னொட்டு') ``." #: ../source/specifications/externally-managed-environments.rst:425 msgid "``pip install --prefix=/some/path``" -msgstr "" +msgstr "`` பிஐபி நிறுவுதல் -பிரெஃபிக்ச் =/சில/பாதை``" #: ../source/specifications/externally-managed-environments.rst:425 msgid "Calls ``sysconfig.get_preferred_scheme('prefix')``." -msgstr "" +msgstr "`` Sysconfig.get_prefered_scheme ('முன்னொட்டு') ``." #: ../source/specifications/externally-managed-environments.rst:428 msgid "``pip install --user``" -msgstr "" +msgstr "`` பிஐபி நிறுவுதல் --user``" #: ../source/specifications/externally-managed-environments.rst:428 msgid "Calls ``sysconfig.get_preferred_scheme('user')``." -msgstr "" +msgstr "`` Sysconfig.get_prefered_scheme ('பயனர்') ``." #: ../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 "" @@ -15267,6 +21337,13 @@ msgid "" "``sysconfig`` scheme, and notably does not change the result of ``sysconfig." "get_path(\"stdlib\")``." msgstr "" +"டெபியன் தற்போது ஒரு மெய்நிகர் சூழலுக்குள் இயல்புநிலை நிறுவும் இருப்பிடத்தை மாற்ற ஒரு " +"`பேட்சைக் கொண்டு செல்கிறார், சில ஊரிச்டிக்சைப் பயன்படுத்தி (` `மெய்நிகர்_இன்`` சுற்றுச்சூழல் " +"மாறியைச் சரிபார்ப்பது உட்பட), பெரும்பாலும் மெய்நிகர் சூழலில் பயன்படுத்தப்படும் அடைவு `` " +"தள-பேக்கேச்கள்`` மற்றும் `` மாவட்ட-பேக்கேச்கள்`` அல்ல. இது குறிப்பாக இந்த திட்டத்தை " +"பாதிக்காது, ஏனென்றால் அந்த இணைப்பை செயல்படுத்துவது உண்மையில் இயல்புநிலை `` சிச்கான்ஃபிக்` " +"திட்டத்தை மாற்றாது, குறிப்பாக `` sysconfig.get_path (\"stdlib\") `` இன் முடிவை " +"மாற்றாது." #: ../source/specifications/externally-managed-environments.rst:445 msgid "" @@ -15276,6 +21353,11 @@ msgid "" "envisioned by bpo-43976_, except implemented as a code patch to " "``distutils`` instead of as a changed ``sysconfig`` scheme." msgstr "" +"ஃபெடோரா தற்போது rpmbuild`__ க்குள் இயங்காதபோது இயல்புநிலை நிறுவல் இருப்பிடத்தை மாற்ற " +"ஒரு `பேட்சைக் கொண்டுள்ளது, அவை இரண்டு அமைப்பு அளவிலான-இயக்குநர்கள் அணுகுமுறையை " +"செயல்படுத்த பயன்படுத்துகின்றன. மாற்றப்பட்ட `` சிச்கான்ஃபிக்`` திட்டமாக பதிலாக `` " +"டிச்ட்டில்ச்`` ஒரு குறியீடு இணைப்பாக செயல்படுத்தப்பட்டதைத் தவிர, இது பிபிஓ -43976_ ஆல் " +"கற்பனை செய்யப்பட்ட கொக்கி என்பது கருத்தியல் ரீதியாக உள்ளது." #: ../source/specifications/externally-managed-environments.rst:454 msgid "" @@ -15285,24 +21367,30 @@ msgid "" "respectively), to centralize their implementations, but they don't need to " "be added yet." msgstr "" +"மேலே உள்ள `` is_virtual_enveronment``, அத்துடன் `` வெளிப்புறமாக நிர்வகிக்கப்பட்ட`` " +"கோப்பை ஏற்றுவதற்கும், அதிலிருந்து பிழை செய்தியைக் கண்டுபிடிப்பதற்கும் தர்க்கத்தையும் " +"செயல்படுத்துவதும் நிலையான நூலகத்தில் சேர்க்கப்படலாம் (`sys`` மற்றும் `` sysconfig``` " +"`முறையே), அவற்றின் செயலாக்கங்களை மையப்படுத்த, ஆனால் அவை இன்னும் சேர்க்கப்பட வேண்டியதில்லை." #: ../source/specifications/externally-managed-environments.rst:464 msgid "Copyright" -msgstr "" +msgstr "பதிப்புரிமை" #: ../source/specifications/externally-managed-environments.rst:466 msgid "" "This document is placed in the public domain or under the CC0-1.0-Universal " "license, whichever is more permissive." msgstr "" +"இந்த ஆவணம் பொது களத்தில் அல்லது CC0-1.0-பல்கலைக்கழக உரிமத்தின் கீழ் வைக்கப்பட்டுள்ளது, எது " +"மிகவும் அனுமதிக்கப்பட்டாலும்." #: ../source/specifications/externally-managed-environments.rst:474 msgid "June 2022: This specification was approved through :pep:`668`." -msgstr "" +msgstr "சூன் 2022: இந்த விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `668`." #: ../source/specifications/index.rst:4 msgid "PyPA specifications" -msgstr "" +msgstr "PYPA விவரக்குறிப்புகள்" #: ../source/specifications/index.rst:6 msgid "" @@ -15311,14 +21399,17 @@ msgid "" "standards, and for proposing new ones, is documented on `pypa.io `__." msgstr "" +"இது பைதான் பேக்கேசிங் ஆணையத்தால் பராமரிக்கப்படும் தற்போது செயலில் உள்ள இயங்குதன்மை " +"விவரக்குறிப்புகளின் பட்டியல். இந்த தரங்களை புதுப்பிப்பதற்கான செயல்முறை, மற்றும் புதியவற்றை " +"முன்மொழியுவதற்காக, `pypa.io __." #: ../source/specifications/index-hosted-attestations.rst:6 msgid "Index hosted attestations" -msgstr "" +msgstr "குறியீட்டு புரவலன் சான்றுகள்" #: ../source/specifications/index-hosted-attestations.rst:8 msgid "This specification was originally defined in :pep:`740`." -msgstr "" +msgstr "இந்த விவரக்குறிப்பு முதலில் வரையறுக்கப்பட்டது: PEP: `740`." #: ../source/specifications/index-hosted-attestations.rst:12 msgid "" @@ -15326,10 +21417,13 @@ msgid "" "are documented in the :ref:`simple-repository-api` under :ref:`simple-" "repository-api-base` and :ref:`json-serialization`." msgstr "" +": PEP: `740` உஉகுமொ மற்றும் சாதொபொகு குறியெண் பநிஇ களில் மாற்றங்களை உள்ளடக்கியது. இந்" +"த மாற்றங்கள்: ref: `Simple-reposition-api` இன் கீழ் ஆவணப்படுத்தப்பட்டுள்ளன: ref:` " +"எளிய-ரோபோசிட்டரி-ஆபி-பேச்` மற்றும்: குறிப்பு: `json-cerialization`." #: ../source/specifications/index-hosted-attestations.rst:22 msgid "Upload endpoint changes" -msgstr "" +msgstr "இறுதிப்புள்ளி மாற்றங்களை பதிவேற்றவும்" #: ../source/specifications/index-hosted-attestations.rst:26 msgid "" @@ -15337,10 +21431,13 @@ msgid "" "documentation `_ for how attestations are " "uploaded." msgstr "" +"\"லெகசி\" பதிவேற்ற பநிஇ தரப்படுத்தப்படவில்லை. `PYPI இன் பதிவேற்ற பநிஇ ஆவணங்கள் " +"` _ சான்றுகள் எவ்வாறு பதிவேற்றப்படுகின்றன என்பதைப்" +" பார்க்கவும்." #: ../source/specifications/index-hosted-attestations.rst:33 msgid "Attestation objects" -msgstr "" +msgstr "சான்றளிப்பு பொருள்கள்" #: ../source/specifications/index-hosted-attestations.rst:35 msgid "" @@ -15349,6 +21446,10 @@ msgid "" "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 "" @@ -15358,6 +21459,11 @@ msgid "" "sources of signed time (such as an :rfc:`3161` Time Stamping Authority or a " "`Roughtime `__ server)." msgstr "" +"`` வெளிப்படைத்தன்மை_இஎன்டரிசில் உள்ள ஒவ்வொரு பொருளுக்கும் ஒரு முழு தரவு மாதிரி " +"வழங்கப்பட்டுள்ளது: குறிப்பு: `பின் இணைப்பு`. சான்றளிப்பு பொருள்கள் ** ** ஒன்று அல்லது " +"அதற்கு மேற்பட்ட வெளிப்படைத்தன்மை பதிவு உள்ளீடுகளை உள்ளடக்கியிருக்க வேண்டும், மேலும் ** " +"கையொப்பமிடப்பட்ட நேரத்தின் பிற ஆதாரங்களுக்கான கூடுதல் விசைகளை உள்ளடக்கியிருக்கலாம் (AN: " +"RFC: `3161` நேர முத்திரையிடும் அதிகாரம் அல்லது` rogatime `__, in JSON form. When serialized the statement is treated as an opaque " "binary blob, avoiding the need for canonicalization." msgstr "" +"சான்றளிப்பு அறிக்கை `வி 1 இன்-டோட்டோ அறிக்கை பொருளாக வடிவம். வரிசைப்படுத்தப்பட்டால், " +"அறிக்கை ஒரு ஒளிபுகா பைனரி குமிழியாக கருதப்படுகிறது, நியமனமயமாக்கலின் தேவையைத் " +"தவிர்க்கிறது." #: ../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 "" +"ஒரு வி 1 இன்-டோட்டோ அறிக்கையாக இருப்பதோடு மட்டுமல்லாமல், சான்றளிப்பு அறிக்கை பின்வரும் " +"வழிகளில் கட்டுப்படுத்தப்பட்டுள்ளது:" #: ../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 "" @@ -15418,6 +21542,9 @@ msgid "" "valid :ref:`source distribution ` or :ref:`wheel " "distribution ` filename." msgstr "" +"`` பொருள் [0] .பெயர்`` என்பது விநியோகத்தின் கோப்பு பெயர், இது ** ** செல்லுபடியாகும்: " +"குறிப்பு: `மூல வழங்கல் <மூல-விநியோக-வடிவ>` அல்லது: குறிப்பு: `சக்கர வழங்கல் " +"<பைனரி-விநியோக-- வடிவம்> `கோப்பு பெயர்." #: ../source/specifications/index-hosted-attestations.rst:126 msgid "" @@ -15425,22 +21552,27 @@ msgid "" "**MAY** be present. The digests **MUST** be represented as hexadecimal " "strings." msgstr "" +"`` பொருள் [0] .digest`` ** கட்டாயம் ** ஒரு SHA-256 டைசெச்டைக் கொண்டிருக்க வேண்டும். பி" +"ற செரிமானங்கள் ** இருக்கலாம் ** இருக்கலாம். செரிமானங்கள் ** ** எக்சாடெசிமல் சரங்களாக " +"குறிப்பிடப்பட வேண்டும்." #: ../source/specifications/index-hosted-attestations.rst:128 msgid "The following ``predicateType`` values are supported:" -msgstr "" +msgstr "பின்வரும் `` முன்னுரிமைப் வகை`` மதிப்புகள் ஆதரிக்கப்படுகின்றன:" #: ../source/specifications/index-hosted-attestations.rst:130 msgid "" "`SLSA Provenance `__: ``https://slsa.dev/" "provenance/v1``" -msgstr "" +msgstr ";" #: ../source/specifications/index-hosted-attestations.rst:131 msgid "" "`PyPI Publish Attestation `__: ``https://docs.pypi.org/attestations/publish/v1``" msgstr "" +"`PYPI சான்றிதழை வெளியிடுங்கள் ` " +"__: `` https: // docs.pypi.org/சான்றுகள்/வெளியீடு/v1``" #: ../source/specifications/index-hosted-attestations.rst:133 msgid "" @@ -15450,32 +21582,42 @@ msgid "" "and a ``PAYLOAD_BODY`` of the JSON-encoded statement above. No other " "``PAYLOAD_TYPE`` is permitted." msgstr "" +"இந்த அறிக்கையின் கையொப்பம் `வி 1 டி.எச்.எச்.இ கையொப்ப நெறிமுறை __ உடன், ஒரு` `bayode_type` " +"`` `விண்ணப்பம்/vnd.in-toto+json`` மற்றும் ஒரு` `பேலோட்_போடி`` இன் மேலே JSON- " +"குறியிடப்பட்ட அறிக்கை. வேறு `` பேலோட்_ டைப்`` அனுமதிக்கப்படவில்லை." #: ../source/specifications/index-hosted-attestations.rst:141 msgid "Provenance objects" -msgstr "" +msgstr "ஆதார பொருள்கள்" #: ../source/specifications/index-hosted-attestations.rst:143 msgid "" "The index will serve uploaded attestations along with metadata that can " "assist in verifying them in the form of JSON serialized objects." msgstr "" +"மெட்டாடேட்டாவுடன் பதிவேற்றிய சான்றிதழ்களை இந்த குறியீடு வழங்கும், அவை சாதொபொகு தொடர் " +"பொருள்களின் வடிவத்தில் சரிபார்க்க உதவக்கூடும்." #: ../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 "" +"இந்த * ஆதார பொருள்கள் * மேலே விவரிக்கப்பட்டுள்ளபடி எளிய குறியீட்டு மற்றும் JSON- " +"அடிப்படையிலான எளிய பநிஇ வழியாக கிடைக்கும், மேலும் பின்வரும் தளவமைப்பு இருக்கும்:" #: ../source/specifications/index-hosted-attestations.rst:169 msgid "or, as pseudocode:" -msgstr "" +msgstr "அல்லது, சூடோகோடாக:" #: ../source/specifications/index-hosted-attestations.rst:217 msgid "" "``version`` is ``1``. Like attestation objects, provenance objects are " "versioned, and this PEP only defines version ``1``." msgstr "" +"`` பதிப்பு`` இது `` 1``. சான்றளிப்பு பொருள்களைப் போலவே, ஆதாரப் பொருள்களும் " +"பதிக்கப்பட்டுள்ளன, மேலும் இந்த PEP பதிப்பை `` 1`` மட்டுமே வரையறுக்கிறது." #: ../source/specifications/index-hosted-attestations.rst:219 msgid "" @@ -15484,18 +21626,27 @@ msgid "" "(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 "" @@ -15503,10 +21654,13 @@ msgid "" "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 "" +msgstr "வெளியீட்டாளர் பொருளின் மற்ற அனைத்து விசைகளும் வெளியீட்டாளர் சார்ந்தவை." #: ../source/specifications/index-hosted-attestations.rst:235 msgid "" @@ -15515,16 +21669,21 @@ msgid "" "time, as described in :ref:`upload-endpoint` and :ref:`changes-to-provenance-" "objects`." msgstr "" +"சான்றளிக்கும் பொருள்களின் ஒவ்வொரு வரிசையும் பதிவேற்றப்பட்ட நேரத்தில் பதிவேற்றப்பட்ட `` " +"சான்றுகள்`` வரிசையின் ஒரு சூப்பர்செட் ஆகும், இதில் விவரிக்கப்பட்டுள்ளபடி: குறிப்பு: ref: " +"`பதிவேற்ற-எண்ட் பாயிண்ட்` மற்றும்: ref:` மாற்றங்கள்- பெறுநர் avownance-bocticals`." #: ../source/specifications/index-hosted-attestations.rst:243 msgid "Changes to provenance objects" -msgstr "" +msgstr "ஆதார பொருள்களில் மாற்றங்கள்" #: ../source/specifications/index-hosted-attestations.rst:245 msgid "" "Provenance objects are *not* immutable, and may change over time. Reasons " "for changes to the provenance object include but are not limited to:" msgstr "" +"ஆதார பொருள்கள் * மாறாதவை அல்ல, காலப்போக்கில் மாறக்கூடும். ஆதாரப் பொருளில் மாற்றங்களுக்கான " +"காரணங்கள் பின்வருவனவற்றை உள்ளடக்குகின்றன, ஆனால் அவை மட்டுப்படுத்தப்படவில்லை:" #: ../source/specifications/index-hosted-attestations.rst:248 msgid "" @@ -15532,6 +21691,10 @@ msgid "" "**MAY** choose to allow additional attestations by pre-existing signing " "identities, such as newer attestation versions for already uploaded files." msgstr "" +"முன்பே இருக்கும் கையொப்பமிடும் அடையாளத்திற்கான புதிய சான்றுகளைச் சேர்ப்பது: ஏற்கனவே " +"பதிவேற்றப்பட்ட கோப்புகளுக்கான புதிய சான்றளிப்பு பதிப்புகள் போன்ற முன்பே இருக்கும் " +"கையொப்பமிடும் அடையாளங்கள் மூலம் கூடுதல் சான்றுகளை அனுமதிக்க குறியீட்டு ** தேர்வு " +"செய்யலாம்." #: ../source/specifications/index-hosted-attestations.rst:253 msgid "" @@ -15541,34 +21704,42 @@ msgid "" "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 "" +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 "" +"`` பதிப்பு`` இது `` 1``. சரிபார்ப்பு ** ** வேறு எந்த பதிப்பையும் நிராகரிக்க வேண்டும்." #: ../source/specifications/index-hosted-attestations.rst:268 msgid "" "``verification_material.certificate`` is a valid signing certificate, as " "issued by an *a priori* trusted authority (such as a root of trust already " "present within the verifying client)." -msgstr "" +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 "" +msgstr "`` சரிபார்ப்பு_மாட்டியல்." #: ../source/specifications/index-hosted-attestations.rst:274 msgid "" @@ -15578,6 +21749,9 @@ msgid "" "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 "" @@ -15586,6 +21760,8 @@ msgid "" "the `v1 DSSE signature protocol `__." msgstr "" +"`` v1 dsse கையொப்பம் நெறிமுறை` `` உறை. __." #: ../source/specifications/index-hosted-attestations.rst:284 msgid "" @@ -15596,10 +21772,15 @@ msgid "" "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 "" +msgstr "பின் இணைப்பு: வெளிப்படைத்தன்மை பதிவு உள்ளீடுகளுக்கான தரவு மாதிரிகள்" #: ../source/specifications/index-hosted-attestations.rst:295 msgid "" @@ -15607,10 +21788,13 @@ msgid "" "in attestation objects. Each transparency log entry serves as a source of " "signed inclusion time, and can be verified either online or offline." msgstr "" +"இந்த பிற்சேர்க்கையில் சான்றளிப்பு பொருள்களில் வெளிப்படைத்தன்மை பதிவு உள்ளீடுகளுக்கான போலி " +"தரவு மாதிரிகள் உள்ளன. ஒவ்வொரு வெளிப்படைத்தன்மை பதிவு நுழைவும் கையொப்பமிடப்பட்ட சேர்க்கை " +"நேரத்தின் ஆதாரமாக செயல்படுகிறது, மேலும் ஆன்லைனில் அல்லது ஆஃப்லைனில் சரிபார்க்கலாம்." #: ../source/specifications/inline-script-metadata.rst:5 msgid "Inline script metadata" -msgstr "" +msgstr "இன்லைன் ச்கிரிப்ட் மேனிலை தரவு" #: ../source/specifications/inline-script-metadata.rst:7 msgid "" @@ -15618,12 +21802,17 @@ msgid "" "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 "" @@ -15635,6 +21824,13 @@ msgid "" "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 "" @@ -15645,6 +21841,11 @@ msgid "" "a space, otherwise just the first character (which means the line consists " "of only a single ``#``)." msgstr "" +"இந்த இரண்டு வரிகளுக்கிடையேயான ஒவ்வொரு வரியும் (``# /// type`` மற்றும் ``# /// `)` " +"`#` `உடன் தொடங்கும் கருத்தாக இருக்க வேண்டும். ``#`` க்குப் பிறகு எழுத்துக்கள் இருந்தால், " +"முதல் எழுத்து ஒரு இடமாக இருக்க வேண்டும். இரண்டாவது எழுத்து ஒரு இடமாக இருந்தால் ஒவ்வொரு " +"வரியின் முதல் இரண்டு எழுத்துக்களை எடுத்துச் செல்வதன் மூலம் உட்பொதிக்கப்பட்ட உள்ளடக்கம் " +"உருவாகிறது, இல்லையெனில் முதல் எழுத்து (இதன் பொருள் வரி ஒரே ஒரு ``#``) மட்டுமே உள்ளது." #: ../source/specifications/inline-script-metadata.rst:35 msgid "" @@ -15652,6 +21853,9 @@ msgid "" "valid embedded content line as described above. For example, the following " "is a single fully valid block:" msgstr "" +"மேலே விவரிக்கப்பட்டுள்ளபடி அடுத்த வரி செல்லுபடியாகும் உட்பொதிக்கப்பட்ட உள்ளடக்க வரியாக " +"இல்லாதபோது ``# /// `` ஒரு இறுதி வரிக்கான முன்னுரிமை வழங்கப்படுகிறது. எடுத்துக்காட்டா" +"க, பின்வருபவை முழுமையாக செல்லுபடியாகும் தொகுதி:" #: ../source/specifications/inline-script-metadata.rst:51 msgid "" @@ -15659,12 +21863,17 @@ msgid "" "ending line. In such cases tools MAY produce an error. Unclosed blocks MUST " "be ignored." msgstr "" +"மற்றொரு தொடக்க வரிக்கும் அதன் முடிவுக் கோட்டிற்கும் இடையில் ஒரு தொடக்க வரி " +"வைக்கப்படக்கூடாது. இதுபோன்ற சந்தர்ப்பங்களில் கருவிகள் பிழையை உருவாக்கக்கூடும். திறக்கப்படாத " +"தொகுதிகள் புறக்கணிக்கப்பட வேண்டும்." #: ../source/specifications/inline-script-metadata.rst:54 msgid "" "When there are multiple comment blocks of the same ``TYPE`` defined, tools " "MUST produce an error." msgstr "" +"ஒரே `` வகை`` வரையறுக்கப்பட்ட பல கருத்துத் தொகுதிகள் இருக்கும்போது, கருவிகள் பிழையை " +"உருவாக்க வேண்டும்." #: ../source/specifications/inline-script-metadata.rst:57 msgid "" @@ -15672,51 +21881,66 @@ msgid "" "declaration. If they choose not to do so, they MUST process the file as " "UTF-8." msgstr "" +"கருவிகள் படித்தல் உட்பொதிக்கப்பட்ட மேனிலை தரவு நிலையான பைதான் குறியாக்க அறிவிப்பை " +"மதிக்கலாம். அவ்வாறு செய்ய வேண்டாம் என்று அவர்கள் தேர்வுசெய்தால், அவர்கள் கோப்பை யுடிஎஃப் -8 " +"ஆக செயலாக்க வேண்டும்." #: ../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 "" +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]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" +"நடத்தையை உள்ளமைக்க `` [கருவி] `` அட்டவணை எந்தவொரு கருவி, ச்கிரிப்ட் ரன்னர் அல்லது " +"வேறுவிதமாக பயன்படுத்தப்படலாம். இது அதே சொற்பொருளைக் கொண்டுள்ளது: ref: `[கருவி] அட்டவணை" +" pyproject.toml `." #: ../source/specifications/inline-script-metadata.rst:86 msgid "The top-level fields are:" -msgstr "" +msgstr "உயர்மட்ட புலங்கள்:" #: ../source/specifications/inline-script-metadata.rst:88 msgid "" @@ -15724,6 +21948,9 @@ msgid "" "of the script. Each entry MUST be a valid :ref:`dependency specifier " "`." msgstr "" +"`` சார்புநிலைகள்``: ச்கிரிப்ட்டின் இயக்க நேர சார்புகளைக் குறிப்பிடும் சரங்களின் பட்டியல். " +"ஒவ்வொரு நுழைவும் செல்லுபடியாகும்: ref: `சார்பு விவரக்குறிப்பு " +"<சார்பு-விவரக்குறிப்புகள்>`." #: ../source/specifications/inline-script-metadata.rst:91 msgid "" @@ -15731,6 +21958,9 @@ msgid "" "which the script is compatible. The value of this field MUST be a valid :ref:" "`version specifier `." msgstr "" +"``-பைதான் தேவை` ``: ச்கிரிப்ட் இணக்கமான பைதான் பதிப்பை (களை) குறிப்பிடும் ஒரு சரம். இந்" +"த புலத்தின் மதிப்பு செல்லுபடியாகும்: ref: `பதிப்பு விவரக்குறிப்பு " +"<பதிப்பு-விவரக்குறிப்புகள்>`." #: ../source/specifications/inline-script-metadata.rst:95 msgid "" @@ -15738,20 +21968,26 @@ msgid "" "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:100 msgid "Example" -msgstr "" +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 "" +"பைதான் 3.11 அல்லது அதற்கு மேற்பட்ட மெட்டாடேட்டாவை எவ்வாறு படிப்பது என்பதற்கு பின்வருபவை " +"ஒரு எடுத்துக்காட்டு." #: ../source/specifications/inline-script-metadata.rst:151 msgid "" @@ -15759,6 +21995,9 @@ msgid "" "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 "" @@ -15766,17 +22005,22 @@ msgid "" "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:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" -msgstr "" +msgstr "பரிந்துரைகள்" #: ../source/specifications/inline-script-metadata.rst:207 msgid "" @@ -15784,12 +22028,16 @@ msgid "" "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 "" +"அக்டோபர் 2023: இந்த விவரக்குறிப்பு நிபந்தனையுடன் அங்கீகரிக்கப்பட்டது: PEP: `723`." #: ../source/specifications/inline-script-metadata.rst:216 msgid "" @@ -15798,10 +22046,14 @@ msgid "" "making the ``dependencies`` and ``requires-python`` keys top-level. " "Additionally, the specification is no longer provisional." msgstr "" +"சனவரி 2024: திருத்தங்கள் மூலம்: PEP: `723`,` `பைபிரோசெக்ட்`` மேனிலை தரவு பிளாக் வகை`" +" `ச்கிரிப்ட்`` என மறுபெயரிடப்பட்டது, மற்றும்` `ரன்]` `அட்டவணை கைவிடப்பட்டது,` `சார்புகளை " +"உருவாக்கியது `மற்றும்` `-பைதான்`` விசைகள் முதல் நிலை தேவை. கூடுதலாக, விவரக்குறிப்பு " +"இனி தற்காலிகமாக இல்லை." #: ../source/specifications/name-normalization.rst:3 msgid "Names and normalization" -msgstr "" +msgstr "பெயர்கள் மற்றும் இயல்பாக்கம்" #: ../source/specifications/name-normalization.rst:5 msgid "" @@ -15809,10 +22061,13 @@ msgid "" "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 "" +msgstr "பெயர் வடிவம்" #: ../source/specifications/name-normalization.rst:15 msgid "" @@ -15821,10 +22076,14 @@ msgid "" "valid project names are limited to those which match the following regex " "(run with :py:data:`re.IGNORECASE`)::" msgstr "" +"செல்லுபடியாகும் பெயர் ASCII கடிதங்கள் மற்றும் எண்கள், காலம், அடிக்கோடிட்டு மற்றும் ஐபன் " +"ஆகியவற்றைக் கொண்டுள்ளது. இது ஒரு கடிதம் அல்லது எண்ணுடன் தொடங்கி முடிக்க வேண்டும். இதன் " +"பொருள் செல்லுபடியாகும் திட்ட பெயர்கள் பின்வரும் ரீசெக்சுடன் பொருந்தக்கூடியவற்றுடன் " +"மட்டுப்படுத்தப்பட்டுள்ளன (இயங்கும்: PY: தரவு: `Re.ignorecase`) ::" #: ../source/specifications/name-normalization.rst:26 msgid "Name normalization" -msgstr "" +msgstr "பெயர் இயல்பாக்குதல்" #: ../source/specifications/name-normalization.rst:28 msgid "" @@ -15832,55 +22091,63 @@ msgid "" "or ``_`` replaced with a single ``-`` character. This can be implemented in " "Python with the re module:" msgstr "" +"```,` `-``, அல்லது` `_`` ஒரு ஒற்றை` `-`` எழுத்துடன் மாற்றப்பட்ட எழுத்துக்களின் அனைத்து " +"ரன்களிலும் பெயர் குறைவாக இருக்க வேண்டும். இதை RE தொகுதிக்கு பைதானில் செயல்படுத்தலாம்:" #: ../source/specifications/name-normalization.rst:39 msgid "This means that the following names are all equivalent:" -msgstr "" +msgstr "இதன் பொருள் பின்வரும் பெயர்கள் அனைத்தும் சமமானவை:" #: ../source/specifications/name-normalization.rst:41 msgid "``friendly-bard`` (normalized form)" -msgstr "" +msgstr "`` நட்பு-கார்ட்`` (இயல்பாக்கப்பட்ட வடிவம்)" #: ../source/specifications/name-normalization.rst:42 msgid "``Friendly-Bard``" -msgstr "" +msgstr "`` நட்பு-கார்ட்``" #: ../source/specifications/name-normalization.rst:43 msgid "``FRIENDLY-BARD``" -msgstr "" +msgstr "`` நட்பு-கார்ட்``" #: ../source/specifications/name-normalization.rst:44 msgid "``friendly.bard``" -msgstr "" +msgstr "`` நட்பு. பார்ட்``" #: ../source/specifications/name-normalization.rst:45 msgid "``friendly_bard``" -msgstr "" +msgstr "`` நட்பு_பார்ட்``" #: ../source/specifications/name-normalization.rst:46 msgid "``friendly--bard``" -msgstr "" +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 "" +"செப்டம்பர் 2015: இயல்பாக்கப்பட்ட பெயரின் விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `503 " +"<503#இயல்பாக்கப்பட்ட-பெயர்கள்>`." #: ../source/specifications/name-normalization.rst:54 msgid "" "November 2015: The specification of valid names was approved through :pep:" "`508 <508#names>`." msgstr "" +"நவம்பர் 2015: செல்லுபடியாகும் பெயர்களின் விவரக்குறிப்பு அங்கீகரிக்கப்பட்டது: PEP: `508 " +"<508#பெயர்கள்>`." #: ../source/specifications/platform-compatibility-tags.rst:6 msgid "Platform compatibility tags" -msgstr "" +msgstr "இயங்குதள பொருந்தக்கூடிய குறிச்சொற்கள்" #: ../source/specifications/platform-compatibility-tags.rst:8 msgid "" @@ -15888,32 +22155,38 @@ msgid "" "compatible with specific platforms, and allows installers to understand " "which distributions are compatible with the system they are running on." msgstr "" +"இயங்குதள பொருந்தக்கூடிய குறிச்சொற்கள் குறிப்பிட்ட தளங்களுடன் பொருந்தக்கூடியதாக இருப்பதைக் " +"குறிக்க கருவிகளை உருவாக்க அனுமதிக்கின்றன, மேலும் அவை இயங்கும் கணினியுடன் எந்த " +"விநியோகங்கள் இணக்கமாக உள்ளன என்பதை நிறுவிகள் புரிந்துகொள்ள அனுமதிக்கிறது." #: ../source/specifications/platform-compatibility-tags.rst:16 msgid "The tag format is ``{python tag}-{abi tag}-{platform tag}``." -msgstr "" +msgstr "குறிச்சொல் வடிவம் `` {python tag}-{abi tag}-{platform tag} ``." #: ../source/specifications/platform-compatibility-tags.rst:18 msgid "python tag" -msgstr "" +msgstr "பைதான் குறிச்சொல்" #: ../source/specifications/platform-compatibility-tags.rst:19 msgid "'py27', 'cp33'" -msgstr "" +msgstr "அப்பாக், நிரம்பியுள்ளது" #: ../source/specifications/platform-compatibility-tags.rst:21 msgid "'cp32dmu', 'none'" -msgstr "" +msgstr "'cp32dmu', 'எதுவுமில்லை'" #: ../source/specifications/platform-compatibility-tags.rst:23 msgid "'linux_x86_64', 'any'" -msgstr "" +msgstr "'லினக்ச்_எக்ச் 86_64', 'ஏதேனும்'" #: ../source/specifications/platform-compatibility-tags.rst:25 msgid "" "For example, the tag ``py27-none-any`` indicates compatibility with Python " "2.7 (any Python 2.7 implementation) with no abi requirement, on any platform." msgstr "" +"எடுத்துக்காட்டாக, `` py27-none-any-`` என்ற குறிச்சொல் பைதான் 2.7 (எந்த பைதான் 2.7 " +"செயல்படுத்தல்) உடன் பொருந்தக்கூடிய தன்மையைக் குறிக்கிறது, எந்தவொரு தளத்திலும் பநிஇ தேவை " +"இல்லை." #: ../source/specifications/platform-compatibility-tags.rst:28 msgid "" @@ -15921,46 +22194,55 @@ msgid "" "the form ``{distribution}-{version}(-{build tag})?-{python tag}-{abitag}-" "{platform tag}.whl``. Other package formats may have their own conventions." msgstr "" +"`` சக்கரம்`` கட்டப்பட்ட தொகுப்பு வடிவத்தில் இந்த குறிச்சொற்கள் அதன் கோப்பு பெயர்களில், " +"`{distribution}-{version} (-{build tag})? .whl``. பிற தொகுப்பு வடிவங்களில் " +"அவற்றின் சொந்த மரபுகள் இருக்கலாம்." #: ../source/specifications/platform-compatibility-tags.rst:33 msgid "Any potential spaces in any tag should be replaced with ``_``." msgstr "" +"எந்தவொரு குறிச்சொல்லிலும் உள்ள எந்த சாத்தியமான இடங்களும் `` _`` உடன் மாற்றப்பட வேண்டும்." #: ../source/specifications/platform-compatibility-tags.rst:37 msgid "Python Tag" -msgstr "" +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 "" +"PY: பொதுவான பைதான் (செயல்படுத்தல்-குறிப்பிட்ட நற்பொருத்தங்கள் தேவையில்லை)" #: ../source/specifications/platform-compatibility-tags.rst:43 msgid "cp: CPython" -msgstr "" +msgstr "சிபி: cpython" #: ../source/specifications/platform-compatibility-tags.rst:44 msgid "ip: IronPython" -msgstr "" +msgstr "ஐபி: அயர்ன் பிதான்" #: ../source/specifications/platform-compatibility-tags.rst:45 msgid "pp: PyPy" -msgstr "" +msgstr "பிபி: பைபி" #: ../source/specifications/platform-compatibility-tags.rst:46 msgid "jy: Jython" -msgstr "" +msgstr "நீங்கள்: உத்தான்" #: ../source/specifications/platform-compatibility-tags.rst:48 msgid "" "Other Python implementations should use :py:data:`sys.implementation.name " "`." msgstr "" +"பிற பைதான் செயலாக்கங்கள் பயன்படுத்தப்பட வேண்டும்: PY: தரவு: `sys.implementation.name " +"`." #: ../source/specifications/platform-compatibility-tags.rst:50 msgid "" @@ -15968,12 +22250,17 @@ msgid "" "one is needed the underscore ``_`` is used instead. PyPy should probably " "use its own versions here ``pp18``, ``pp19``." msgstr "" +"பதிப்பு `` py_version_nodot``. சிபிதான் எந்த புள்ளியும் இல்லாமல் விலகிச் செல்கிறது, " +"ஆனால் ஒருவருக்கு தேவைப்பட்டால் அடிக்கோடிட்ட `` _`` அதற்கு பதிலாக பயன்படுத்தப்படுகிறது. " +"பைபி தனது சொந்த பதிப்புகளை இங்கே `` பிபி 18``, `` பிபி 19`` பயன்படுத்த வேண்டும்." #: ../source/specifications/platform-compatibility-tags.rst:54 msgid "" "The version can be just the major version ``2`` or ``3`` ``py2``, ``py3`` " "for many pure-Python distributions." msgstr "" +"பல தூய-பைதான் விநியோகங்களுக்கு `` 2` அல்லது `` 3` `` py2``, `` 3` `` py2`` என்ற " +"முக்கிய பதிப்பாக பதிப்பு இருக்க முடியும்." #: ../source/specifications/platform-compatibility-tags.rst:57 msgid "" @@ -15981,16 +22268,21 @@ msgid "" "shorthand for ``py20`` and ``py30``. Instead, these tags mean the packager " "intentionally released a cross-version-compatible distribution." msgstr "" +"முக்கியமாக, `` py2`` மற்றும் `py3` போன்ற முக்கிய-பதிப்பு-மட்டும் குறிச்சொற்கள்` `py20`` " +"மற்றும்` `py30`` ஆகியவற்றுக்கு சுருக்கெழுத்து அல்ல. அதற்கு பதிலாக, இந்த குறிச்சொற்கள் " +"பேக்கேசர் வேண்டுமென்றே குறுக்கு-பதிப்பு-இணக்கமான விநியோகத்தை வெளியிட்டன." #: ../source/specifications/platform-compatibility-tags.rst:61 msgid "" "A single-source Python 2/3 compatible distribution can use the compound tag " "``py2.py3``. See `Compressed Tag Sets`_, below." msgstr "" +"ஒற்றை மூல பைதான் 2/3 இணக்கமான வழங்கல் `` py2.py3`` என்ற கலவை குறிச்சொல்லைப் " +"பயன்படுத்தலாம். கீழே `சுருக்கப்பட்ட குறிச்சொல் தொகுப்புகள்`_ ஐப் பார்க்கவும்." #: ../source/specifications/platform-compatibility-tags.rst:66 msgid "ABI Tag" -msgstr "" +msgstr "அபி நாள்" #: ../source/specifications/platform-compatibility-tags.rst:68 msgid "" @@ -15999,10 +22291,14 @@ msgid "" "abbreviated in the same way as the Python Tag, e.g. ``cp33d`` would be the " "CPython 3.3 ABI with debugging." msgstr "" +"சேர்க்கப்பட்ட எந்தவொரு நீட்டிப்பு தொகுதிகளுக்கும் பைதான் பநிஇ தேவை என்பதை பநிஇ குறிச்சொல் " +"குறிக்கிறது. செயல்படுத்தல்-குறிப்பிட்ட ABI கள், செயல்படுத்தல் பைதான் குறிச்சொல்லைப் போலவே " +"சுருக்கமாக உள்ளது, எ.கா. `` cp33d`` பிழைத்திருத்தத்துடன் சிபிதான் 3.3 பநிஇ இருக்கும்." #: ../source/specifications/platform-compatibility-tags.rst:73 msgid "The CPython stable ABI is ``abi3`` as in the shared library suffix." msgstr "" +"பகிரப்பட்ட நூலக பின்னொட்டைப் போலவே `` abi3`` என்பது cpython stable abi ஆகும்." #: ../source/specifications/platform-compatibility-tags.rst:75 msgid "" @@ -16012,14 +22308,19 @@ msgid "" "distribute binary distributions. Each implementation's community may decide " "how to best use the ABI tag." msgstr "" +"மிகவும் நிலையற்ற பநிஇ கொண்ட செயலாக்கங்கள் அவற்றின் மூலக் குறியீடு திருத்தம் மற்றும் கம்பைலர் " +"கொடிகள் போன்ற SHA-256 ஆசின் முதல் 6 பைட்டுகளை (8 பேச் 64-குறியிடப்பட்ட எழுத்துக்களாக) " +"பயன்படுத்தலாம், ஆனால் பைனரி விநியோகங்களை விநியோகிக்க அதிக தேவை இருக்காது. ஒவ்வொரு " +"செயல்படுத்தலின் சமூகமும் பநிஇ குறிச்சொல்லை எவ்வாறு சிறப்பாகப் பயன்படுத்துவது என்பதை " +"தீர்மானிக்கலாம்." #: ../source/specifications/platform-compatibility-tags.rst:83 msgid "Platform Tag" -msgstr "" +msgstr "இயங்குதள குறிச்சொல்" #: ../source/specifications/platform-compatibility-tags.rst:86 msgid "Basic platform tags" -msgstr "" +msgstr "அடிப்படை இயங்குதள குறிச்சொற்கள்" #: ../source/specifications/platform-compatibility-tags.rst:88 msgid "" @@ -16028,22 +22329,26 @@ msgid "" "underscore ``_``. Until the removal of :ref:`distutils` in Python 3.12, this " "was ``distutils.util.get_platform()``. For example:" msgstr "" +"அதன் எளிமையான வடிவத்தில், இயங்குதள குறிச்சொல்: py: func: `sysconfig.get_platform " +"()` எல்லா ஐபன்களுடனும் `` --`` மற்றும் காலகட்டங்கள் `` `.`` அடிக்கோடிட்ட` `_`` உடன் " +"மாற்றப்பட்டது. அகற்றும் வரை: குறிப்பு: பைதான் 3.12 இல் `தொலைதூரங்கள்`, இது` `" +"distutils.util.get_platform ()` `. உதாரணமாக:" #: ../source/specifications/platform-compatibility-tags.rst:93 msgid "win32" -msgstr "" +msgstr "அது" #: ../source/specifications/platform-compatibility-tags.rst:94 msgid "linux_i386" -msgstr "" +msgstr "லினக்ச்_ஐ 386" #: ../source/specifications/platform-compatibility-tags.rst:95 msgid "linux_x86_64" -msgstr "" +msgstr "லினக்ச்_எக்ச் 86_64" #: ../source/specifications/platform-compatibility-tags.rst:101 msgid "``manylinux``" -msgstr "" +msgstr "`` மேனிலினக்ச்``" #: ../source/specifications/platform-compatibility-tags.rst:103 msgid "" @@ -16051,6 +22356,9 @@ msgid "" "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 "" @@ -16059,36 +22367,47 @@ msgid "" "``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 ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 "" +"`` X86_64`` மற்றும் `i686`` கட்டமைப்புகளில்` `மேனிலினக்ச் 1`` கிளிப் 2.5 ஐ " +"ஆதரிக்கிறது." #: ../source/specifications/platform-compatibility-tags.rst:121 msgid "``manylinux2010`` supports glibc 2.12 on ``x86_64`` and ``i686``." msgstr "" +"`` x86_64`` மற்றும் `` i686`` ஆகியவற்றில் `` மேனிலினக்ச் 2010`` கிளிப் 2.12 ஐ " +"ஆதரிக்கிறது." #: ../source/specifications/platform-compatibility-tags.rst:122 msgid "" "``manylinux2014`` supports glibc 2.17 on ``x86_64``, ``i686``, ``aarch64``, " "``armv7l``, ``ppc64``, ``ppc64le``, and ``s390x``." msgstr "" +"`` X86_64``, `` i686``, `` aarch64``, `` ARMV7l``, `` பிபிசி 64``, `` பிபிசி " +"64le`` `." #: ../source/specifications/platform-compatibility-tags.rst:125 msgid "" @@ -16097,7 +22416,7 @@ msgid "" "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 "" +msgstr "பொதுவாக. 2010 க்கு முன்னர் இருந்த தளங்களில் வேலை செய்யுங்கள்)." #: ../source/specifications/platform-compatibility-tags.rst:131 msgid "" @@ -16106,83 +22425,90 @@ msgid "" "for ``manylinux1`` and ``manylinux2010`` have reached end-of-life meaning " "that these images will no longer receive security updates." msgstr "" +"`` மேனிலினக்ச் 1` மற்றும் `` மேனிலினக்ச் 2010`` ஆகியவற்றிற்கான வழங்கப்பட்ட உருவாக்க சூழலை" +" உருவாக்கிய சூழலை வாழ்நாள் முழுவதும் அடைந்துவிட்டது என்ற எச்சரிக்கையுடன், தொகுப்பு " +"பராமரிப்பாளர்கள் மிகவும் இணக்கமான விவரக்குறிப்பை குறிவைக்க முயற்சிக்க வேண்டும், அதாவது இந்" +"த படங்கள் இனி பாதுகாப்பு புதுப்பிப்புகளைப் பெறாது." #: ../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 "" +msgstr "கருவி" #: ../source/specifications/platform-compatibility-tags.rst:140 msgid "``manylinux1``" -msgstr "" +msgstr "`` Mantinux1``" #: ../source/specifications/platform-compatibility-tags.rst:140 msgid "``manylinux2010``" -msgstr "" +msgstr "`` Mantinux2010 `" #: ../source/specifications/platform-compatibility-tags.rst:140 msgid "``manylinux2014``" -msgstr "" +msgstr "`` மேனிலினக்ச் 2014``" #: ../source/specifications/platform-compatibility-tags.rst:140 msgid "``manylinux_x_y``" -msgstr "" +msgstr "`` manylinux_x_y``" #: ../source/specifications/platform-compatibility-tags.rst:142 msgid "``>=8.1.0``" -msgstr "" +msgstr "``> = 8.1.0``" #: ../source/specifications/platform-compatibility-tags.rst:142 msgid "``>=19.0``" -msgstr "" +msgstr "``> = 19.0``" #: ../source/specifications/platform-compatibility-tags.rst:142 msgid "``>=19.3``" -msgstr "" +msgstr "``> = 19.3``" #: ../source/specifications/platform-compatibility-tags.rst:142 msgid "``>=20.3``" -msgstr "" +msgstr "``> = 20.3``" #: ../source/specifications/platform-compatibility-tags.rst:143 msgid "auditwheel" -msgstr "" +msgstr "தணிக்கை" #: ../source/specifications/platform-compatibility-tags.rst:143 msgid "``>=1.0.0``" -msgstr "" +msgstr "``> = 1.0.0``" #: ../source/specifications/platform-compatibility-tags.rst:143 msgid "``>=2.0.0``" -msgstr "" +msgstr "``> = 2.0.0``" #: ../source/specifications/platform-compatibility-tags.rst:143 msgid "``>=3.0.0``" -msgstr "" +msgstr "``> = 3.0.0``" #: ../source/specifications/platform-compatibility-tags.rst:143 msgid "``>=3.3.0`` [#]_" -msgstr "" +msgstr "``> = 3.3.0`` [#] _" #: ../source/specifications/platform-compatibility-tags.rst:146 msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" msgstr "" +"`` மேனிலினக்ச்_2_24`` க்கான உதவி மட்டுமே தணிக்கைக்கு 3.3.0 இல் சேர்க்கப்பட்டுள்ளது" #: ../source/specifications/platform-compatibility-tags.rst:150 msgid "``musllinux``" -msgstr "" +msgstr "`` musllinux``" #: ../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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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 @@ -16191,6 +22517,8 @@ msgid "" "library the Python interpreter is currently running on, and parsing the " "output:" msgstr "" +"MSL பதிப்பு மதிப்புகளைப் பெறலாம் MSL LIBC பகிரப்பட்ட நூலகத்தை இயக்குவதன் மூலம் பைதான் " +"மொழிபெயர்ப்பாளர் தற்போது இயங்குகிறார், மேலும் வெளியீட்டை பாகுபடுத்துகிறார்:" #: ../source/specifications/platform-compatibility-tags.rst:188 msgid "" @@ -16199,20 +22527,229 @@ msgid "" "command, or by parsing the ``PT_INTERP`` section’s value from the " "executable’s ELF_ header." msgstr "" +"ஒரு பைதான் மொழிபெயர்ப்பாளர் இயங்கும் MSL நூலகத்தின் இருப்பிடத்தைக் கண்டுபிடிக்க தற்போது " +"இரண்டு வழிகள் உள்ளன, இது கணினி LDD_ கட்டளையுடன் அல்லது இயங்கக்கூடிய ELF_ " +"தலைப்பிலிருந்து `` PT_INTERP`` பிரிவின் மதிப்பை பாகுபடுத்துவதன் மூலம்." -#: ../source/specifications/platform-compatibility-tags.rst:194 -msgid "Use" +#: ../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:196 +#: ../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:202 +#: ../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 " @@ -16222,15 +22759,25 @@ msgid "" "tags; for example, a user might accept only the ``*-none-any`` tags to only " "download built packages that advertise themselves as being pure Python." msgstr "" +"பழைய பைதான் வெளியீடுகளுக்காக வெளியிடப்பட்ட தூய பைதான் பதிப்புகளுக்குத் திரும்புவதற்கு " +"முன், இயல்புநிலையாக கிடைக்கக்கூடிய மிக அம்சமான கட்டமைக்கப்பட்ட விநியோகத்தை (நிறுவல் " +"சூழலுக்கு மிகவும் குறிப்பிட்டது) தேர்வு செய்ய நிறுவல்கள் பரிந்துரைக்கப்படுகின்றன. " +"அனுமதிக்கப்பட்ட பொருந்தக்கூடிய குறிச்சொற்களின் பட்டியலை உள்ளமைக்கவும் மீண்டும் ஆர்டர் செய்யவும் " +"ஒரு வழியை வழங்க நிறுவிகள் பரிந்துரைக்கப்படுகின்றன; எடுத்துக்காட்டாக, ஒரு பயனர் தங்களை தூ" +"ய பைத்தான் என்று விளம்பரப்படுத்தும் கட்டப்பட்ட தொகுப்புகளை மட்டுமே பதிவிறக்குவதற்கு " +"``*-ஒரு-எந்த` குறிச்சொற்களை மட்டுமே ஏற்றுக்கொள்ளலாம்." -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16238,70 +22785,76 @@ msgid "" "least-preferred (a pure-Python distribution built with an older version of " "Python):" msgstr "" +"இந்த எடுத்துக்காட்டு பட்டியல் லினக்ச்_எக்ச் 86_64 கணினியில் CPyThon 3.3 இன் கீழ் இயங்கும் " +"நிறுவிக்கு. இது பெரும்பாலான விருப்பமான (ஒரு தொகுக்கப்பட்ட நீட்டிப்பு தொகுதியுடன் ஒரு " +"வழங்கல், பைத்தானின் தற்போதைய பதிப்பிற்காக கட்டப்பட்டுள்ளது) குறைந்தது-விருப்பமான (பைத்தானின்" +" பழைய பதிப்பைக் கொண்டு கட்டப்பட்ட தூய-பைதான் விநியோகம்):" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" -msgstr "" +msgstr "CP33-CP33M-LINUX_X86_64" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" -msgstr "" +msgstr "CP33-ABI3-LINUX_X86_64" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" -msgstr "" +msgstr "CP3-ABI3-LINUX_X86_64" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" -msgstr "" +msgstr "cp33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" -msgstr "" +msgstr "cp3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" -msgstr "" +msgstr "py33-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" -msgstr "" +msgstr "py3-none-linux_x86_64*" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" -msgstr "" +msgstr "CP33-NONE-ANY" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" -msgstr "" +msgstr "CP3-none-any-any" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" -msgstr "" +msgstr "py33-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" -msgstr "" +msgstr "py3-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" -msgstr "" +msgstr "py32-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" -msgstr "" +msgstr "py31-none-any" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" -msgstr "" +msgstr "py30-none-any- any" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16311,12 +22864,19 @@ msgid "" "package with the C extension is installed in preference to the package " "without because that tag appears first in the list." msgstr "" +"சில நேரங்களில் ஒரு தொகுப்பின் ஒரு குறிப்பிட்ட பதிப்பிற்கு ஒன்றுக்கு மேற்பட்ட உதவி கட்டப்பட்" +"ட வழங்கல் இருக்கும். எடுத்துக்காட்டாக, ஒரு பேக்கேசர் ஒரு விருப்பமான சி நீட்டிப்பு மற்றும் " +"அதே வழங்கல் குறிக்கப்பட்ட `` py3-none-any`` ஆகியவற்றைக் கொண்ட `` " +"CP33-ABI3-LINUX_X86_64`` குறிக்கப்பட்ட ஒரு தொகுப்பை வெளியிட முடியும். ஆதரிக்கப்பட்ட " +"குறிச்சொற்கள் பட்டியலில் உள்ள குறிச்சொல்லின் குறியீடு டை உடைக்கிறது, மேலும் சி நீட்டிப்புடன் " +"கூடிய தொகுப்பு இல்லாமல் தொகுப்புக்கு முன்னுரிமை அளிக்கப்பட்டுள்ளது, ஏனெனில் அந்த குறிச்சொல்" +" முதலில் பட்டியலில் தோன்றும்." -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" -msgstr "" +msgstr "சுருக்கப்பட்ட குறிச்சொல் தொகுப்புகள்" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16325,34 +22885,50 @@ msgid "" "distribute a bdist with the tag ``py2.py3-none-any``. The full list of " "simple tags is::" msgstr "" +"ஒன்றுக்கு மேற்பட்ட பொருந்தக்கூடிய குறிச்சொல்லுடன் பணிபுரியும் BDISTS இன் சிறிய கோப்பு " +"பெயர்களை அனுமதிக்க, ஒரு கோப்பு பெயரில் உள்ள ஒவ்வொரு குறிச்சொல்லும் அதற்கு பதிலாக '.'- " +"பிரிக்கப்பட்ட, வரிசைப்படுத்தப்பட்ட, குறிச்சொற்களின் தொகுப்பாக இருக்கலாம். எடுத்துக்காட்டாக, " +"ஒரே மூலக் குறியீட்டைக் கொண்டு பைதான் 2 மற்றும் 3 இன் கீழ் இயக்க எழுதப்பட்ட ஒரு தூய-பைதான் " +"தொகுப்பு, `` py2.py3-none-any`` என்ற குறிச்சொல்லுடன் ஒரு BDIST ஐ விநியோகிக்க " +"முடியும். எளிய குறிச்சொற்களின் முழு பட்டியல் ::" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 "" +"இந்த திட்டத்தை செயல்படுத்தும் ஒரு BDIST வடிவத்தில் BDIST- குறிப்பிட்ட மெட்டாடேட்டாவில் " +"விரிவாக்கப்பட்ட குறிச்சொற்கள் இருக்க வேண்டும். இந்த சுருக்கத் திட்டம் அதிக எண்ணிக்கையிலான " +"ஆதரிக்கப்படாத குறிச்சொற்கள் மற்றும் பைதான் செயல்படுத்தல் இல்லாத \"சாத்தியமற்ற\" குறிச்சொற்களை" +" உருவாக்க முடியும் எ.கா. \"CP33-CP31U-WIN64\", எனவே அதை குறைவாகப் பயன்படுத்துங்கள்." -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" -msgstr "" +msgstr "முன்னிருப்பாக என்ன குறிச்சொற்கள் பயன்படுத்தப்படுகின்றன?" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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 "" +"கருவிகள் மிகவும் விரும்பிய கட்டமைப்பு சார்ந்த குறிச்சொல்லைப் பயன்படுத்த வேண்டும் எ.கா. `` " +"CP33-CP33M-WIN32`` அல்லது மிகவும் விரும்பப்படும் தூய பைதான் குறிச்சொல் எ.கா. `` py33" +"-none-any-wone`` இயல்பாக. பேக்கேசர் இயல்புநிலையை மீறினால், அவை குறுக்கு-பைத்தான் " +"பொருந்தக்கூடிய தன்மையை வழங்க விரும்பியதைக் குறிக்கிறது." -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16362,36 +22938,50 @@ msgid "" "as a requirement for the older release ``beaglevote-1.1.0`` that does not " "use the new feature, to get a compatible build." msgstr "" +"பொருந்தக்கூடிய குறிச்சொற்கள் ஒரு விநியோகத்தின் * ஒற்றை பதிப்பின் * மிகவும் இணக்கமான * " +"கட்டமைப்பைத் தேர்ந்தெடுப்பதில் நிறுவிகளுக்கு உதவுகின்றன. எடுத்துக்காட்டாக, பைதான் 3.3 " +"இல்லாதபோது `` பீக்லெவோட் -1.2.0`` (இது ஒரு பைதான் 3.4 பிரத்தியேக அம்சத்தைப் " +"பயன்படுத்துகிறது) இது `` py3-none-any- `` குறிச்சொல்லைப் பயன்படுத்தலாம் py34-none-" +"any` குறிச்சொல். ஒரு பைதான் 3.3 பயனர் பழைய வெளியீட்டுக்கான தேவை போன்ற பிற தகுதிகளை " +"இணைக்க வேண்டும் `` பீகிள்வோட் -1.1.0`` இது புதிய அம்சத்தைப் பயன்படுத்தாதது, இணக்கமான " +"கட்டமைப்பைப் பெற." -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../source/specifications/platform-compatibility-tags.rst:392 msgid "Why isn't there a ``.`` in the Python version number?" -msgstr "" +msgstr "பைதான் பதிப்பு எண்ணில் ஏன் `` .`` இல்லை?" -#: ../source/specifications/platform-compatibility-tags.rst:288 +#: ../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 "" +"3 இலக்க பெரிய வெளியீடு இல்லாமல் CPyThon 20+ ஆண்டுகள் நீடித்தது. இது சிறிது நேரம் தொடர " +"வேண்டும். மற்ற செயலாக்கங்கள் _ இரண்டையும் ஒரு டிலிமிட்டராகப் பயன்படுத்தலாம் - மற்றும். " +"சுற்றியுள்ள கோப்பு பெயரை வரையறுக்கவும்." -#: ../source/specifications/platform-compatibility-tags.rst:296 +#: ../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:293 +#: ../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:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" -msgstr "" +msgstr "`` .` அல்லது `` -`` ஐ விட சிறப்பு எழுத்தை ஏன் பயன்படுத்தக்கூடாது?" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16400,48 +22990,65 @@ msgid "" "implementation for the wheel format defined in :pep:`427` (for example, " "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" +"அந்த தன்மை சில சூழல்களில் சிரமமாக அல்லது குழப்பமானதாக இருப்பதால் (எடுத்துக்காட்டாக, " +"``+`` முகவரி களில் மேற்கோள் காட்டப்பட வேண்டும், `` `` பயனரின் வீட்டு கோப்பகத்தை POSIX இல் " +"குறிக்கப் பயன்படுகிறது), அல்லது 4 டாலர், PERATER க்குள் மாற்றுவதற்கு போதுமானதாக இல்லை " +"என்பதால், `` `பயன்படுத்தப்படுகிறது. சுருக்கப்பட்ட குறிச்சொல்லில் கூறுகளை பிரிக்க `` `.` " +"ஐ விட` `)." -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" -msgstr "" +msgstr "சுருக்கமான செயலாக்கங்களின் பதிவேட்டை யார் பராமரிப்பார்கள்?" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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 "" +"பைதான்-டெவ் அஞ்சல் பட்டியலில் புதிய இரண்டு-எழுத்து சுருக்கங்களை கோரலாம். கட்டைவிரல் விதியா" +"க, தற்போதைய 4 மிக முக்கியமான செயலாக்கங்களுக்கு சுருக்கங்கள் ஒதுக்கப்பட்டுள்ளன." -#: ../source/specifications/platform-compatibility-tags.rst:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" -msgstr "" +msgstr "எனக்கு பிடித்த பைதான் செயல்படுத்தலை ஏன் குறிப்பிடவில்லை?" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 "" +"சுருக்கமான குறிச்சொற்கள் ஒரு பொது குறியீட்டில் தொகுக்கப்பட்ட பைதான் குறியீட்டைப் பகிர்வதற்கு " +"உதவுகின்றன. உங்கள் பைதான் செயல்படுத்தல் இந்த விவரக்குறிப்பையும் பயன்படுத்தலாம், ஆனால் நீண்ட " +"குறிச்சொற்களுடன். அனைத்து \"தூய பைதான்\" கட்டப்பட்ட விநியோகங்களும் `` py`` ஐப் " +"பயன்படுத்துகின்றன என்பதை நினைவில் கொள்க." -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16449,38 +23056,58 @@ msgid "" "analogous to newer versions of Python, but in the meantime \"none\" is a " "good enough way to say \"don't know\"." msgstr "" +"பைதான் 2 க்கு சோபிக்குச் செல்ல எளிதான வழி இல்லை என்பதால் (இந்த கருத்து பைத்தானின் புதிய " +"பதிப்புகளிலிருந்து வருகிறது 3) \"எதுவுமில்லை\" என்ற யூகங்களை எழுதும் நேரத்தில் " +"குறிப்பு செயல்படுத்தல். வெறுமனே இது பைத்தானின் புதிய பதிப்புகளுக்கு ஒத்த " +"\"PY27 (D | M | U)\" ஐக் கண்டறியும், ஆனால் இதற்கிடையில் \"எதுவுமில்லை\" என்பது " +"\"தெரியாது\" என்று சொல்வதற்கு போதுமான வழி." -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../source/specifications/platform-compatibility-tags.rst:436 msgid "" "February 2013: The original version of this specification was approved " "through :pep:`425`." msgstr "" +"பிப்ரவரி 2013: இந்த விவரக்குறிப்பின் அசல் பதிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `425`." -#: ../source/specifications/platform-compatibility-tags.rst:336 +#: ../source/specifications/platform-compatibility-tags.rst:438 msgid "January 2016: The ``manylinux1`` tag was approved through :pep:`513`." msgstr "" +"சனவரி 2016: `` மேனிலினக்ச் 1`` குறிச்சொல் மூலம் அங்கீகரிக்கப்பட்டது: PEP: `513`." -#: ../source/specifications/platform-compatibility-tags.rst:337 +#: ../source/specifications/platform-compatibility-tags.rst:439 msgid "April 2018: The ``manylinux2010`` tag was approved through :pep:`571`." msgstr "" +"ஏப்ரல் 2018: `` மேனிலினக்ச் 2010`` குறிச்சொல் மூலம் அங்கீகரிக்கப்பட்டது: PEP: `571`." -#: ../source/specifications/platform-compatibility-tags.rst:338 +#: ../source/specifications/platform-compatibility-tags.rst:440 msgid "July 2019: The ``manylinux2014`` tag was approved through :pep:`599`." msgstr "" +"சூலை 2019: `` மேனிலினக்ச் 2014`` குறிச்சொல் மூலம் அங்கீகரிக்கப்பட்டது: PEP: `599`." -#: ../source/specifications/platform-compatibility-tags.rst:339 +#: ../source/specifications/platform-compatibility-tags.rst:441 msgid "" "November 2019: The ``manylinux_x_y`` perennial tag was approved through :pep:" "`600`." msgstr "" +"நவம்பர் 2019: `` Manylinux_x_y`` வற்றாத குறிச்சொல் மூலம் அங்கீகரிக்கப்பட்டது: PEP: " +"`600`." -#: ../source/specifications/platform-compatibility-tags.rst:341 +#: ../source/specifications/platform-compatibility-tags.rst:443 msgid "April 2021: The ``musllinux_x_y`` tag was approved through :pep:`656`." msgstr "" +"ஏப்ரல் 2021: `` musllinux_x_y`` குறிச்சொல் மூலம் அங்கீகரிக்கப்பட்டது: PEP: `656`." + +#: ../source/specifications/platform-compatibility-tags.rst: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/pypirc.rst:6 msgid "The :file:`.pypirc` file" -msgstr "" +msgstr "தி: கோப்பு: `.pypirc` கோப்பு" #: ../source/specifications/pypirc.rst:8 msgid "" @@ -16489,32 +23116,40 @@ msgid "" "that you don't have to enter the URL, username, or password whenever you " "upload a package with :ref:`twine` or :ref:`flit`." msgstr "" +"ப: கோப்பு: `.pypirc` கோப்பு இதற்கான உள்ளமைவை வரையறுக்க உங்களை அனுமதிக்கிறது: கால:` " +"தொகுப்பு குறியீடுகள் <தொகுப்பு குறியீட்டு> `(இங்கே\" களஞ்சியங்கள் \"என்று " +"குறிப்பிடப்படுகிறது), இதனால் நீங்கள் முகவரி, பயனர்பெயரை உள்ளிட வேண்டியதில்லை , அல்லது " +"கடவுச்சொல் நீங்கள் ஒரு தொகுப்பைப் பதிவேற்றும்போதெல்லாம்: குறிப்பு: `ட்வைன்` அல்லது: " +"குறிப்பு:` ஃபிளிட்`." #: ../source/specifications/pypirc.rst:13 msgid "The format (originally defined by the :ref:`distutils` package) is:" -msgstr "" +msgstr "வடிவம் (முதலில் வரையறுக்கப்படுகிறது: ref: `தொலைதூரங்கள்` தொகுப்பு):" #: ../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 "" +msgstr "`` களஞ்சியம்``: களஞ்சியத்தின் முகவரி." #: ../source/specifications/pypirc.rst:38 msgid "``username``: The registered username on the repository." -msgstr "" +msgstr "`` பயனர்பெயர்``: களஞ்சியத்தில் பதிவுசெய்யப்பட்ட பயனர்பெயர்." #: ../source/specifications/pypirc.rst:39 msgid "``password``: The password that will used to authenticate the username." -msgstr "" +msgstr "`` கடவுச்சொல்``: பயனர்பெயரை அங்கீகரிக்க பயன்படுத்தப்படும் கடவுச்சொல்." #: ../source/specifications/pypirc.rst:43 msgid "" @@ -16522,16 +23157,21 @@ msgid "" "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 "" +"இல்லையெனில், அனுமதிகளை அமைக்கவும்: கோப்பு: `.pypirc`, இதனால் நீங்கள் மட்டுமே அதைப் பார்க்" +"க அல்லது மாற்ற முடியும். எடுத்துக்காட்டாக, லினக்ச் அல்லது மேகோசில், இயக்கவும்:" #: ../source/specifications/pypirc.rst:57 msgid "Common configurations" -msgstr "" +msgstr "பொதுவான உள்ளமைவுகள்" #: ../source/specifications/pypirc.rst:61 msgid "" @@ -16539,38 +23179,50 @@ msgid "" "use :file:`.pypirc`, but with different defaults. Please refer to each " "project's documentation for more details and usage instructions." msgstr "" +"இந்த எடுத்துக்காட்டுகள் இதற்குப் பொருந்தும்: ref: `ட்வைன்`. பிற திட்டங்கள் (எ.கா.: ref: " +"`Flit`) மேலும் பயன்படுத்தவும்: கோப்பு:` .pypirc`, ஆனால் வெவ்வேறு இயல்புநிலைகளுடன். " +"மேலும் விவரங்கள் மற்றும் பயன்பாட்டு வழிமுறைகளுக்கு ஒவ்வொரு திட்டத்தின் ஆவணங்களையும் " +"பார்க்கவும்." #: ../source/specifications/pypirc.rst:65 msgid "" "Twine's default configuration mimics a :file:`.pypirc` with repository " "sections for PyPI and TestPyPI:" msgstr "" +"கயிறின் இயல்புநிலை உள்ளமைவு மிமிக்ச் a: கோப்பு: `.pypirc` பைபி மற்றும் டெச்ட்பிஐ " +"ஆகியவற்றிற்கான களஞ்சிய பிரிவுகளுடன்:" #: ../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 "" +"கயிறு கூடுதல் உள்ளமைவைச் சேர்க்கும்: கோப்பு: `$ home/.pypirc`, கட்டளை வரி மற்றும் " +"சுற்றுச்சூழல் மாறிகள் இந்த இயல்புநிலை உள்ளமைவுக்கு." #: ../source/specifications/pypirc.rst:85 msgid "Using a PyPI token" -msgstr "" +msgstr "பைபி கிள்ளாக்கைப் பயன்படுத்துதல்" #: ../source/specifications/pypirc.rst:87 msgid "" "To set your `API token`_ for PyPI, you can create a :file:`$HOME/.pypirc` " "similar to:" msgstr "" +"PYPI க்கு உங்கள் `API டோக்கன்`_ ஐ அமைக்க, நீங்கள் ஒரு: கோப்பு:` $ home/.pypirc` " +"போன்றவற்றை உருவாக்கலாம்:" #: ../source/specifications/pypirc.rst:96 msgid "" "For :ref:`TestPyPI `, add a ``[testpypi]`` section, using " "the API token from your TestPyPI account." msgstr "" +"For: ref: `TestPypi `, `` [TestPypi] `` பகுதியைச் சேர்க்கவும், " +"உங்கள் டெச்ட்பை கணக்கிலிருந்து பநிஇ கிள்ளாக்கைப் பயன்படுத்தி." #: ../source/specifications/pypirc.rst:102 msgid "Using another package index" -msgstr "" +msgstr "மற்றொரு தொகுப்பு குறியீட்டைப் பயன்படுத்துதல்" #: ../source/specifications/pypirc.rst:104 msgid "" @@ -16578,32 +23230,43 @@ msgid "" "servers`` field to include the repository name. Here is a complete example " "of a :file:`$HOME/.pypirc` for PyPI, TestPyPI, and a private repository:" msgstr "" +"கூடுதல் களஞ்சியத்தை உள்ளமைக்க, களஞ்சிய பெயரைச் சேர்க்க `` குறியீட்டு-சேவையகங்கள்` துறையை " +"மறுவரையறை செய்ய வேண்டும். ஒரு முழுமையான எடுத்துக்காட்டு இங்கே: கோப்பு: `$ home/" +".pypirc` pypi, testpypi மற்றும் ஒரு தனியார் களஞ்சியத்திற்கு:" #: ../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 "" +msgstr "`` pyproject.toml`` விவரக்குறிப்பு" #: ../source/specifications/pyproject-toml.rst:10 msgid "" "This is a **technical, formal specification**. For a gentle, user-friendly " "guide to ``pyproject.toml``, see :ref:`writing-pyproject-toml`." msgstr "" +"இது ஒரு ** தொழில்நுட்ப, முறையான விவரக்குறிப்பு **. `` Pyproject.toml`` க்கு " +"மென்மையான, பயனர் நட்பு வழிகாட்டிக்கு, காண்க: குறிப்பு: `எழுதுதல்-பிப்ரோசெக்ட்-டோம்`." #: ../source/specifications/pyproject-toml.rst:14 msgid "" "The ``pyproject.toml`` file acts as a configuration file for packaging-" "related tools (as well as other tools)." msgstr "" +"`` Pyproject.toml`` கோப்பு பேக்கேசிங் தொடர்பான கருவிகளுக்கான (அத்துடன் பிற " +"கருவிகளுக்கான) உள்ளமைவு கோப்பாக செயல்படுகிறது." #: ../source/specifications/pyproject-toml.rst:17 msgid "This specification was originally defined in :pep:`518` and :pep:`621`." msgstr "" +"இந்த விவரக்குறிப்பு முதலில் வரையறுக்கப்பட்டது: PEP: `518` மற்றும்: PEP:` 621`." #: ../source/specifications/pyproject-toml.rst:19 msgid "" @@ -16613,16 +23276,23 @@ msgid "" "`. Other tables are reserved for future use (tool-" "specific configuration should use the ``[tool]`` table)." msgstr "" +"`` Pyproject.toml`` கோப்பு `டாம்ல் _ _ இல் எழுதப்பட்டுள்ளது. மூன்று" +" அட்டவணைகள் தற்போது குறிப்பிடப்பட்டுள்ளன, அதாவது: குறிப்பு: `[பில்ட்-சிச்டம்] `,: ref: `[திட்டம்] ` மற்றும்: ref:" +" `[கருவி] `. பிற அட்டவணைகள் எதிர்கால பயன்பாட்டிற்காக " +"ஒதுக்கப்பட்டுள்ளன (கருவி-குறிப்பிட்ட உள்ளமைவு `` [கருவி] `` அட்டவணை) பயன்படுத்த வேண்டும்." #: ../source/specifications/pyproject-toml.rst:29 msgid "Declaring build system dependencies: the ``[build-system]`` table" -msgstr "" +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 "" @@ -16632,18 +23302,27 @@ msgid "" "dependencies required to execute the build system. The strings in this list " "follow the :ref:`version specifier specification `." msgstr "" +"உருவாக்கம் தொடர்பான தரவைச் சேமிக்க `` [பில்ட்-சிச்டம்] `` அட்டவணை பயன்படுத்தப்படுகிறது. " +"ஆரம்பத்தில், அட்டவணையின் ஒரு விசை மட்டுமே செல்லுபடியாகும் மற்றும் அட்டவணைக்கு கட்டாயமாகும்:" +" `` தேவை``. இந்த விசையானது உருவாக்க அமைப்பை இயக்கத் தேவையான சார்புகளைக் குறிக்கும் " +"சரங்களின் பட்டியலின் மதிப்பைக் கொண்டிருக்க வேண்டும். இந்த பட்டியலில் உள்ள சரங்கள் பின்வருமாறு:" +" ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-விவரக்குறிப்புகள்>`." #: ../source/specifications/pyproject-toml.rst:44 msgid "" "An example ``[build-system]`` table for a project built with ``setuptools`` " "is:" msgstr "" +"ஒரு எடுத்துக்காட்டு `` [பில்ட்-சிச்டம்] `` `` setuptools`` உடன் கட்டப்பட்ட ஒரு " +"திட்டத்திற்கான அட்டவணை:" #: ../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 "" +"`` Pyproject.toml`` கோப்பு இல்லாதபோது, மேலே உள்ள எடுத்துக்காட்டு உள்ளமைவு கோப்பை " +"அவற்றின் இயல்புநிலை சொற்பொருளாகப் பயன்படுத்தும் என்று எதிர்பார்க்கப்படுகிறது." #: ../source/specifications/pyproject-toml.rst:56 msgid "" @@ -16655,6 +23334,12 @@ msgid "" "specified but is missing required fields then the tool should consider it an " "error." msgstr "" +"கருவிகளுக்கு `` [பில்ட்-சிச்டம்] `` அட்டவணையின் இருப்பு தேவையில்லை. உருவாக்கம் தொடர்பான " +"தரவைத் தவிர வேறு உள்ளமைவு விவரங்களைச் சேமிக்க ஒரு `` pyproject.toml`` கோப்பு " +"பயன்படுத்தப்படலாம், இதனால் `` [உருவாக்க-அமைப்பு] `` சட்டபூர்வமாக அட்டவணை இல்லை. கோப்பு " +"உள்ளது, ஆனால் `` [பில்ட்-சிச்டம்] `` அட்டவணை இல்லாதிருந்தால், மேலே குறிப்பிடப்பட்டுள்ள " +"இயல்புநிலை மதிப்புகள் பயன்படுத்தப்பட வேண்டும். அட்டவணை குறிப்பிடப்பட்டாலும், தேவையான " +"புலங்களைக் காணவில்லை என்றால், கருவி அதை பிழையாகக் கருத வேண்டும்." #: ../source/specifications/pyproject-toml.rst:65 msgid "" @@ -16662,16 +23347,21 @@ msgid "" "TOML file for illustrative purposes only, the following `JSON Schema " "`_ would match the data format:" msgstr "" +"விளக்கமான நோக்கங்களுக்காக மட்டுமே டாம்ல் கோப்பிலிருந்து இதன் விளைவாக வரும் தரவின் " +"வகை-குறிப்பிட்ட பிரதிநிதித்துவத்தை வழங்க, பின்வரும் `json Schema ` _ தரவு வடிவத்துடன் பொருந்தும்:" #: ../source/specifications/pyproject-toml.rst:103 msgid "Declaring project metadata: the ``[project]`` table" -msgstr "" +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 "" @@ -16682,129 +23372,159 @@ msgid "" "listed via the ``dynamic`` key (defined later in this specification) and " "represents metadata that a tool will later provide." msgstr "" +"இரண்டு வகையான மேனிலை தரவு உள்ளன: *நிலையான *மற்றும் *டைனமிக் *. நிலையான மேனிலை தரவு" +" `` pyproject.toml`` கோப்பில் நேரடியாக குறிப்பிடப்பட்டுள்ளது, மேலும் இது ஒரு " +"கருவியால் குறிப்பிடப்படவோ அல்லது மாற்றவோ முடியாது (இதில் மெட்டாடேட்டாவால் குறிப்பிடப்பட்" +"ட தரவு * அடங்கும், எ.கா. மெட்டாடேட்டாவால் குறிப்பிடப்பட்ட கோப்புகளின் உள்ளடக்கங்கள்). மாறும்" +" மேனிலை தரவு `` டைனமிக்`` விசை வழியாக பட்டியலிடப்பட்டுள்ளது (இந்த விவரக்குறிப்பில் " +"பின்னர் வரையறுக்கப்படுகிறது) மற்றும் ஒரு கருவி பின்னர் வழங்கும் மெட்டாடேட்டாவைக் " +"குறிக்கிறது." #: ../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 "" +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 "" +msgstr "`` [திட்ட] `` அட்டவணையில் அனுமதிக்கப்பட்ட விசைகளின் முழுமையான பட்டியல்:" #: ../source/specifications/pyproject-toml.rst:132 msgid "``authors``" -msgstr "" +msgstr "`` ஆசிரியர்கள்``" #: ../source/specifications/pyproject-toml.rst:134 msgid "``dependencies``" -msgstr "" +msgstr "`` சார்புகள்``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" -msgstr "" +msgstr "`` டைனமிக்``" #: ../source/specifications/pyproject-toml.rst:137 msgid "``entry-points``" -msgstr "" +msgstr "`` நுழைவு புள்ளிகள்``" #: ../source/specifications/pyproject-toml.rst:138 msgid "``gui-scripts``" -msgstr "" +msgstr "`` குய்-ச்கிரிப்ட்ச்``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" -msgstr "" +msgstr "`` பராமரிப்பாளர்கள்``" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" -msgstr "" +msgstr "`` விருப்ப-சார்புநிலைகள்``" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" -msgstr "" +msgstr "TOML_ வகை: சரம்" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" +"தொடர்புடைய: குறிப்பு: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `பெயர்" +" <கோர்-மெட்டாடேட்டா-பெயர்>`" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." -msgstr "" +msgstr "திட்டத்தின் பெயர்." -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" +"கருவிகள் செய்ய வேண்டும்: குறிப்பு: `இயல்பான <பெயர்-இயல்பாக்கம்>` இந்த பெயர் உள் " +"நிலைத்தன்மைக்கு படித்தவுடன்." -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" +"தொடர்புடைய: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `பதிப்பு " +"<கோர்-மெட்டாடேட்டா-பதிப்பு>`" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" +"திட்டத்தின் பதிப்பு, இல் வரையறுக்கப்பட்டுள்ளது: ref: `பதிப்பு விவரக்குறிப்பு விவரக்குறிப்பு" +" <பதிப்பு-விவரக்குறிப்புகள்>`." -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" +"ஏற்கனவே இயல்பாக்கப்பட்ட பதிப்புகளைக் குறிப்பிட பயனர்கள் விரும்ப வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" +"தொடர்புடையது: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: " +"`சுருக்கம் <கோர்-மெட்டாடேட்டா-சுருக்கம்>`" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" +"திட்டத்தின் சுருக்க விளக்கம் ஒரு வரியில். இதில் பல வரிகள் இருந்தால் கருவிகள் பிழையாக " +"இருக்கலாம்." -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" -msgstr "" +msgstr "TOML_ வகை: சரம் அல்லது அட்டவணை" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" +"தொடர்புடைய: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `விளக்கம் " +"<கோர்-மெட்டாடேட்டா-விளக்கப்படம்>` மற்றும்: குறிப்பு: `விளக்கம்-கண்டி-வகை " +"<கோர்-மெட்டாடேட்டா-விளக்கமளிப்பு-வகை>`" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." -msgstr "" +msgstr "திட்டத்தின் முழு விளக்கம் (அதாவது README)." -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16817,8 +23537,17 @@ msgid "" "For all unrecognized suffixes when a content-type is not provided, tools " "MUST raise an error." msgstr "" +"விசை ஒரு சரம் அல்லது அட்டவணையை ஏற்றுக்கொள்கிறது. இது ஒரு சரம் என்றால், அது முழு " +"விளக்கத்தைக் கொண்ட உரை கோப்புடன் `` pyproject.toml`` உடன் தொடர்புடைய பாதையாகும். " +"கோப்புகளின் குறியாக்கம் UTF-8 என்று கருவிகள் கருத வேண்டும். கோப்பு பாதை ஒரு " +"வழக்கு-உணர்திறன் `.md`` பின்னொட்டில் முடிவடைந்தால், கருவிகள் உள்ளடக்க வகை` `உரை/மார்க் " +"டவுன்`` என்று கருத வேண்டும். கோப்பு பாதை ஒரு வழக்கு-உணர்வற்ற `` .rst`` இல் முடிவடைந்தால்" +", கருவிகள் உள்ளடக்க வகை `` உரை/x-rst`` என்று கருத வேண்டும். இந்த PEP ஐ விட ஒரு கருவி" +" அதிக நீட்டிப்புகளை அங்கீகரித்தால், இந்த விசையை `` டைனமிக்`` என்று குறிப்பிடாமல் பயனருக்கா" +"ன உள்ளடக்க வகையை அவை ஊகிக்கக்கூடும். அடையாளம் காணப்படாத அனைத்து பின்னொட்டுகளுக்கும் உள்ளடக்" +"க வகை வழங்கப்படாதபோது, கருவிகள் பிழையை உயர்த்த வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16826,8 +23555,13 @@ msgid "" "is the full description. These keys are mutually-exclusive, thus tools MUST " "raise an error if the metadata specifies both keys." msgstr "" +"`` ReadMe`` விசையும் ஒரு அட்டவணையை எடுக்கலாம். `` கோப்பு`` விசையானது முழு " +"விளக்கத்தைக் கொண்ட ஒரு கோப்பிற்கு `` pyproject.toml`` உடன் தொடர்புடைய பாதையை குறிக்கும்" +" சரம் மதிப்பைக் கொண்டுள்ளது. `` உரை`` விசையில் ஒரு சரம் மதிப்பு உள்ளது, இது முழு " +"விளக்கமாகும். இந்த விசைகள் இருவழி பிரத்தியேகமானவை, இதனால் மேனிலை தரவு இரண்டு " +"விசைகளையும் குறிப்பிடினால் கருவிகள் பிழையை எழுப்ப வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16838,63 +23572,226 @@ msgid "" "content-type as supported by the :ref:`core metadata `. " "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" +"`` ReadMe`` விசையில் குறிப்பிடப்பட்டுள்ள அட்டவணையில் `` உள்ளடக்க-வகை`` விசையும் உள்ளது, " +"இது முழு விளக்கத்தின் உள்ளடக்க வகையைக் குறிப்பிடும் ஒரு சரத்தை எடுக்கும். மேனிலை தரவு இந்" +"த விசையை அட்டவணையில் குறிப்பிடவில்லை என்றால் ஒரு கருவி பிழையை உயர்த்த வேண்டும். மேனிலை " +"தரவு `` சார்செட்`` அளவுருவைக் குறிப்பிடவில்லை என்றால், அது யுடிஎஃப் -8 என்று " +"கருதப்படுகிறது. கருவிகள் பிற குறியாக்கங்களை தேர்வு செய்தால் ஆதரிக்கலாம். கருவிகள் மாற்று" +" உள்ளடக்க வகைகளை ஆதரிக்கலாம், அவை உள்ளடக்க வகைக்கு மாற்றக்கூடியவை: ref: `கோர் மேனிலை " +"தரவு <கோர்-மெட்டாடேட்டா>`. இல்லையெனில் கருவிகள் ஆதரிக்கப்படாத உள்ளடக்க வகைகளுக்கு பிழையை" +" எழுப்ப வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" +"தொடர்புடையது: குறிப்பு: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: " +"`-பைதான் <கோர்-மெட்டாடேட்டா-வேண்டுகோள்-பைதான்>` தேவை" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." +msgstr "திட்டத்தின் பைதான் பதிப்பு தேவைகள்." + +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" +"தொடர்புடைய: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: " +"`உரிம-வெளிப்பாடு <கோர்-மெட்டாடேட்டா-லிசென்ச்-எக்ச்பிரசன்>`" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:244 +msgid "" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" +"வரையறுக்கப்பட்டுள்ளபடி செல்லுபடியாகும் SPDX உரிம வெளிப்பாடு உரை சரம்: PEP: `639`. " +"கருவிகள் வெளிப்பாட்டின் வழக்கு இயல்பாக்கலை சரிபார்க்க வேண்டும் மற்றும் செய்ய வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "`` உரிமம்`` விசையின் அட்டவணை துணைக் கீல்கள் நீக்கப்படுகின்றன." + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" +msgstr "டாம்_ வகை: சரங்களின் வரிசை" + +#: ../source/specifications/pyproject-toml.rst:254 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 +#: ../source/specifications/pyproject-toml.rst:257 msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +"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 "" +"திட்ட ரூட் கோப்பகத்துடன் தொடர்புடைய திட்ட மூல மரத்தில் உள்ள பாதைகளைக் குறிப்பிடும் ஒரு " +"வரிசை (அதாவது அடைவு: கோப்பு: `pyproject.toml` அல்லது மரபு திட்ட உள்ளமைவு கோப்புகள்" +", எ.கா.: கோப்பு:` setup.py`,: `setup.cfg `, முதலியன) தொகுப்புடன் விநியோகிக்கப்பட " +"வேண்டிய உரிமங்கள் மற்றும் பிற சட்ட அறிவிப்புகளைக் கொண்ட (கள்)." -#: ../source/specifications/pyproject-toml.rst:254 +#: ../source/specifications/pyproject-toml.rst:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" +"கீழே குறிப்பிடப்பட்டுள்ளபடி சரங்களில் செல்லுபடியாகும் குளோப் வடிவங்கள் இருக்க வேண்டும்:" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" +"எண்ணெழுத்து எழுத்துக்கள், அடிக்கோடிட்டு (`` _``), ஐபன்கள் (`` -``) மற்றும் புள்ளிகள் (`` " +".``) ஆகியவை சொற்களஞ்சியத்துடன் பொருந்த வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:268 +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 "" +"சிறப்பு குளோப் எழுத்துக்கள்: ``*``, ``? `` [...] `` க்குள், ஐபன் ஒரு லோகேல்-அஞ்ஞான " +"வரம்பைக் குறிக்கிறது (எ.கா. `` a-z``, யூனிகோட் குறியீடு புள்ளிகளின் அடிப்படையில் ஆர்டர்)" +". தொடக்க அல்லது முடிவில் ஐபன்கள் உண்மையில் பொருந்துகின்றன." + +#: ../source/specifications/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" +"பாதை டிலிமிட்டர்கள் முன்னோக்கி ச்லாச் எழுத்துக்குறியாக இருக்க வேண்டும் (``/``). வடிவங்கள் " +"கொண்ட கோப்பகத்துடன் தொடர்புடையவை: கோப்பு: `pyproject.toml`, எனவே முன்னணி ச்லாச் எழுத்து" +" பயன்படுத்தப்படக்கூடாது." + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "பெற்றோர் அடைவு குறிகாட்டிகள் (`` ..``) பயன்படுத்தப்படக்கூடாது." + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" +"இந்த விவரக்குறிப்பால் மூடப்படாத எந்த எழுத்துக்கள் அல்லது எழுத்துக்குறி காட்சிகளும் தவறானவை" +". திட்டங்கள் அத்தகைய மதிப்புகளைப் பயன்படுத்தக்கூடாது. இந்த புலத்தை எடுத்துக் கொள்ளும் " +"கருவிகள் பிழையுடன் தவறான மதிப்புகளை நிராகரிக்க வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:284 +msgid "" +"Tools MUST assume that license file content is valid UTF-8 encoded text, and " +"SHOULD validate this and raise an error if it is not." +msgstr "" +"உரிமக் கோப்பு உள்ளடக்கம் செல்லுபடியாகும் UTF-8 குறியிடப்பட்ட உரை என்று கருவிகள் கருத " +"வேண்டும், மேலும் இதைச் சரிபார்த்து, இல்லையென்றால் பிழையை உயர்த்த வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" +"நேரடி பாதைகள் (எ.கா.: கோப்பு: `உரிமம்`) செல்லுபடியாகும் குளோப்கள், அதாவது அவை " +"வரையறுக்கப்படலாம்." + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "கருவிகளை உருவாக்கு:" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" +"ஒவ்வொரு மதிப்பையும் ஒரு குளோப் வடிவமாகக் கருத வேண்டும், மேலும் வடிவத்தில் தவறான குளோப் " +"தொடரியல் இருந்தால் பிழையை உயர்த்த வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" +"அனைத்து விநியோக காப்பகங்களிலும் பட்டியலிடப்பட்ட வடிவத்தால் பொருந்தக்கூடிய அனைத்து " +"கோப்புகளையும் சேர்க்க வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" +"பொருந்திய ஒவ்வொரு கோப்பு பாதையும் கோர் மெட்டாடேட்டாவில் உரிம-கோப்பு புலத்தின் கீழ் பட்டியலி" +"ட வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" +"எந்தவொரு தனிப்பட்ட பயனர் குறிப்பிட்ட வடிவமும் குறைந்தது ஒரு கோப்பில் பொருந்தவில்லை என்றால் " +"பிழையை உயர்த்த வேண்டும்." + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" +"TOML_ வகை: சரம் விசைகள் மற்றும் மதிப்புகளுடன் இன்லைன் அட்டவணைகளின் வரிசை" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" "`Maintainer `, and :ref:`Maintainer-email `" msgstr "" +"தொடர்புடைய: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `ஆசிரியர் " +"<கோர்-மெட்டாடேட்டா-ஆசிரியர்>`,: குறிப்பு: `ஆசிரியர்-எமெயில் " +"<கோர்-மெட்டாடேட்டா-ஆசிரியர்-எமெயில்>`,: குறிப்பு: `பராமரிப்பாளர் `, மற்றும்: ref: `பராமரிப்பாளர்-எமெயில் `" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" +"\"பராமரிப்பாளர்கள்\" விசை \"ஆசிரியர்களுக்கு\" ஒத்ததாகும், அதன் சரியான பொருள் " +"விளக்கத்திற்கு திறந்திருக்கும்." -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16902,149 +23799,206 @@ msgid "" "contain commas. The ``email`` value MUST be a valid email address. Both keys " "are optional, but at least one of the keys must be specified in the table." msgstr "" +"இந்த விசைகள் 2 விசைகள் கொண்ட அட்டவணைகளின் வரிசையை ஏற்றுக்கொள்கின்றன: `` பெயர்`` மற்றும் ``" +" மின்னஞ்சல்``. இரண்டு மதிப்புகளும் சரங்களாக இருக்க வேண்டும். `` பெயர்`` மதிப்பு " +"செல்லுபடியாகும் மின்னஞ்சல் பெயராக இருக்க வேண்டும் (அதாவது ஒரு பெயராக, மின்னஞ்சலுக்கு முன்" +", இல், இல்: rfc: `822`) மற்றும் காற்புள்ளிகள் இல்லை. `` மின்னஞ்சல்`` மதிப்பு சரியான " +"மின்னஞ்சல் முகவரியாக இருக்க வேண்டும். இரண்டு விசைகளும் விருப்பமானவை, ஆனால் குறைந்தபட்சம் " +"விசைகளில் ஒன்று அட்டவணையில் குறிப்பிடப்பட வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" +"நிரப்ப தரவைப் பயன்படுத்துதல்: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` பின்வருமாறு:" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" +"`` பெயர்`` மட்டுமே வழங்கப்பட்டால், மதிப்பு: குறிப்பு: `ஆசிரியர் " +"<கோர்-மெட்டாடேட்டா-ஆசிரியர்>` அல்லது: குறிப்பு: `பராமரிப்பாளர் " +"<கோர்-மெட்டாடேட்டா-ஐன்டெய்னர்>` பொருத்தமானதாகும்." -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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 "" +"`` மின்னஞ்சல்`` மற்றும் `பெயர்`` இரண்டும் வழங்கப்பட்டால், மதிப்பு: ref:` ஆசிரியர்-எமெயில் " +"<கோர்-மெட்டாடேட்டா-ஆசிரியர்-எமெயில்> `அல்லது: குறிப்பு:` பராமரிப்பாளர்-எமெயில் " +"<கோர்-மெட்டாடேட்டா- `` {name} <{email}> `` வடிவத்துடன் பராமரிப்பாளர்-எமெயில்> " +"`பொருத்தமானது." -#: ../source/specifications/pyproject-toml.rst:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." -msgstr "" +msgstr "பல மதிப்புகள் காற்புள்ளிகளால் பிரிக்கப்பட வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" +"தொடர்புடைய: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `முக்கிய " +"வார்த்தைகள் <கோர்-மெட்டாடேட்டா-கீவேர்டுகள்>`" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." -msgstr "" +msgstr "திட்டத்திற்கான முக்கிய வார்த்தைகள்." -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" +"தொடர்புடைய: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: " +"`வகைப்படுத்தி <கோர்-மெட்டாடேட்டா-கிளாசிஃபையர்>`" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." +msgstr "திட்டத்திற்கு பொருந்தும் வகைப்படுத்திகள்." + +#: ../source/specifications/pyproject-toml.rst:370 +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:316 +#: ../source/specifications/pyproject-toml.rst:380 msgid "TOML_ type: table with keys and values of strings" -msgstr "" +msgstr "TOML_ வகை: சரங்களின் விசைகள் மற்றும் மதிப்புகள் கொண்ட அட்டவணை" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" +"தொடர்புடைய: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `திட்டம்-உர்" +" <கோர்-மெட்டாடேட்டா-புரோசெக்ட்-உர்எல்>`" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" -msgstr "" +msgstr "நுழைவு புள்ளிகள்" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" +"TOML_ வகை: அட்டவணை (`` [project.scripts] ``, `` [project.gui-scripts] ``, " +"மற்றும் `` [project.entry- புள்ளிகள்] ``)" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" -msgstr "" +msgstr ": Ref: `நுழைவு புள்ளிகள் விவரக்குறிப்பு <நுழைவு புள்ளிகள்>`" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 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 "" +"நுழைவு புள்ளிகள் தொடர்பான மூன்று அட்டவணைகள் உள்ளன. `` [Project.scripts] `` அட்டவணை ``" +" Console_scripts`` குழுவிற்கு ஒத்திருக்கிறது: ref: `நுழைவு புள்ளிகள் விவரக்குறிப்பு " +"<நுழைவு புள்ளிகள்>`. அட்டவணையின் விசை நுழைவு புள்ளியின் பெயர் மற்றும் மதிப்பு பொருள் " +"குறிப்பு." -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 msgid "" "The ``[project.gui-scripts]`` table corresponds to the ``gui_scripts`` group " "in the :ref:`entry points specification `. Its format is the " "same as ``[project.scripts]``." msgstr "" +"`` [Project.gui-scripts] `` அட்டவணை `` gui_scripts`` குழுவிற்கு ஒத்திருக்கிறது: " +"ref: `நுழைவு புள்ளிகள் விவரக்குறிப்பு <நுழைவு புள்ளிகள்>`. அதன் வடிவம் `` " +"[project.scripts] `` போன்றது." -#: ../source/specifications/pyproject-toml.rst:342 +#: ../source/specifications/pyproject-toml.rst:406 msgid "" "The ``[project.entry-points]`` table is a collection of tables. Each sub-" "table's name is an entry point group. The key and value semantics are the " "same as ``[project.scripts]``. Users MUST NOT create nested sub-tables but " "instead keep the entry point groups to only one level deep." msgstr "" +"`` [Project.entry- புள்ளிகள்] `` அட்டவணை என்பது அட்டவணைகளின் தொகுப்பாகும். ஒவ்வொரு " +"துணை அட்டவணையின் பெயரும் ஒரு நுழைவு புள்ளி குழு. விசை மற்றும் மதிப்பு சொற்பொருள் `` " +"[project.scripts] `` போன்றவை. பயனர்கள் உள்ளமைக்கப்பட்ட துணை அட்டவணைகளை உருவாக்கக்கூடாது" +", மாறாக நுழைவு புள்ளி குழுக்களை ஒரே ஒரு நிலைக்கு மட்டுமே ஆழமாக வைத்திருக்க வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 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 "" +"மேனிலை தரவு ஒரு `` [project.entry- புள்ளிகள். `` [project.scripts] `` மற்றும் `` " +"[project.gui-scripts] ``." -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 msgid "" "TOML_ type: Array of :pep:`508` strings (``dependencies``), and a table with " "values of arrays of :pep:`508` strings (``optional-dependencies``)" msgstr "" +"TOML_ வகை: வரிசை: PEP: `508` சரங்கள் (` `சார்புநிலைகள்``), மற்றும் வரிசைகளின் " +"மதிப்புகளைக் கொண்ட அட்டவணை: PEP:` 508` சரங்கள் (`` விருப்ப-சார்புநிலைகள்``)" -#: ../source/specifications/pyproject-toml.rst:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" +"தொடர்புடைய: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: ref: `தேவைப்படுகிறது " +"<கோர்-மெட்டாடேட்டா-வேண்டுகோள்-டிச்ட்>` மற்றும்: குறிப்பு: `வழங்குகிறது-எக்ச்ட்ரா " +"<கோர்-மெட்டாடேட்டா-எக்ச்ட்ரா>`" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." -msgstr "" +msgstr "திட்டத்தின் (விருப்ப) சார்புநிலைகள்." -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 "" +"`` சார்புகள்` `க்கு, இது ஒரு முக்கிய அம்சமாகும், அதன் மதிப்பு சரங்களின் வரிசை. ஒவ்வொரு " +"சரமும் திட்டத்தின் சார்புநிலையைக் குறிக்கிறது மற்றும் செல்லுபடியாகும் என வடிவமைக்கப்பட " +"வேண்டும்: PEP: `508` சரம். ஒவ்வொரு சரம் நேரடியாக A: ref: `தேவை-டிச்ட் " +"<கோர்-மெட்டாடேட்டா-வேண்டுகோள்-டிச்ட்>` நுழைவு தேவை." -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17054,38 +24008,55 @@ msgid "" "dist>` entry for the matching :ref:`Provides-Extra ` metadata." msgstr "" +"`` விருப்ப-சார்புநிலைகளுக்கு`` க்கு, இது ஒரு அட்டவணை, ஒவ்வொரு விசையும் கூடுதல் என்பதைக்" +" குறிப்பிடுகிறது மற்றும் அதன் மதிப்பு சரங்களின் வரிசை. வரிசைகளின் சரங்கள் " +"செல்லுபடியாகும்: PEP: `508` சரங்கள். விசைகள் இதற்கான செல்லுபடியாகும் மதிப்புகளாக இருக்" +"க வேண்டும்: ref: `வழங்குகிறது-எக்ச்ட்ரா <கோர்-மெட்டாடேட்டா-வழங்கும்-எக்ச்ட்ரா>`. வரிசையில் " +"உள்ள ஒவ்வொரு மதிப்பும் தொடர்புடையது: ref: `தேவைப்படுகிறது " +"<கோர்-மெட்டாடேட்டா-வேண்டுகோள்-டிச்ட்>` பொருத்தத்திற்கான நுழைவு: ref: `வழங்கும்-எக்ச்ட்ரா " +"<கோர்-மெட்டாடேட்டா-வழங்கும்-எக்ச்ட்ரா>` மேனிலை தரவு." -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" -msgstr "" +msgstr "TOML_ வகை: சரத்தின் வரிசை" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" +"தொடர்புடைய: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` புலம் :: குறிப்பு: `டைனமிக் " +"<கோர்-மெட்டாடேட்டா-டைனமிக்>`" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 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 "" +"இந்த PEP ஆல் பட்டியலிடப்பட்ட எந்த விசைகள் வேண்டுமென்றே குறிப்பிடப்படவில்லை என்பதைக் " +"குறிப்பிடுகிறது, எனவே மற்றொரு கருவி அத்தகைய மெட்டாடேட்டாவை மாறும் வகையில் வழங்க " +"முடியும். இது எந்த மேனிலை தரவு வேண்டுமென்றே குறிப்பிடப்படவில்லை மற்றும் பின்னர் கருவி " +"மூலம் வழங்கப்படுவதை ஒப்பிடும்போது குறிப்பிடப்படாமல் இருக்கும் என்று எதிர்பார்க்கப்படுகிறது." -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" +"மேனிலை தரவு `` பெயர்`` இல் `` டைனமிக்`` ஐக் குறிப்பிடினால் ஒரு கட்டமைப்பை பின்-முடிவு " +"பிழையை உயர்த்த வேண்டும்." -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17093,71 +24064,109 @@ msgid "" "should not be possible for a required key to not be listed somehow in the " "``[project]`` table)." msgstr "" +": Ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` விவரக்குறிப்பு ஒரு துறையை \"தேவை\" " +"என்று பட்டியலிடுகிறது என்றால், மேனிலை தரவு விசையை சட்டப்பூர்வமாக குறிப்பிட வேண்டும் " +"அல்லது அதை `` டைனமிக்`` இல் பட்டியலிட வேண்டும் (பின்-முனைகளை உருவாக்குங்கள் இல்லையெனில் " +"பிழையை உயர்த்த வேண்டும் , அதாவது `` [திட்டம்] `` அட்டவணை) எப்படியாவது பட்டியலிடப்படாமல் " +"இருக்க முடியாது." -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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 "" +"The: ref: `கோர் மேனிலை தரவு <கோர்-மெட்டாடேட்டா>` விவரக்குறிப்பு ஒரு துறையை " +"\"விருப்பமானது\" என்று பட்டியலிடுகிறது, மேனிலை தரவு அதை `` டைனமிக்`` இல் " +"பட்டியலிடலாம் என்றால், எதிர்பார்ப்பு ஒரு கட்டமைப்பை உருவாக்கினால் விசைக்கான தரவை வழங்கும் " +"பின்னர்." -#: ../source/specifications/pyproject-toml.rst:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" -msgstr "" +msgstr "தன்னிச்சையான கருவி உள்ளமைவு: `` [கருவி] `` அட்டவணை" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 "" +"`` [கருவி] `` அட்டவணை என்பது உங்கள் பைதான் திட்டத்துடன் தொடர்புடைய எந்தவொரு கருவியும், " +"கருவிகளை உருவாக்குவது மட்டுமல்லாமல், பயனர்கள் `` [கருவி] ``, எ.கா. `flit _ கருவி அதன் உள்ளமைவை` `[கருவி.ஃப்ளிட்]` `இல் சேமிக்கும்." -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 "" +"A mechanism is needed பெறுநர் allocate names within the ``tool.*`` namespace, " +"பெறுநர் make sure that different திட்டங்கள் do not attempt பெறுநர் use the same " +"sub-table and collide. Our விதி is that a திட்டம் can use the subtable " +"``tool.$NAME`` if, and only if, they own the நுழைவு க்கு ``$NAME`` in the " +"Cheeseshop/PyPI." -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 msgid "" "May 2016: The initial specification of the ``pyproject.toml`` file, with " "just a ``[build-system]`` containing a ``requires`` key and a ``[tool]`` " "table, was approved through :pep:`518`." msgstr "" +"மே 2016: `` [பில்ட்-சிச்டம்] `` `` தேவை` `` விசையும் ஒரு `` [கருவி] `அட்டவணை, ஒரு` " +"`[பில்ட்-சிச்டம்]` `` அட்டவணை ஆகியவற்றைக் கொண்ட `` pyproject.toml`` கோப்பின் ஆரம்ப " +"விவரக்குறிப்பு அங்கீகரிக்கப்பட்டது மூலம்: PEP: `518`." -#: ../source/specifications/pyproject-toml.rst:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +"நவம்பர் 2020: `` [திட்டம்] `` அட்டவணையின் விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: " +"`621`." + +#: ../source/specifications/pyproject-toml.rst:517 +msgid "" +"December 2024: The ``license`` key was redefined, the ``license-files`` key " +"was added and ``License::`` classifiers were deprecated through :pep:`639`." +msgstr "" +"டிசம்பர் 2024: `` உரிமம்`` விசை மறுவரையறை செய்யப்பட்டது, `` உரிம-கோப்புகள்`` விசை " +"சேர்க்கப்பட்டு `` உரிமம் :: `` வகைப்படுத்திகள் நீக்கப்பட்டன: பெப்: `639`." #: ../source/specifications/recording-installed-packages.rst:7 msgid "Recording installed projects" -msgstr "" +msgstr "நிறுவப்பட்ட திட்டங்களை பதிவு செய்தல்" #: ../source/specifications/recording-installed-packages.rst:9 msgid "" @@ -17166,6 +24175,10 @@ msgid "" "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 "" @@ -17175,6 +24188,11 @@ msgid "" "a list of installed files in a format specific to Python tooling, it should " "still record the name and version of the installed project." msgstr "" +"கிட்டத்தட்ட எல்லா தகவல்களும் விருப்பமானவை. இது பைதான் சுற்றுச்சூழல் அமைப்புக்கு வெளியே உள்" +"ள கருவிகளை லினக்ச் தொகுப்பு மேலாளர்கள் போன்ற கருவிகளை பைதான் கருவியுடன் முடிந்தவரை " +"ஒருங்கிணைக்க அனுமதிக்கிறது. எடுத்துக்காட்டாக, பைதான் கருவிக்கு குறிப்பிட்ட வடிவத்தில் " +"நிறுவப்பட்ட கோப்புகளின் பட்டியலை ஒரு நிறுவி எளிதாக வழங்க முடியாவிட்டாலும், அது " +"நிறுவப்பட்ட திட்டத்தின் பெயர் மற்றும் பதிப்பை இன்னும் பதிவு செய்ய வேண்டும்." #: ../source/specifications/recording-installed-packages.rst:25 msgid "" @@ -17182,6 +24200,9 @@ msgid "" "install a \"``.dist-info``\" directory located alongside importable modules " "and packages (commonly, the ``site-packages`` directory)." msgstr "" +"ஒரு விநியோகத்திலிருந்து நிறுவப்பட்ட ஒவ்வொரு திட்டமும், கோப்புகளுக்கு மேலதிகமாக, " +"இறக்குமதி செய்யக்கூடிய தொகுதிகள் மற்றும் தொகுப்புகளுடன் (பொதுவாக, `` தள-பேக்கேச்கள்` " +"கோப்பகம்) அமைந்துள்ள ஒரு \".dist-info``\" கோப்பகத்தை நிறுவ வேண்டும்." #: ../source/specifications/recording-installed-packages.rst:29 msgid "" @@ -17194,6 +24215,13 @@ msgid "" "exactly one dash (``-``) character in its stem, separating the ``name`` and " "``version`` fields." msgstr "" +"இந்த அடைவு `{name}-{version} .dist-info``,` `பெயர்`` மற்றும்` `பதிப்பு`` உடன் " +"தொடர்புடைய புலங்களுடன் பெயரிடப்பட்டுள்ளது: ref:` கோர்-மெட்டாடேட்டா`. இரண்டு புலங்களும் " +"இயல்பாக்கப்பட வேண்டும் (பார்க்க: ref: `பெயர் இயல்பாக்குதல் விவரக்குறிப்பு <பெயர்-இயல்பாக்கம்>`" +" மற்றும்: ref: `பதிப்பு இயல்பாக்கம் விவரக்குறிப்பு <பதிப்பு-விவரித்தல்-இயல்பாக்கம்>`), " +"மற்றும் டாசை மாற்றவும் (`` -``) அண்டர்ச்கோர் (`` _``) எழுத்துக்களைக் கொண்ட எழுத்துக்கள், " +"எனவே `` .டிச்ட்-இன்ஃபோ`` கோப்பகத்தில் எப்போதும் ஒரு கோடு (`` -``) அதன் தண்டுகளில் உள்ள " +"தன்மை, `` பெயர்`` மற்றும் `` பதிப்பு`` புலங்களை பிரிக்கிறது." #: ../source/specifications/recording-installed-packages.rst:37 msgid "" @@ -17205,6 +24233,13 @@ msgid "" "both ``name`` and ``version`` fields using the rules described above, and " "existing tools are encouraged to start normalizing those fields." msgstr "" +"வரலாற்று ரீதியாக, கருவிகள் டாட் எழுத்துக்களை மாற்றவோ அல்லது வழக்கை `` பெயர்`` துறையில் " +"இயல்பாக்கவோ தவறிவிட்டன, அல்லது `` பதிப்பு`` புலத்தில் இயல்பாக்கத்தை செய்யக்கூடாது. `` " +".Dist-info`` கோப்பகங்களை உட்கொள்ளும் கருவிகள் அந்தத் துறைகள் அசாதாரணப்படுத்தப்படும் என்று " +"எதிர்பார்க்க வேண்டும், மேலும் அவற்றை அவற்றின் இயல்பாக்கப்பட்ட சகாக்களுக்கு சமமாக கருதுகின்" +"றன. `` .Dist-info`` கோப்பகங்களை எழுதும் புதிய கருவிகள் மேலே விவரிக்கப்பட்ட விதிகளைப் " +"பயன்படுத்தி `` பெயர்``` மற்றும் `` பதிப்பு`` இரண்டையும் இயல்பாக்க வேண்டும், மேலும் ஏற்கனவே " +"இருக்கும் கருவிகள் அந்த துறைகளை இயல்பாக்கத் தொடங்க ஊக்குவிக்கப்படுகின்றன." #: ../source/specifications/recording-installed-packages.rst:47 msgid "" @@ -17217,33 +24252,45 @@ msgid "" "API for such tools to consume, so tools can have access to the unnormalized " "name when displaying distribution information." msgstr "" +"`` .Dist-info`` கோப்பகத்தின் பெயர் வடிவமைக்கப்பட்டுள்ளது, இது ஒரு விநியோகத்தை ஒரு " +"கோப்பு முறைமை பாதையாக பிரதிநிதித்துவப்படுத்துகிறது. ஒரு பயனருக்கு விநியோக பெயரை " +"வழங்கும் கருவிகள் இயல்பாக்கப்பட்ட பெயரைப் பயன்படுத்துவதைத் தவிர்க்க வேண்டும், அதற்கு பதிலாக " +"குறிப்பிட்ட பெயரை வழங்க வேண்டும் (நிறுவப்பட்ட தொகுப்புக்கு தீர்வு காண்பதற்கு முன்பு " +"தேவைப்படும்போது), அல்லது அந்தந்த புலங்களை கோர் மெட்டாடேட்டாவில் படிக்கவும், ஏனெனில் அங்கு " +"பட்டியலிடப்பட்ட மதிப்புகள் வெளியிடப்படாதவை மற்றும் துல்லியமாக உள்ளன விநியோகத்தை " +"பிரதிபலிக்கிறது. அத்தகைய கருவிகளை உட்கொள்வதற்கு நூலகங்கள் பநிஇ ஐ வழங்க வேண்டும், எனவே " +"விநியோக தகவல்களைக் காண்பிக்கும் போது கருவிகள் சிறப்பான பெயரை அணுகலாம்." #: ../source/specifications/recording-installed-packages.rst:56 msgid "" "This ``.dist-info`` directory may contain the following files, described in " "detail below:" msgstr "" +"இந்த `.dist-info`` கோப்பகத்தில் பின்வரும் கோப்புகள் இருக்கலாம், இது கீழே விரிவாக " +"விவரிக்கப்பட்டுள்ளது:" #: ../source/specifications/recording-installed-packages.rst:59 msgid "``METADATA``: contains project metadata" -msgstr "" +msgstr "`` மெட்டாடேட்டா``: திட்ட மெட்டாடேட்டாவைக் கொண்டுள்ளது" #: ../source/specifications/recording-installed-packages.rst:60 msgid "``RECORD``: records the list of installed files." -msgstr "" +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 "" +"`` entry_points.txt``: காண்க: குறிப்பு: விவரங்களுக்கு `நுழைவு புள்ளிகள்`" #: ../source/specifications/recording-installed-packages.rst:63 msgid "``direct_url.json``: see :ref:`direct-url` for details" -msgstr "" +msgstr "`` stread_url.json``: காண்க: குறிப்பு: விவரங்களுக்கு `நேரடி-உர்எல்`" #: ../source/specifications/recording-installed-packages.rst:65 msgid "" @@ -17251,83 +24298,118 @@ msgid "" "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 directory, " +"described in detail below:" +msgstr "" +"இது: கோப்பு: `.dist-info/` கோப்பகத்தில் பின்வரும் கோப்பகத்தைக் கொண்டிருக்கலாம், இது கீழே " +"விரிவாக விவரிக்கப்பட்டுள்ளது:" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:72 +msgid ":file:`licenses/`: contains license files." +msgstr ": கோப்பு: `உரிமங்கள்/`: உரிமக் கோப்புகளைக் கொண்டுள்ளது." + +#: ../source/specifications/recording-installed-packages.rst:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " "Such files may be copied to the ``.dist-info`` directory of an installed " "project." msgstr "" +"தி: ref: `பைனரி-விநியோக-வடிவ விவரக்குறிப்பு` விவரக்குறிப்பு `` .dist-info`` " +"கோப்பகத்தில் தோன்றக்கூடிய கூடுதல் கோப்புகளை விவரிக்கிறது: கால: `சக்கரம்`. இத்தகைய " +"கோப்புகள் நிறுவப்பட்ட திட்டத்தின் `` .dist-info`` கோப்பகத்திற்கு நகலெடுக்கப்படலாம்." -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 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 "" +"இந்த விவரக்குறிப்பின் முந்தைய பதிப்புகள் ஒரு `` கோரப்பட்ட`` கோப்பையும் குறிப்பிடுகின்றன. " +"இந்த கோப்பு இப்போது கருவி சார்ந்த நீட்டிப்பாக கருதப்படுகிறது, ஆனால் எதிர்காலத்தில் மீண்டும் " +"தரப்படுத்தப்படலாம். `PEP 376 ` _ அதன் அசல் அர்த்தத்திற்கு பார்க்கவும்." -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" -msgstr "" +msgstr "மேனிலை தரவு கோப்பு" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 msgid "" "The ``METADATA`` file contains metadata as described in the :ref:`core-" "metadata` specification, version 1.1 or greater." msgstr "" +"`` மெட்டாடேட்டா`` கோப்பில் விவரிக்கப்பட்டுள்ளபடி மேனிலை தரவு உள்ளது: ref: " +"`கோர்-மெட்டாடேட்டா` விவரக்குறிப்பு, பதிப்பு 1.1 அல்லது அதற்கு மேற்பட்டது." -#: ../source/specifications/recording-installed-packages.rst:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" -msgstr "" +msgstr "பதிவு கோப்பு" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" +"சி.எச்.வி பேச்சுவழக்கு பைத்தானின் `` சி.எச்.வி`` தொகுதியின் இயல்புநிலை `` ரீடர்`` உடன் " +"படிக்கக்கூடியதாக இருக்க வேண்டும்:" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," -msgstr "" +msgstr "புலம் டிலிமிட்டர்: ``, `` (கமா)," -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," -msgstr "" +msgstr "கரியை மேற்கோள் காட்டுதல்: `` \"` `(நேராக இரட்டை மேற்கோள்)," -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." -msgstr "" +msgstr "வரி டெர்மினேட்டர்: ஒன்று `` \\ r \\ n`` அல்லது `` \\ n``." -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 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 "" +"* பாதை * முழுமையானதாக இருக்கலாம், அல்லது `.dist-info`` கோப்பகத்தைக் கொண்ட கோப்பகத்துடன்" +" தொடர்புடையதாக இருக்கலாம் (பொதுவாக,` `தள-பேக்கேச்கள்` கோப்பகம்). சாளரங்களில், கோப்பகங்கள் " +"முன்னோக்கி அல்லது பின்வாங்குவதன் மூலம் பிரிக்கப்படலாம் (``/`` அல்லது `` \\ ``)." -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17335,14 +24417,21 @@ msgid "" "nopad encoding (:py:func:`base64.urlsafe_b64encode(digest) ` with trailing ``=`` removed)." msgstr "" +"* ஆச் * என்பது ஒரு வெற்று சரம் அல்லது ஒரு ஆச் வழிமுறையின் பெயர்: py: தரவு: " +"`hashlib.algorithms_guaranded`, அதைத் தொடர்ந்து சமமான தன்மை` `=` `மற்றும் கோப்பின் " +"உள்ளடக்கங்களின் டைசச்ட், URLSAFE உடன் குறியிடப்பட்டுள்ளது -பேச் 64-நோபாட் குறியாக்கம் (: " +"py: func: `base64.urlsafe_b64encode (டைசச்ட்) " +"`பின்னால்` `=` `அகற்றப்பட்டது)." -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 msgid "" "The *size* is either the empty string, or file's size in bytes, as a base 10 " "integer." msgstr "" +"* அளவு * என்பது வெற்று சரம் அல்லது பைட்டுகளில் உள்ள கோப்பின் அளவு, அடிப்படை 10 முழு " +"எண்ணாக உள்ளது." -#: ../source/specifications/recording-installed-packages.rst:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17350,8 +24439,12 @@ msgid "" "is discouraged, as it prevents verifying the integrity of the installed " "project." msgstr "" +"எந்தவொரு கோப்பிற்கும், அல்லது * ஆச் * மற்றும் * அளவு * புலங்கள் காலியாக விடப்படலாம். " +"பொதுவாக, `` .பிசி`` கோப்புகளுக்கான உள்ளீடுகள் மற்றும் `` பதிவு`` கோப்பில் வெற்று *ஆச் " +"*மற்றும் *அளவு *உள்ளன. மற்ற கோப்புகளுக்கு, நிறுவப்பட்ட திட்டத்தின் ஒருமைப்பாட்டை சரிபார்க்கத்" +" தடுக்கும் என்பதால், தகவல்களை வெளியே விட்டுவிடுவது ஊக்கமளிக்கிறது." -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17359,27 +24452,40 @@ msgid "" "directory (including the ``RECORD`` file itself) must be listed. Directories " "should not be listed." msgstr "" +"`` பதிவு`` கோப்பு இருந்தால், அது விருப்பமான `` பதிவு`` இல் பட்டியலிடப்பட்ட `` .பீ`` " +"கோப்புகளுடன் தொடர்புடைய `` .பிசி`` கோப்புகளைத் தவிர, திட்டத்தின் அனைத்து நிறுவப்பட்ட " +"கோப்புகளையும் பட்டியலிட வேண்டும். குறிப்பிடத்தக்க வகையில், `` .டிச்ட்-இன்ஃபோ`` கோப்பகத்தின் " +"உள்ளடக்கங்கள் (`` பதிவு`` கோப்பு உட்பட) பட்டியலிடப்பட வேண்டும். கோப்பகங்கள் " +"பட்டியலிடப்படக்கூடாது." -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" -msgstr "" +msgstr "சாத்தியமான `` பதிவு`` கோப்பின் சான்று இங்கே ::" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 "" +"`` பதிவு`` கோப்பு காணவில்லை என்றால், `` .dist-info`` ஐ நம்பியிருக்கும் கருவிகள் " +"தொகுப்பை நிறுவல் நீக்கவோ மேம்படுத்தவோ முயற்சிக்கக்கூடாது. (லினக்ச் டிச்ட்ரோசில் கணினி " +"தொகுப்பு மேலாளர்கள் போன்ற பிற தகவல்களின் ஆதாரங்களை நம்பியிருக்கும் கருவிகளுக்கு இந்த " +"கட்டுப்பாடு பொருந்தாது.)" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17388,70 +24494,110 @@ msgid "" "``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:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" -msgstr "" +msgstr "நிறுவி கோப்பு" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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 "" +"இருந்தால், `` நிறுவி`` என்பது திட்டத்தை நிறுவ பயன்படும் கருவியை பெயரிடும் ஒற்றை வரி " +"உரை கோப்பு. நிறுவி கட்டளை வரியிலிருந்து இயங்கக்கூடியதாக இருந்தால், `` நிறுவி`` கட்டளை" +" பெயரைக் கொண்டிருக்க வேண்டும். இல்லையெனில், அதில் அச்சிடக்கூடிய ASCII சரம் இருக்க வேண்டும்." -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" +"கோப்பை பூச்சியம் அல்லது அதற்கு மேற்பட்ட ASCII வைட்ச்பேச் எழுத்துக்கள் மூலம் நிறுத்தலாம்." -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" -msgstr "" +msgstr "சாத்தியமான இரண்டு `` நிறுவி` கோப்புகளின் எடுத்துக்காட்டுகள் இங்கே ::" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" -msgstr "" +msgstr "Entery_points.txt கோப்பு" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 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:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." -msgstr "" +msgstr "அதன் விரிவான விவரக்குறிப்பு: ref: `நுழைவு புள்ளிகள்`." -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" -msgstr "" +msgstr "Direct_url.json கோப்பு" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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 "" +"நேரடி முகவரி குறிப்பைக் குறிப்பிடும் தேவையிலிருந்து விநியோகத்தை நிறுவும் போது இந்த " +"கோப்பு நிறுவிகளால் உருவாக்கப்பட வேண்டும் (VCS முகவரி உட்பட)." -#: ../source/specifications/recording-installed-packages.rst:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." +msgstr "அதன் விரிவான விவரக்குறிப்பு உள்ளது: குறிப்பு: `நேரடி-உர்எல்`." + +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "தி: கோப்பு: `உரிமங்கள்/` துணை அடைவு" + +#: ../source/specifications/recording-installed-packages.rst:230 +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 "" +"மேனிலை தரவு பதிப்பு 2.4 அல்லது அதற்கு மேற்பட்டது மற்றும் ஒன்று அல்லது அதற்கு மேற்பட்ட `` " +"உரிம-கோப்பு` `புலங்கள் குறிப்பிடப்பட்டால்,: கோப்பு:` .டிச்ட்-இன்ஃபோ/`கோப்பகத்தில் ஒரு: " +"கோப்பு:` உரிமங்கள்/`துணை அடைவு இருக்க வேண்டும், அவை கொண்டிருக்க வேண்டும் `` " +"உரிம-கோப்பு`` புலங்களில் பட்டியலிடப்பட்ட கோப்புகள்: கோப்பு: `மெட்டாடேட்டா` அந்தந்த " +"பாதைகளில்: கோப்பு:` உரிமங்கள்/` அடைவு. இந்த கோப்பகத்தில் உள்ள எந்த கோப்புகளும் நிறுவும் " +"கருவிகளால் சக்கரங்களிலிருந்து நகலெடுக்கப்பட வேண்டும்." -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:239 msgid "Intentionally preventing changes to installed packages" -msgstr "" +msgstr "நிறுவப்பட்ட தொகுப்புகளில் மாற்றங்களை வேண்டுமென்றே தடுக்கிறது" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17459,27 +24605,38 @@ msgid "" "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:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" +"இதை அடைய, பாதிக்கப்பட்ட கருவிகள் பின்வரும் நடவடிக்கைகளை எடுக்க வேண்டும்:" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17487,89 +24644,120 @@ msgid "" "provided packages (while also ensuring both locations appear on the default " "Python import path)." msgstr "" +"பைதான் இயக்க நேர வழங்குநர்கள் இயங்குதளம் வழங்கப்பட்ட தொகுப்புகளை மாற்றியமைப்பதன் மூலம் " +"இயங்குதளத்தின் கவனக்குறைவான மாற்றத்தைத் தடுக்கலாம், இயல்புநிலை பைதான் தொகுப்பு நிறுவல் " +"திட்டத்தை மேடையில் வழங்கப்பட்ட தொகுப்புகளால் பயன்படுத்தப்படுவதைத் தவிர வேறு இடத்தைப் " +"பயன்படுத்தலாம் (அதே நேரத்தில் இரு இடங்களும் இயல்புநிலை பைதான் இறக்குமதி பாதையில் " +"தோன்றுவதை உறுதிசெய்கின்றன)." -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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 "" +"சில சூழ்நிலைகளில், பைதான்-குறிப்பிட்ட கருவிகள் வழியாக கூடுதல் தொகுப்புகளை நிறுவுவதைத் " +"தடுப்பது விரும்பத்தக்கதாக இருக்கலாம். இந்த நிகழ்வுகளுக்கு: ref: `வெளிப்புறமாக " +"நிர்வகிக்கப்பட்ட-சூழல்கள்`" -#: ../source/specifications/recording-installed-packages.rst:254 +#: ../source/specifications/recording-installed-packages.rst:270 msgid "" "June 2009: The original version of this specification was approved through :" "pep:`376`. At the time, it was known as the *Database of Installed Python " "Distributions*." msgstr "" +"சூன் 2009: இந்த விவரக்குறிப்பின் அசல் பதிப்பு அங்கீகரிக்கப்பட்டது: PEP: `376`. அந்த " +"நேரத்தில், இது நிறுவப்பட்ட பைதான் விநியோகங்களின் *தரவுத்தளமாக அறியப்பட்டது *." -#: ../source/specifications/recording-installed-packages.rst:257 +#: ../source/specifications/recording-installed-packages.rst:273 msgid "" "March 2020: The specification of the ``direct_url.json`` file was approved " "through :pep:`610`. It is only mentioned on this page; see :ref:`direct-url` " "for the full definition." msgstr "" +"மார்ச் 2020: `` `direct_url.json`` கோப்பின் விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: " +"PEP:` 610`. இது இந்த பக்கத்தில் மட்டுமே குறிப்பிடப்பட்டுள்ளது; காண்க: குறிப்பு: முழு " +"வரையறைக்கு `நேரடி-உர்எல்`." -#: ../source/specifications/recording-installed-packages.rst:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." msgstr "" +"செப்டம்பர் 2020: பல்வேறு திருத்தங்கள் மற்றும் விளக்கங்கள் மூலம் அங்கீகரிக்கப்பட்டன: PEP: `627`." #: ../source/specifications/section-distribution-formats.rst:3 msgid "Package Distribution File Formats" -msgstr "" +msgstr "தொகுப்பு விநியோக கோப்பு வடிவங்கள்" #: ../source/specifications/section-distribution-metadata.rst:3 msgid "Package Distribution Metadata" -msgstr "" +msgstr "தொகுப்பு விநியோக மேனிலை தரவு" #: ../source/specifications/section-installation-metadata.rst:3 msgid "Package Installation Metadata" -msgstr "" +msgstr "தொகுப்பு நிறுவல் மேனிலை தரவு" #: ../source/specifications/section-package-indices.rst:3 msgid "Package Index Interfaces" -msgstr "" +msgstr "தொகுப்பு குறியீட்டு இடைமுகங்கள்" #: ../source/specifications/simple-repository-api.rst:6 msgid "Simple repository API" -msgstr "" +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: HTML and JSON." msgstr "" +"கிடைக்கக்கூடிய தொகுப்பு பதிப்புகளை வினவுவதற்கும், குறியீட்டு சேவையகத்திலிருந்து " +"தொகுப்புகளை மீட்டெடுப்பதற்கும் இடைமுகம் இரண்டு வடிவங்களில் வருகிறது: உஉகுமொ மற்றும் சேசன்." -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" -msgstr "" +msgstr "அடிப்படை உஉகுமொ பநிஇ" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 "" +"எளிய பநிஇ ஐ செயல்படுத்தும் ஒரு களஞ்சியம் அதன் அடிப்படை முகவரி ஆல் வரையறுக்கப்படுகிறது, " +"இது அனைத்து கூடுதல் முகவரி களும் கீழே உள்ளது. பைபியின் அடிப்படை முகவரி `` https: // " +"pypi.org/simple/`` என்ற காரணத்தினால் பநிஇ க்கு \"எளிய\" களஞ்சியம் என்று " +"பெயரிடப்பட்டுள்ளது." -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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 "" +"இந்த ஆவணத்தில் உள்ள அனைத்து அடுத்தடுத்த முகவரி களும் இந்த அடிப்படை முகவரி உடன் " +"தொடர்புடையதாக இருக்கும் (எனவே பைபியின் முகவரி கொடுக்கப்பட்டால், ``/foo/`` முகவரி `` " +"https: // pypi.org/simple/foo/`` ஆக இருக்கும்." -#: ../source/specifications/simple-repository-api.rst:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17584,53 +24772,77 @@ msgid "" "the hash function (such as ``sha256``) and ```` is the hex " "encoded digest." msgstr "" +"ரூட் முகவரி க்கு கீழே ஒரு களஞ்சியத்தில் உள்ள ஒவ்வொரு தனிப்பட்ட திட்டத்திற்கும் மற்றொரு " +"முகவரி உள்ளது. இந்த முகவரி இன் வடிவம் ``//`` ஆகும், அங்கு `` <திட்டம்> `` அந்" +"த திட்டத்திற்கான இயல்பாக்கப்பட்ட பெயரால் மாற்றப்படுகிறது, எனவே \"ஓலி கிரெயில்\" என்ற " +"திட்டத்திற்கு ``/ஓலிங்ரெயில்/`` போன்ற முகவரி இருக்கும். இந்த முகவரி திட்டத்திற்கான " +"கோப்புக்கு ஒற்றை நங்கூர உறுப்புடன் செல்லுபடியாகும் HTML5 பக்கத்துடன் பதிலளிக்க வேண்டும். " +"HREF பண்புக்கூறு ** பதிவிறக்கம் செய்வதற்கான கோப்பின் இருப்பிடத்துடன் இணைக்கும் முகவரி ஆக " +"இருக்க வேண்டும், மேலும் நங்கூரம் குறிச்சொல்லின் உரை ** ** முகவரி இன் இறுதி பாதை கூறுகளை" +" (கோப்பு பெயர்) பொருத்த வேண்டும். முகவரி ** ** பின்வரும் தொடரியல் கொண்ட ஒரு முகவரி " +"துண்டு வடிவத்தில் ஒரு ஆசை சேர்க்க வேண்டும்: ``# = ``, அங்கு `` " +" `` என்பது ஆச் செயல்பாட்டின் சிறிய பெயர் (`` சா 256` `` `` `` `` `` `` `` " +"`` `." -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" -msgstr "" +msgstr "மேற்கூறியவற்றைத் தவிர, பின்வரும் தடைகள் பநிஇ இல் வைக்கப்படுகின்றன:" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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 "" +"ஒரு HTML5 பக்கத்துடன் பதிலளிக்கும் அனைத்து முகவரி களும் ** ** ஒரு ``/`` உடன் முடிவடை" +"ய வேண்டும், மேலும் களஞ்சியத்தை ** ** முகவரி களை ``/`` இல்லாமல் திருப்பி விட வேண்டும் " +"``/`` இறுதியில்." -#: ../source/specifications/simple-repository-api.rst:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" +"முகவரி கள் சரியான இடத்தை சுட்டிக்காட்டும் வரை முழுமையான அல்லது உறவினராக இருக்கலாம்." -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" +"களஞ்சியத்துடன் ஒப்பிடும்போது கோப்புகள் எங்கு புரவலன் செய்யப்பட வேண்டும் என்பதில் எந்த தடைகளும்" +" இல்லை." -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 "" +"களஞ்சியங்கள் ** ** பைதான் நிலையான நூலகத்தில் (தற்போது `` MD5``, `` சா 1``, ` " +"`Sha224``,` `Sha256``,` `Sha384``, `` Sha512``). தற்போதைய பரிந்துரை `` Sha256``" +" ஐப் பயன்படுத்த வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17638,31 +24850,75 @@ msgid "" "associated signature, the signature would be located at ``/packages/" "HolyGrail-1.0.tar.gz.asc``." msgstr "" +"ஒரு குறிப்பிட்ட விநியோக கோப்பிற்கான சிபிசி கையொப்பம் இருந்தால், அது ** அதே கோப்புடன் " +"அந்தக் கோப்போடு இணைந்து வாழ வேண்டும் `` .ஆச்`` அதில் சேர்க்கப்பட்டுள்ளது. ஆகவே, " +"``/தொகுப்புகள்/ஓலி கிரெயில் -1.0.tar.gz`` கோப்பு இருந்திருந்தால், அதனுடன் தொடர்புடைய " +"கையொப்பம் இருந்தால், கையொப்பம் ``/தொகுப்புகள்/ஓலி கிரெயில் -1.0.tar.gz.asc`` இல் " +"அமைந்திருக்கும்." + +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:84 +#: ../source/specifications/simple-repository-api.rst:111 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:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" +"பண்புக்கூறு மதிப்பில், <மற்றும்> உஉகுமொ முறையே `` & lt; `` மற்றும் `` & gt; `` என " +"குறியிடப்பட வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17670,18 +24926,29 @@ msgid "" "represent a `secure origin `_." msgstr "" +"ஒரு களஞ்சியம் ** ஒரு கோப்பு இணைப்பில் ஒரு `` தரவு-ஆதாரம்`` பண்புக்கூறு சேர்க்கப்படலாம். " +"இந்த பண்புக்கூறு ** ** ஒரு முழுமையான தகுதி வாய்ந்த முகவரி ஆக இருக்க வேண்டும், இது " +"கோப்பின் ஆதாரத்தை அந்த முகவரி இல் காணலாம் என்பதைக் குறிக்கிறது. இந்த முகவரி ** ** ஒரு " +"`பாதுகாப்பான தோற்றத்தை ` _ ஆகியவற்றைக் குறிக்க வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" +"இணைக்கப்பட்ட ஆதாரத்தின் வடிவம் இதில் வரையறுக்கப்பட்டுள்ளது: குறிப்பு: " +"`குறியீட்டு-ஓச்ட்-அட்டெச்டெச்டேசன்ச்`." -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" -msgstr "" +msgstr "இயல்பாக்கப்பட்ட பெயர்கள்" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17690,12 +24957,18 @@ msgid "" "``.``, ``-``, or ``_`` replaced with a single ``-`` character. This can be " "implemented in Python with the ``re`` module::" msgstr "" +"இந்த விவரக்குறிப்பு \"இயல்பாக்கப்பட்ட\" திட்ட பெயரின் கருத்தை குறிக்கிறது. படி: ref: " +"`பெயர் இயல்பாக்குதல் விவரக்குறிப்பு <பெயர்-இயல்பாக்கம்>` ஒரு பெயரில் உள்ள ஒரே " +"செல்லுபடியாகும் எழுத்துக்கள் தபஅஇகு எழுத்துக்கள், தபஅஇகு எண்கள், `` .``, `` -``, மற்றும் " +"`` _``. ```,` `-``, அல்லது` `_`` ஒரு ஒற்றை` `-`` எழுத்துடன் மாற்றப்பட்ட எழுத்துக்களின் " +"அனைத்து ரன்களிலும் பெயர் குறைவாக இருக்க வேண்டும். இதை பைத்தானில் `` ரீ`` தொகுதி :: உடன் " +"செயல்படுத்தலாம்" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" -msgstr "" +msgstr "எளிய பநிஇ க்கு \"யாங்க்\" ஆதரவைச் சேர்ப்பது" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17704,28 +24977,39 @@ msgid "" "\"Yanked\", and should not generally be selected by an installer, except " "under specific scenarios." msgstr "" +"எளிய களஞ்சியத்தில் உள்ள இணைப்புகள் ** ** ஒரு `` தரவு-யாங்கட்`` பண்புக்கூறு இருக்கலாம், " +"இது எந்த மதிப்பும் இல்லாதிருக்கலாம், அல்லது ஒரு தன்னிச்சையான சரம் மதிப்பாக இருக்கலாம். ஒரு" +" `` தரவு-யங்க்` பண்புக்கூறு ** இருப்பு ** இந்த குறிப்பிட்ட இணைப்பால் சுட்டிக்காட்டப்பட்ட " +"கோப்பு \"அசைக்கப்பட்டது\" என்பதைக் குறிக்கிறது, மேலும் குறிப்பிட்ட காட்சிகளின் கீழ் தவிர, " +"ஒரு நிறுவியால் பொதுவாக தேர்ந்தெடுக்கப்படக்கூடாது ." -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" -msgstr "" +msgstr "நிறுவிகள்" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17734,8 +25018,13 @@ msgid "" "original order to install the now yanked file, then it acts as if it had not " "been yanked." msgstr "" +"பயனர்களுக்கு விரும்பத்தக்க பட்டறிவு என்னவென்றால், ஒரு கோப்பை அசைத்தவுடன், ஒரு மனிதர் " +"தற்போது ஒரு கோப்பை நேரடியாக நிறுவ முயற்சிக்கும்போது, அந்தக் கோப்பு நீக்கப்பட்டதைப் போல " +"தோல்வியடைகிறது. இருப்பினும், ஒரு மனிதர் சிறிது நேரத்திற்கு முன்பு அதைச் செய்தபோது, " +"இப்போது ஒரு கணினி இப்போது அசைக்கப்பட்ட கோப்பை நிறுவ அசல் வரிசையை இயந்திரத்தனமாக " +"பின்பற்றி வருகிறது, பின்னர் அது அசைக்கப்படாதது போல் செயல்படுகிறது." -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17744,15 +25033,23 @@ msgid "" "intention above, and that prevents \"new\" dependencies on yanked releases/" "files." msgstr "" +"ஒரு நிறுவி ** ** யங்க் வெளியீடுகளை புறக்கணிக்க வேண்டும், தேர்வு தடைகளை யாங்க்ட் செய்யப்படா" +"த பதிப்பில் நிறைவு அடைய முடியும் என்றால், ** மே ** ஒரு கோரிக்கையை திருப்திப்படுத்த " +"முடியாது என்று பொருள் இருந்தாலும் கூட ஒரு வெளியீட்டைப் பயன்படுத்த மறுக்கலாம். ஒரு " +"செயல்படுத்தல் ** ** மேலே உள்ள நோக்கத்தின் ஆவியைப் பின்பற்றும் ஒரு கொள்கையைத் தேர்வு செய்ய " +"வேண்டும், மேலும் இது வெளியீடுகள்/கோப்புகளை \"புதிய\" சார்புகளைத் தடுக்கிறது." -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17761,16 +25058,25 @@ msgid "" "version specifiers specification ` for things like local " "versions, zero padding, etc." msgstr "" +"`` == `` (``.*``) அல்லது `` === `` போன்ற ஒரு வரம்பை உருவாக்கும் எந்த மாற்றிகளும் " +"இல்லாமல், சரியான பதிப்பிற்கு \"ஊசிகளை\" பொருத்தும் ஒரே கோப்பாக இல்லாவிட்டால், அவை " +"எப்போதும் புறக்கணிக்கப்படுகின்றன. இந்த பதிப்பு விவரக்குறிப்பைப் பொருத்துவது இல்லையெனில் " +"செய்யப்பட வேண்டும்: குறிப்பு: `பதிப்பு விவரக்குறிப்புகள் விவரக்குறிப்பு " +"<பதிப்பு-விவரக்குறிப்புகள்>` உள்ளக பதிப்புகள், சுழிய திணிப்பு போன்றவற்றுக்கு." -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 "" +"ஒரு பூட்டுக் கோப்பு (`` pipfile.lock`` அல்லது `` Poetic.lock`` போன்றவை) நிறுவப்பட " +"வேண்டியதைக் குறிப்பிடும் ஒரே கோப்பாக இல்லாவிட்டால், அவை எப்போதும் புறக்கணிக்கப்படும். இந்த " +"வழக்கில், சில உள்ளீட்டு கோப்பு அல்லது கட்டளையிலிருந்து பூட்டு கோப்பை உருவாக்கும்போது அல்லது" +" புதுப்பிக்கும்போது ** ** பயன்படுத்தப்படக்கூடாது." -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17778,72 +25084,90 @@ msgid "" "of the ``data-yanked`` attribute (if it has a value) to provide more " "specific feedback to the user about why that file had been yanked." msgstr "" +"யங்க் செய்யப்பட்ட கோப்புகளை எப்போது நிறுவ வேண்டும் என்பதை தீர்மானிக்க ஒரு நிறுவி தேர்வு " +"செய்யும் குறிப்பிட்ட மூலோபாயத்தைப் பொருட்படுத்தாமல், ஒரு நிறுவி ** ** ஒரு எச்சரிக்கையை " +"நிறுவ முடிவு செய்யும் போது எச்சரிக்கையை வெளியிட வேண்டும். அந்த எச்சரிக்கை ** ** அந்தக் " +"கோப்பு ஏன் அசைக்கப்பட்டது என்பது குறித்து பயனருக்கு இன்னும் குறிப்பிட்ட கருத்துக்களை வழங்க " +"`` தரவு-யாங்கட்`` பண்புக்கூறின் (அதற்கு மதிப்பு இருந்தால்) மதிப்பைப் பயன்படுத்தலாம்." -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" -msgstr "" +msgstr "கண்ணாடிகள்" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" -msgstr "" +msgstr "கண்ணாடிகள் பொதுவாக இரண்டு வழிகளில் ஒன்றான கோப்புகளை நடத்தலாம்:" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" +"அவர்கள் யங்க் செய்யப்பட்ட கோப்புகளைச் சேர்க்க தேர்வு செய்யலாம், மேலும் கூடுதலாக `` " +"தரவு-யாங்கட்`` பண்புகளையும் பிரதிபலிக்கலாம்." -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" +"கண்ணாடிகள் ** ** அதற்கான `` டேட்டா-யாங்கட்`` பண்புக்கூறையும் பிரதிபலிக்காமல் ஒரு அழிந்த " +"கோப்பை பிரதிபலிக்கக்கூடாது." -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" -msgstr "" +msgstr "பதிப்பு PYPI எளிய பநிஇ" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" -msgstr "" +msgstr "களஞ்சிய பதிப்பை விளக்கும் போது:" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17851,8 +25175,12 @@ msgid "" "to use the API, and can include adding, modifying, or removing existing " "features." msgstr "" +"தற்போதுள்ள வாடிக்கையாளர்கள் பநிஇ ஐ \"அர்த்தமுள்ள வகையில்\" பயன்படுத்த முடியும் என்ற பரந்த " +"பரிந்துரைக்கு அப்பால் பின்னோக்கி பொருந்தாத Vs இணக்கமான மாற்றத்தை குறிப்பாக உருவாக்குவது " +"குறித்து எதிர்கால விவரக்குறிப்புகளின் விருப்பப்படி இது விடப்படுகிறது, மேலும் ஏற்கனவே உள்" +"ள அம்சங்களைச் சேர்ப்பது, மாற்றியமைப்பது அல்லது அகற்றுவது ஆகியவை அடங்கும்." -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17861,49 +25189,84 @@ msgid "" "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:276 +msgid "API Version History" +msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 -msgid "Clients" +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:289 +msgid "Clients" +msgstr "வாடிக்கையாளர்கள்" + +#: ../source/specifications/simple-repository-api.rst:291 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 "" +"எளிய பநிஇ உடன் தொடர்பு கொள்ளும் வாடிக்கையாளர்கள் ** களஞ்சிய பதிப்பிற்கான ஒவ்வொரு " +"பதிலையும் ** உள்நோக்கிக் கொள்ள வேண்டும், மேலும் அந்த தரவு இல்லை என்றால் ** ** இது பதிப்பு " +"1.0 என்று கருத வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" +"ஒரு சிறிய பதிப்பை எதிர்பார்த்ததை விட அதிகமாக எதிர்கொள்ளும்போது, வாடிக்கையாளர்கள் ** ** " +"பொருத்தமான செய்தியுடன் பயனர்களை எச்சரிக்க வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" -msgstr "" +msgstr "எளிய களஞ்சிய பநிஇ இல் விநியோக மெட்டாடேட்டாவை பரிமாறவும்" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17911,8 +25274,13 @@ msgid "" "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:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17923,8 +25291,15 @@ msgid "" "`the base HTML API specification ` specifies the " "GPG signature file's location." msgstr "" +"ஒரு `` தரவு-டிச்ட்-இன்ஃபோ-மெட்டாடேட்டா`` பண்புக்கூறு இருந்தால், களஞ்சியம் ** விநியோகத்தின்" +" கோர் மேனிலை தரவு கோப்பை விநியோகிப்பதன் மூலம் விநியோகத்தின் கோப்பு பெயருடன் சேர்க்கப்பட்ட " +"விநியோகத்தின் முக்கிய மேனிலை தரவு கோப்பை வழங்க வேண்டும். எடுத்துக்காட்டாக, " +"``/கோப்புகள்/விநியோகம் -1.0-py3.none.non.whl`` இல் வழங்கப்படும் ஒரு விநியோகத்தின் " +"முக்கிய மேனிலை தரவு ``/கோப்புகள்/விநியோகம் -1.0-py3.none.non.whl.metadata`` இல் " +"அமைந்திருக்கும். இது எப்படி: ref: `அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு " +"<எளிய-ரெபோசிட்டரி-API-BASE>` சிபிசி கையொப்பக் கோப்பின் இருப்பிடத்தைக் குறிப்பிடுகிறது." -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17933,39 +25308,56 @@ msgid "" "repository **MAY** use ``true`` as the attribute's value if a hash is " "unavailable." msgstr "" +"களஞ்சியமான ** ** கோர் மேனிலை தரவு கோப்பின் ஆசை `` = `` " +"என்ற தொடரியல் பயன்படுத்தி `` = , அங்கு `` `` `` `` " +"``) should be serialized using `JSON `_." msgstr "" +"நிலையான நூலகத்துடன் மட்டுமே பாகுபடுத்தலை இயக்க, இந்த விவரக்குறிப்பு அனைத்து பதில்களையும்" +" (கோப்புகளும் தவிர, மற்றும் உஉகுமொ பதில்கள் இதிலிருந்து: ref: `அடிப்படை உஉகுமொ பநிஇ " +"விவரக்குறிப்பு `) `json ` அதாவது அனைத்து பநிஇ முடிவுப்புள்ளிகளும் " +"(கோப்புகளைத் தவிர) HTTP உள்ளடக்க பேச்சுவார்த்தை மற்றும் சேவையகத்தை அனுமதிக்க மற்றும் " +"சேவையகத்தை அனுமதிக்கும்." -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17984,37 +25381,56 @@ msgid "" "format for the existing features, this spec does not change the existing " "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" +"பதிப்பு இதைக் கடைப்பிடிக்கும்: குறிப்பு: `ஏபிஐ பதிப்பு விவரக்குறிப்பு " +"<எளிய-ரோபோசிட்டரி-ஆப்-ப்ரிசர்னிங்>` வடிவமைப்பு (`` மேசர்.மினோர்``), இது தற்போதுள்ள " +"உஉகுமொ பதில்களை `` 1.0`` என்று வரையறுத்துள்ளது. இந்த விவரக்குறிப்பு பநிஇ இல் புதிய " +"அம்சங்களை அறிமுகப்படுத்தவில்லை என்பதால், இது தற்போதுள்ள அம்சங்களுக்கான வேறுபட்ட சீரியலைசேசன்" +" வடிவமைப்பை விவரிக்கிறது, இந்த விவரக்குறிப்பு தற்போதுள்ள `` 1.0`` பதிப்பை மாற்றாது, " +"அதற்கு பதிலாக அதை சாதொபொகு இல் எவ்வாறு வரிசைப்படுத்துவது என்பதை விவரிக்கிறது." -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 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:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18022,58 +25438,81 @@ msgid "" "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:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" -msgstr "" +msgstr "சாதொபொகு சீரியலைசேசன்" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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 "" +"முகவரி அமைப்பு: ref: `அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு <எளிய-ரெபோசிட்டரி-API-" +"BASE>` இன்னும் பொருந்தும், ஏனெனில் இந்த விவரக்குறிப்பு ஏற்கனவே இருக்கும் பநிஇ க்கு கூடுதல்" +" சீரியலைசேசன் வடிவமைப்பை மட்டுமே சேர்க்கிறது." -#: ../source/specifications/simple-repository-api.rst:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" +"இந்த விவரக்குறிப்பில் விவரிக்கப்பட்டுள்ள அனைத்து சாதொபொகு தொடர் பதில்களுக்கும் பின்வரும் " +"தடைகள் பொருந்தும்:" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" +"அனைத்து சாதொபொகு பதில்களும் * எப்போதும் * ஒரு வரிசை அல்லது பிற வகையை விட சாதொபொகு " +"பொருளாக இருக்கும்." -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" +"அனைத்து சாதொபொகு பதில்களிலும் `` meta.api-version`` விசைக் கொண்டிருக்கும், இது: ref:" +" `ஏபிஐ பதிப்பு விவரக்குறிப்பு <எளிய-ரோபோசிட்டரி-ஆபி-புரிதல்>` `` `மேசர்.மினோர்` " +"பதிப்பு எண், அதே தோல்வி/எச்சரிக்கை சொற்பொருள்கள்:` " +"ஆப்-டெவிங்-டெவிங்-டெவிங்-டி-அப்-டெவிங்-டி-அப்-டெவிங்-டெவிங்-டெவிங்-டெவிங்-டெவிங்-டெவிங்-டெ" +"விங்-டன்-ரெசோரிங்-டோரிங்-டன்-ரெசோரிச்" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" +"இதன் அனைத்து தேவைகளும்: Ref: `அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு ` அவை உஉகுமொ குறிப்பிட்டவை அல்ல." -#: ../source/specifications/simple-repository-api.rst:394 -msgid "Project List" +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." msgstr "" +"ஒரு முன்னணி அடிக்கோடிட்டுக் கொண்ட விசைகள் (எந்த மட்டத்திலும்) குறியீட்டு சேவையக " +"பயன்பாட்டிற்கு தனிப்பட்டதாக ஒதுக்கப்பட்டுள்ளன. அத்தகைய எந்தவொரு விசைக்கும் எதிர்கால தரநிலை " +"ஒரு அர்த்தத்தை ஒதுக்காது." + +#: ../source/specifications/simple-repository-api.rst:439 +msgid "Project List" +msgstr "திட்ட பட்டியல்" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" +"`` மெட்டா``: முன்னர் விவரிக்கப்பட்டுள்ள பொதுவான மறுமொழி மேனிலை தரவு ____." -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" -msgstr "" +msgstr "உதாரணமாக:" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18125,8 +25586,13 @@ msgid "" "relying on it being either non-normalized or normalized is relying on an " "implementation detail of the repository in question." msgstr "" +"`` பெயர்`` புலம் இதிலிருந்து சமம்: ref: `அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு " +"<எளிய-ரெபோசிட்டரி-API-BASE>`, இது இயல்பாக்கப்படாத காட்சி பெயர் அல்லது இயல்பாக்கப்பட்ட " +"பெயர் என்பதைக் குறிப்பிடவில்லை. நடைமுறையில் இந்த விவரக்குறிப்புகளின் வெவ்வேறு செயலாக்கங்கள்" +" இங்கே வித்தியாசமாகத் தேர்வு செய்கின்றன, எனவே அதை இயல்பாக்காத அல்லது இயல்பாக்கப்படுவதை " +"நம்பியிருப்பது கேள்விக்குரிய களஞ்சியத்தின் செயல்படுத்தல் விவரத்தை நம்பியுள்ளது." -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 ` அல்லது இந்த " +"விவரக்குறிப்புக்கு ஏதேனும் குறிப்பிட்ட வரிசைப்படுத்தல் தேவைப்படுகிறது அல்லது " +"வரிசைப்படுத்தல் ஒரு கோரிக்கையிலிருந்து அடுத்ததாக ஒத்துப்போகிறது. மனரீதியாக இது ஒரு " +"தொகுப்பாக சிறந்ததாக கருதப்படுகிறது, ஆனால் சாதொபொகு மற்றும் உஉகுமொ இரண்டுமே " +"தொகுப்புகளைக் கொண்டிருப்பதற்கான செயல்பாட்டைக் கொண்டிருக்கவில்லை." -#: ../source/specifications/simple-repository-api.rst:438 +#: ../source/specifications/simple-repository-api.rst:483 msgid "Project Detail" -msgstr "" +msgstr "திட்ட விவரம்" -#: ../source/specifications/simple-repository-api.rst:440 +#: ../source/specifications/simple-repository-api.rst:485 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 "" +"இந்த முகவரி இன் வடிவம் ``//`` `` `<திட்டம்>` `என்பதன் மூலம் மாற்றப்படுகிறது: " +"ref:` அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு <எளிய-ரோபோசிட்டரி-API-BASE> `அந்த " +"திட்டத்திற்கான இயல்பாக்கப்பட்ட பெயர், எனவே\" சில்லி_வல் \"போன்ற ஒரு திட்டம்` `` `` `` `` " +"`` `` `` `." -#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:490 msgid "" -"This URL must respond with a JSON encoded dictionary that has three keys:" +"This URL must respond with a JSON encoded dictionary that has four keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:492 msgid "``name``: The normalized name of the project." -msgstr "" +msgstr "`` பெயர்``: திட்டத்தின் இயல்பாக்கப்பட்ட பெயர்." -#: ../source/specifications/simple-repository-api.rst:448 +#: ../source/specifications/simple-repository-api.rst:493 msgid "" "``files``: A list of dictionaries, each one representing an individual file." msgstr "" +"`` கோப்புகள்``: அகராதிகளின் பட்டியல், ஒவ்வொன்றும் ஒரு தனிப்பட்ட கோப்பைக் குறிக்கும்." -#: ../source/specifications/simple-repository-api.rst:451 -msgid "Each individual file dictionary has the following keys:" +#: ../source/specifications/simple-repository-api.rst:495 +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:453 -msgid "``filename``: The filename that is being represented." +#: ../source/specifications/simple-repository-api.rst:502 +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:454 -msgid "``url``: The URL that the file can be fetched from." +#: ../source/specifications/simple-repository-api.rst:509 +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:517 +msgid "The ``versions`` key was added with API version 1.1." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:519 +msgid "Each individual file dictionary has the following keys:" +msgstr "ஒவ்வொரு தனிப்பட்ட கோப்பு அகராதியிலும் பின்வரும் விசைகள் உள்ளன:" + +#: ../source/specifications/simple-repository-api.rst:521 +msgid "``filename``: The filename that is being represented." +msgstr "`` கோப்பு பெயர்``: பிரதிநிதித்துவப்படுத்தப்படும் கோப்பு பெயர்." + +#: ../source/specifications/simple-repository-api.rst:522 +msgid "``url``: The URL that the file can be fetched from." +msgstr "`` url``: கோப்பிலிருந்து பெறக்கூடிய முகவரி." + +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18182,15 +25692,23 @@ msgid "" "them, or nothing at all). These hash names **SHOULD** always be normalized " "to be lowercase." msgstr "" +"`` ஆச்கள்``: கோப்பின் ஃச் குறியிடப்பட்ட டைசெச்டுக்கு ஒரு ஆச் பெயரை மேப்பிங் செய்வது ஒரு " +"அகராதி. பல ஆச்களைச் சேர்க்கலாம், மேலும் பல ஆச்களை என்ன செய்வது என்று வாடிக்கையாளரின் " +"தீர்மானிக்க வேண்டும் (இது அவை அனைத்தையும் அல்லது அவற்றின் துணைக்குழுவை சரிபார்க்கக்கூடும், " +"அல்லது ஒன்றும் இல்லை). இந்த ஆச் பெயர்கள் ** ** எப்போதும் சிறிய எழுத்துக்களாக இயல்பாக்கப்பட " +"வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18199,53 +25717,90 @@ msgid "" "**SHOULD** always be included. At the time of this spec, ``sha256`` " "specifically is recommended." msgstr "" +"இயல்பாக, எந்த ஆச் வழிமுறையும் மூலம் கிடைக்கும்: PY: MOD: `Hashlib` (குறிப்பாக ஏதேனும் " +"தேர்ச்சி பெறக்கூடியது: PY: FUNC:` Hashlib.new () `மற்றும் கூடுதல் அளவுருக்கள் " +"தேவையில்லை) ஆசேச் அகராதிக்கு ஒரு திறவுகோலாகப் பயன்படுத்தப்படலாம். இருந்து குறைந்தது ஒரு" +" பாதுகாப்பான வழிமுறை: PY: தரவு: `hashlib.algorithms_ugranaled` ** ** எப்போதும் " +"சேர்க்கப்பட வேண்டும். இந்த விவரக்குறிப்பின் போது, `` சா 256`` குறிப்பாக " +"பரிந்துரைக்கப்படுகிறது." -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 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 "" +"``-பைதான் தேவை ``: ஒரு ** விருப்ப ** விசை: ref: " +"`கோர்-மெட்டாடேட்டா-முன்நிபந்தனைகள்-மெட்டாடேட்டா புலம். இது இருக்கும் இடத்தில், நிறுவி " +"கருவிகள் ** ** தேவையை நிறைவு செய்யாத பைதான் பதிப்பில் நிறுவும் போது பதிவிறக்கத்தை " +"புறக்கணிக்க வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" +"சேவையகங்கள் மேனிலை தரவு கோப்பின் ஆச்களை முடிந்தால் கிடைக்கச் செய்ய பரிந்துரைக்கப்படுகிறது." + +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18253,8 +25808,13 @@ msgid "" "repository-api-base>` (``{file_url}.asc``). If this key does not exist, then " "the signature may or may not exist." msgstr "" +"`` gpg-sig``: கோப்பில் தொடர்புடைய சிபிசி கையொப்பம் உள்ளதா இல்லையா என்பதைக் குறிக்க ஒரு " +"பூலியன் செயல்படும் ஒரு ** விருப்ப ** விசை. கையொப்பக் கோப்பிற்கான முகவரி இதில் " +"குறிப்பிடப்பட்டுள்ளதைப் பின்பற்றுகிறது: ref: `அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு " +"` (`{file_url} .asc``). இந்த விசை இல்லை என்றால், " +"கையொப்பம் இருக்கலாம் அல்லது இல்லாமல் இருக்கலாம்." -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18264,16 +25824,60 @@ msgid "" "been \"Yanked\" as per :ref:`the API yank specification `." msgstr "" +"`` yanked``: ஒரு ** விருப்பமான ** விசை, இது கோப்பு அலறப்பட்டதா என்பதைக் குறிக்க ஒரு " +"பூலியனாக இருக்கலாம், அல்லது காலியாக இல்லாதது, ஆனால் இல்லையெனில் தன்னிச்சையானது, ஒரு " +"குறிப்பிட்ட காரணத்துடன் ஒரு கோப்பு அலறப்பட்டிருப்பதைக் குறிக்க. `` யங்க் செய்யப்பட்ட`` " +"விசையானது ஒரு உண்மை மதிப்பாக இருந்தால், அது ** ** ** `` url`` புலத்தால் " +"சுட்டிக்காட்டப்பட்ட கோப்பு \"அசைக்கப்பட்டுள்ளது\" என்பதைக் குறிக்கும் வகையில் விளக்கப்பட " +"வேண்டும்: ref: `api yank விவரக்குறிப்பு <எளிய-ச்பிரோபோசிட்டரி-அபி-யாங்க்>`." + +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:606 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 "" +"`` ஆதாரம்``: ஒரு ** விருப்ப ** விசை, இது இருந்தால் ** ** ** ஒரு சாதொபொகு சரம் " +"அல்லது `` null``. `` Null`` இல்லையென்றால், அது ** ** கோப்பின் தொடர்புடைய ஆதாரத்திற்கு " +"ஒரு முகவரி ஆக இருக்க வேண்டும், இதில் `` தரவு-முன்னேற்றம்`` போன்ற விதிமுறைகள்: rew: " +"`அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு `." -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 `அல்லது இந்" +"த விவரக்குறிப்புக்கு ஏதேனும் குறிப்பிட்ட வரிசைப்படுத்தல் தேவைப்படுகிறது அல்லது " +"வரிசைப்படுத்துதல் ஒரு கோரிக்கையிலிருந்து அடுத்ததாக ஒத்துப்போகிறது. மனரீதியாக இது ஒரு " +"தொகுப்பாக சிறந்ததாக கருதப்படுகிறது, ஆனால் சாதொபொகு மற்றும் உஉகுமொ இரண்டுமே " +"தொகுப்புகளைக் கொண்டிருப்பதற்கான செயல்பாட்டைக் கொண்டிருக்கவில்லை." -#: ../source/specifications/simple-repository-api.rst:552 +#: ../source/specifications/simple-repository-api.rst:658 msgid "Content-Types" -msgstr "" +msgstr "உள்ளடக்க வகைகள்" -#: ../source/specifications/simple-repository-api.rst:554 +#: ../source/specifications/simple-repository-api.rst:660 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:558 +#: ../source/specifications/simple-repository-api.rst:664 msgid "The structure of this content type will be:" -msgstr "" +msgstr "இந்த உள்ளடக்க வகையின் கட்டமைப்பு:" -#: ../source/specifications/simple-repository-api.rst:564 +#: ../source/specifications/simple-repository-api.rst:670 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:569 +#: ../source/specifications/simple-repository-api.rst:675 msgid "Which means that for the existing 1.0 API, the content types would be:" -msgstr "" +msgstr "இதன் பொருள் தற்போதுள்ள 1.0 பநிஇ க்கு, உள்ளடக்க வகைகள் இருக்கும்:" -#: ../source/specifications/simple-repository-api.rst:571 +#: ../source/specifications/simple-repository-api.rst:677 msgid "**JSON:** ``application/vnd.pypi.simple.v1+json``" -msgstr "" +msgstr "**JSON:** ``application/vnd.pypi.simple.v1+json``" -#: ../source/specifications/simple-repository-api.rst:572 +#: ../source/specifications/simple-repository-api.rst:678 msgid "**HTML:** ``application/vnd.pypi.simple.v1+html``" -msgstr "" +msgstr "** html: ** `` பயன்பாடு/vnd.pypi.simple.v1+html``" -#: ../source/specifications/simple-repository-api.rst:574 +#: ../source/specifications/simple-repository-api.rst:680 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 " @@ -18327,20 +25945,28 @@ msgid "" "recommended however, that clients be explicit about what versions they " "support." msgstr "" +"மேற்கூறியவற்றைத் தவிர, ஒரு சிறப்பு \"மேவு\" பதிப்பு `` சமீபத்திய`` என்று பெயரிடப்பட்டது" +", இதன் நோக்கம் வாடிக்கையாளர்களுக்கு முழுமையான அண்மைக் கால பதிப்பைக் கோர அனுமதிப்பதாகும், " +"அந்த பதிப்பு என்ன என்பதை நேரத்திற்கு முன்பே தெரிந்து கொள்ளாமல். எவ்வாறாயினும், " +"வாடிக்கையாளர்கள் அவர்கள் எந்த பதிப்புகளை ஆதரிக்கிறார்கள் என்பது குறித்து வெளிப்படையாக இருக்" +"க பரிந்துரைக்கப்படுகிறது." -#: ../source/specifications/simple-repository-api.rst:579 +#: ../source/specifications/simple-repository-api.rst:685 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 "" +"தற்போதுள்ள வாடிக்கையாளர்களை ஆதரிக்க: Ref: `அடிப்படை உஉகுமொ பநிஇ விவரக்குறிப்பு " +"` `உரை/HTML`` உள்ளடக்க வகையைப் பயன்படுத்த பநிஇ பதில்கள்" +", இந்த விவரக்குறிப்பு` `` உரை/html`` `` `` `` `conternt." -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" -msgstr "" +msgstr "பதிப்பு + வடிவமைப்பு தேர்வு" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18348,74 +25974,104 @@ msgid "" "version to the API can be added without disrupting existing clients " "expecting the previous API version." msgstr "" +"இப்போது பல சாத்தியமான சீரியலைசேசன்கள் இருப்பதால், வாடிக்கையாளர்களுக்கு அவர்கள் புரிந்து " +"கொள்ளக்கூடிய சீரியலைசேசன் வடிவங்களைக் குறிக்க அனுமதிக்க எங்களுக்கு ஒரு வழிமுறை தேவை. " +"கூடுதலாக, முந்தைய பநிஇ பதிப்பை எதிர்பார்க்கும் வாடிக்கையாளர்களுக்கு இடையூறு " +"விளைவிக்காமல் பநிஇ க்கு சாத்தியமான புதிய முக்கிய பதிப்பைச் சேர்க்க முடிந்தால் அது நன்மை " +"பயக்கும்." -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" +"இதை இயக்க, இந்த விவரக்குறிப்பு HTTP இன் `சேவையகத்தால் இயக்கப்படும் உள்ளடக்க பேச்சுவார்த்தை " +" _ _." -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 msgid "" "The client makes an HTTP request containing an ``Accept`` header listing all " "of the version+format content types that they are able to understand." msgstr "" +"கிளையன்ட் ஒரு `` ஏற்றுக்கொள்` தலைப்பு கொண்ட ஒரு HTTP கோரிக்கையை அவர்கள் புரிந்து " +"கொள்ளக்கூடிய அனைத்து பதிப்பு+வடிவமைப்பு உள்ளடக்க வகைகளையும் பட்டியலிடுகிறது." -#: ../source/specifications/simple-repository-api.rst:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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 "" +"`` ஏற்றுக்கொள்` தலைப்பில் உள்ள எந்த உள்ளடக்க வகைகளையும் சேவையகம் ஆதரிக்கவில்லை என்றால், " +"அவர்கள் எவ்வாறு பதிலளிக்க வேண்டும் என்பதற்கான 3 வெவ்வேறு விருப்பங்களுக்கு இடையில் அவர்கள் " +"தேர்வு செய்ய முடியும்:" -#: ../source/specifications/simple-repository-api.rst:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 msgid "" "Return a HTTP ``406 Not Acceptable`` response to indicate that none of the " "requested content types were available, and the server was unable or " "unwilling to select a default content type to respond with." msgstr "" +"கோரப்பட்ட உள்ளடக்க வகைகள் எதுவும் கிடைக்கவில்லை என்பதைக் குறிக்க ஒரு HTTP `` 406 " +"ஏற்றுக்கொள்ள முடியாதது `` பதிலைத் தரவும், மேலும் பதிலளிக்க இயல்புநிலை உள்ளடக்க வகையைத் " +"தேர்ந்தெடுக்க சேவையகம் முடியவில்லை அல்லது விரும்பவில்லை." -#: ../source/specifications/simple-repository-api.rst:613 +#: ../source/specifications/simple-repository-api.rst:719 msgid "" "Return a HTTP ``300 Multiple Choices`` response that contains a list of all " "of the possible responses that could have been chosen." msgstr "" +"ஒரு HTTP `` 300 பல தேர்வுகள்` `பதிலைத் தரவும், இது தேர்ந்தெடுக்கப்பட்ட சாத்தியமான " +"அனைத்து பதில்களின் பட்டியலையும் கொண்டுள்ளது." -#: ../source/specifications/simple-repository-api.rst:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18425,8 +26081,15 @@ msgid "" "response would likely just be treated the same as a ``406 Not Acceptable`` " "error." msgstr "" +"எவ்வாறாயினும், ஒரு `` 300 பல தேர்வுகள்` `பதிலை எவ்வாறு விளக்க முடியும் என்பதற்கான " +"நிலையான வடிவம் இல்லாததால், அந்த விருப்பத்தைப் பயன்படுத்துவதில் இருந்து சேவையகங்களை இந்த " +"விவரக்குறிப்புகள் மிகவும் ஊக்கப்படுத்துகின்றன, ஏனெனில் வாடிக்கையாளர்களுக்கு கோரிக்கைக்கு " +"வேறு உள்ளடக்க வகையைப் புரிந்துகொள்வதற்கும் தேர்ந்தெடுப்பதற்கும் வழி இருக்காது. கூடுதலாக, " +"வாடிக்கையாளர் * எப்படியிருந்தாலும் வேறு உள்ளடக்க வகையைப் புரிந்து கொள்ள முடியும் என்பது " +"சாத்தியமில்லை, எனவே சிறந்த முறையில் இந்த பதில் `` 406 ஏற்றுக்கொள்ள முடியாத `` பிழை " +"போலவே கருதப்படும்." -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18434,34 +26097,44 @@ msgid "" "pypi.simple.latest+json`` request that returns a ``v1.x`` response should " "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" +"இந்த ச்பெக் ** ** மேவு பதிப்பு `` சமீபத்திய`` பயன்படுத்தப்பட்டால், சேவையகம் ** பதிலில் உள்" +"ள உண்மையான பதிப்பிற்கான உள்ளடக்க வகையுடன் ** பதிலளிக்க வேண்டும் (அதாவது ஒரு `` " +"ஏற்றுக்கொள்ளுங்கள்: பயன்பாடு/vnd.pypi.simple.latest+json` `` `` `` `` `` `` `` ` ``" +" பயன்பாடு/vnd.pypi.simple.v1+json```)." -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" -msgstr "" +msgstr "`` $ type/$ subtype``" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" -msgstr "" +msgstr "`` $ type/*``" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" -msgstr "" +msgstr "``*/*``" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18470,8 +26143,14 @@ msgid "" "header's `quality value `_ syntax." msgstr "" +"`` ஏற்றுக்கொள்` தலைப்பில் பட்டியலிடப்பட்ட உள்ளடக்க வகைகளின் வரிசையில் எந்த குறிப்பிட்ட " +"அர்த்தமும் இல்லை, மேலும் சேவையகம் ** ** அவை அனைத்தும் பதிலளிக்க சமமாக செல்லுபடியாகும் " +"என்று கருத வேண்டும். ஒரு வாடிக்கையாளர் அவர்கள் ஒரு குறிப்பிட்ட உள்ளடக்க வகையை மற்றொன்றுக்கு" +" மேல் விரும்புகிறார்கள் என்பதைக் குறிப்பிட விரும்பினால், அவர்கள் `` ஏற்றுக்கொள் `தலைப்பின்` " +"தர மதிப்பு " +"_ தொடரியல் பயன்படுத்தலாம்." -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18480,16 +26159,24 @@ msgid "" "lower quality, and any entry without a quality present will default to a " "quality of ``1``." msgstr "" +"ஒரு கிளையன்ட் ஒரு குறிப்பிட்ட நுழைவுக்கான முன்னுரிமையை அவர்களின் `` ஏற்றுக்கொள்` " +"`தலைப்பில் குறிப்பிட அனுமதிக்கிறது,` `; q =` `தொடர்ந்து` `0`` மற்றும்` 1`` உள்ளடக்கிய, " +"3 தசம இலக்கங்களுடன். இந்த மதிப்பை விளக்கும் போது, உயர் தரத்துடன் கூடிய நுழைவுக்கு குறைந்" +"த தரத்துடன் நுழைவதை விட முன்னுரிமை உள்ளது, மேலும் தகுதி இல்லாத எந்தவொரு நுழைவும் `` " +"1`` தரத்திற்கு இயல்புநிலையாக இருக்கும்." -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18499,23 +26186,34 @@ msgid "" "pip/blob/cf3696a81b341925f82f20cb527e656176987565/src/pip/_internal/index/" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" +"பநிஇ கோரிக்கையிலிருந்து அவர்கள் பெற்ற பதிலின் உள்ளடக்க வகையை தீர்மானிக்க " +"வாடிக்கையாளர்களுக்கு உதவ, இந்த விவரக்குறிப்புகள் எப்போதும் பதிலின் உள்ளடக்க வகையைக் " +"குறிக்கும் `` உள்ளடக்க-வகை`` தலைப்பு ஆகியவற்றை எப்போதும் சேர்க்க வேண்டும். இது தொழில்நுட்ப " +"ரீதியாக பின்னோக்கி பொருந்தாத மாற்றமாகும், இருப்பினும் நடைமுறையில் `பிஐபி இந்த தேவையை " +"அமல்படுத்துகிறது _" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" +"ஒரு வாடிக்கையாளர் எவ்வாறு செயல்பட முடியும் என்பதற்கான எடுத்துக்காட்டு போல் இருக்கும்:" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" -msgstr "" +msgstr "மாற்று பேச்சுவார்த்தை வழிமுறைகள்" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18523,40 +26221,58 @@ msgid "" "mechanism may not be sufficient. For those cases this spec has alternative " "negotiation mechanisms that may *optionally* be used instead." msgstr "" +"HTTP இன் உள்ளடக்க பேச்சுவார்த்தையைப் பயன்படுத்துவது ஒரு கிளையன்ட் மற்றும் சேவையகத்திற்கான " +"ஒருங்கிணைப்புக்கான நிலையான வழியாக கருதப்படுகிறது, வாடிக்கையாளர் புரிந்து கொள்ளக்கூடிய " +"ஒரு HTTP பதிலைப் பெறுகிறார் என்பதை உறுதிப்படுத்த, அந்த வழிமுறை போதுமானதாக இல்லாத " +"சூழ்நிலைகள் உள்ளன. அந்த நிகழ்வுகளுக்கு இந்த விவரக்குறிப்பில் மாற்று பேச்சுவார்த்தை " +"வழிமுறைகள் உள்ளன, அவை அதற்கு பதிலாக * விருப்பமாக * பயன்படுத்தப்படலாம்." -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" -msgstr "" +msgstr "முகவரி அளவுரு" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 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:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18565,27 +26281,38 @@ msgid "" "server-driven content negotiation typically has (e.g. ``406 Not Available``, " "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" +"ஒரு சேவையகம் இந்த அளவுருவை செயல்படுத்தும்போது, அது ** கிளையண்டின் `` ஏற்றுக்கொள்` " +"தலைப்பில் உள்ள எந்தவொரு மதிப்புகளையும் விட ** முன்னுரிமை பெற வேண்டும், மேலும் சேவையகம் " +"கோரப்பட்ட வடிவமைப்பை ஆதரிக்கவில்லை என்றால், அது `` ஏற்றுக்கொள்` தலைப்பு `` `ஏற்றுக்கொள்ளும் " +"எந்தவொரு பிழையும் தேர்வு செய்யத் தேர்வுசெய்யலாம், அல்லது நிலையான சேவையக பேச்சுவார்த்தை " +"பொதுவாகக் கிடைக்காது,` 406, திரும்புவதற்கான இயல்புநிலை வகை)." -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" -msgstr "" +msgstr "இறுதிப்புள்ளி உள்ளமைவு" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 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:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18594,20 +26321,30 @@ msgid "" "client makes a request using the ``Accept`` header, the server can ignore it " "and return the content type that corresponds to that endpoint." msgstr "" +"இதை இயக்க, ஒரு சேவையகம் பல இறுதிப் புள்ளிகளை உருவாக்க வேண்டும் (உதாரணமாக, " +"``/எளிய/v1+html/`` மற்றும்/அல்லது `/simple/v1+json/` `) அவர்கள் ஆதரிக்க விரும்பும் " +"ஒவ்வொரு பதிப்பிற்கும். அந்த இறுதிப்புள்ளியின் கீழ், உள்ளடக்க வகைகளின் ஒன்றை (அல்லது " +"துணைக்குழு) மட்டுமே ஆதரிக்கும் தங்கள் களஞ்சியத்தின் நகலை அவர்கள் வழங்க முடியும். `` " +"ஏற்றுக்கொள்` தலைப்பைப் பயன்படுத்தி ஒரு கிளையன்ட் கோரிக்கையைச் செய்யும்போது, சேவையகம் அதைப் " +"புறக்கணித்து, அந்த இறுதிப் புள்ளியுடன் ஒத்த உள்ளடக்க வகையை திருப்பித் தரலாம்." -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" -msgstr "" +msgstr "TUF உதவி - PEP 458" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18617,16 +26354,25 @@ msgid "" "handle the fact that a target could have multiple different representations " "that all hash differently." msgstr "" +". ஒரு எளிய பநிஇ களஞ்சியத்திற்கு, இலக்கு பாதை எங்கள் பநிஇ இன் வேர் (எ.கா. ``/எளிய/`` " +"பைபியில்). ஒரு நிலையான HTTP கிளையண்டைப் பயன்படுத்துவதற்குப் பதிலாக ஒரு TUF கிளையண்டைப்" +" பயன்படுத்தி பநிஇ ஐ அணுகும்போது இது சவால்களை உருவாக்குகிறது, ஏனெனில் ஒரு இலக்கு " +"அனைத்து வித்தியாசமான பிரதிநிதித்துவங்களைக் கொண்டிருக்கக்கூடும் என்ற உண்மையை TUF கிளையன்ட் " +"கையாள முடியாது." -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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` does not specify what the target பாதை should be க்கு the Simple பநி" +"இ, but TUF requires that the target paths be \"file-like\", in மற்றொன்று " +"words, a பாதை like ``simple/PROJECT/`` is not acceptable, because it " +"technically பிரிவகம் பெறுநர் a directory." -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18634,16 +26380,25 @@ msgid "" "be fetched. This same thing can hold true for other aspects of the actual " "HTTP request, such as the ``Accept`` header." msgstr "" +"சேமிக்கும் கருணை என்னவென்றால், எளிய ஏபிஐயிலிருந்து பெறப்பட்ட முகவரி உடன் பொருந்துவதற்கு " +"இலக்கு பாதையில் * இல்லை * இல்லை, மேலும் இது ஒரு சிகிலாக இருக்கக்கூடும், பெறும் குறியீடு" +" பெறப்பட வேண்டிய உண்மையான முகவரி ஆக மாற்றுவது எப்படி என்று தெரியும். `` ஏற்றுக்கொள்` " +"தலைப்பு போன்ற உண்மையான HTTP கோரிக்கையின் பிற அம்சங்களுக்கும் இதே சேதி உண்மையாக இருக்க " +"முடியும்." -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 "" +"இறுதியில் ஒரு கோப்பகத்திற்கு ஒரு கோப்பகத்தை எவ்வாறு வரைபடமாக்குவது என்பதைக் " +"கண்டுபிடிப்பது இந்த விவரக்குறிப்பிற்கான வாய்ப்புக்கு அப்பாற்பட்டது (ஆனால் இது: PEP: `458`)" +", மேலும் இந்த விவரக்குறிப்பு இதை எவ்வாறு பிரதிநிதித்துவப்படுத்துவது என்பது பற்றி ஒரு " +"முடிவை எடுக்கிறது: PEP:` 458` மேனிலை தரவு." -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18652,29 +26407,43 @@ msgid "" "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 "" +"இருப்பினும், PIP க்கு எதிரான தற்போதைய WIP கிளை செயல்படுத்த முயற்சிக்கிறது: PEP: " +"`458`` `எளிய/திட்டம்/INDEX.HTML`` போன்ற இலக்கு பாதையைப் பயன்படுத்துகிறது. `` " +"எளிய/திட்டம்/vnd.pypi.simple.vn.format`` போன்ற ஒன்றைப் பயன்படுத்தி பநிஇ பதிப்பு மற்றும்" +" சீரியலைசேசன் வடிவமைப்பைச் சேர்க்க இதை மாற்றியமைக்கலாம். எனவே V1 உஉகுமொ வடிவம் `` " +"எளிய/திட்டம்/vnd.pypi.simple.v1.html`` மற்றும் V1 சாதொபொகு வடிவம் `` " +"எளிய/திட்டம்/vnd.pypi.simple.v1.json`` ஆக இருக்கும்." -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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 "" +"இந்த விசயத்தில், `` உரை/html`` என்பது `` பயன்பாடு/vnd.pypi.simple.v1+html`` க்கு " +"ஒரு மாற்றுப்பெயராக இருப்பதால், இது மிகவும் வெளிப்படையான பெயரை இயல்பாக்குவது மிகவும் " +"அர்த்தமுள்ளதாக இருக்கும்." -#: ../source/specifications/simple-repository-api.rst:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 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:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18682,33 +26451,47 @@ msgid "" "API provide guardrails that attempt to push clients into making the best " "choices it can." msgstr "" +"இந்த முடிவுகள் ஒரு ஏபிஐயின் புதிய பதிப்பிற்கு நகர்த்தக்கூடிய கோரிக்கைகளின் எண்ணிக்கையை " +"அதிகரிக்க தேர்வு செய்யப்பட்டுள்ளன, அதே நேரத்தில் மிகப் பெரிய அளவிலான பொருந்தக்கூடிய " +"தன்மையைப் பராமரிக்கின்றன. கூடுதலாக, அவர்கள் பநிஇ வழங்கும் காவலாளிகளைப் பயன்படுத்தி செய்ய " +"முயற்சித்தனர், இது வாடிக்கையாளர்களை தன்னால் முடிந்த சிறந்த தேர்வுகளைச் செய்ய " +"முயற்சிக்கிறது." -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" -msgstr "" +msgstr "சேவையகங்கள் பரிந்துரைக்கப்படுகிறது:" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can, or at least as long " "as they're receiving non trivial traffic that uses the HTML responses." msgstr "" +"இந்த விவரக்குறிப்பில் விவரிக்கப்பட்டுள்ள அனைத்து 3 உள்ளடக்க வகைகளையும் ஆதரிக்கவும், " +"சேவையகத்தால் இயக்கப்படும் உள்ளடக்க பேச்சுவார்த்தையைப் பயன்படுத்தி, அவை நியாயமான முறையில் " +"முடிந்தவரை, அல்லது குறைந்தபட்சம் உஉகுமொ பதில்களைப் பயன்படுத்தும் கீழான போக்குவரத்தை அவர்கள் " +"பெறும் வரை." -#: ../source/specifications/simple-repository-api.rst:846 +#: ../source/specifications/simple-repository-api.rst:952 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 "" +"ஒரு `` ஏற்றுக்கொள்` `தலைப்பை எதிர்கொள்ளும்போது, அது எவ்வாறு செயல்பட வேண்டும் என்று தெரிந்" +"த எந்த உள்ளடக்க வகைகளும் இல்லை, சேவையகம் ஒருபோதும்` `300 பல தேர்வு`` பதிலைத் தரக்கூடாது" +", அதற்கு பதிலாக` `406 ஏற்றுக்கொள்ள முடியாதது`` பதிலைத் தரும்." -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 msgid "" "However, if choosing to use the endpoint configuration, you should prefer to " "return a ``200 OK`` response in the expected content type for that endpoint." msgstr "" +"இருப்பினும், எண்ட்பாயிண்ட் உள்ளமைவைப் பயன்படுத்தத் தேர்வுசெய்தால், அந்த இறுதிப்புள்ளிக்கு " +"எதிர்பார்க்கப்படும் உள்ளடக்க வகையில் `` 200 சரி`` பதிலைத் தர வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18716,250 +26499,137 @@ msgid "" "requests as well as any quality priority values they have expressed, and it " "should only use the ``text/html`` content type as a last resort." msgstr "" +"ஏற்றுக்கொள்ளக்கூடிய பதிப்பைத் தேர்ந்தெடுக்கும்போது, கிளையன்ட் ஆதரிக்கும் மிக உயர்ந்த பதிப்பை " +"சேவையகம் தேர்வு செய்ய வேண்டும், மிகவும் வெளிப்படையான/அம்சம் கொண்ட சீரியலைசேசன் வடிவத்துடன்" +", கிளையன்ட் கோரிக்கைகளின் தனித்துவத்தையும், அவர்கள் வெளிப்படுத்திய எந்தவொரு தரமான " +"முன்னுரிமை மதிப்புகளையும் கணக்கில் எடுத்துக்கொள்கிறது, மேலும் இது `` உரை/HTML`` உள்ளடக்" +"க வகையை கடைசி முயற்சியாக மட்டுமே பயன்படுத்த வேண்டும்." -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" -msgstr "" +msgstr "வாடிக்கையாளர்கள் என்று பரிந்துரைக்கப்படுகிறது:" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 msgid "" "Support all 3 content types described in this spec, using server-driven " "content negotiation, for as long as they reasonably can." msgstr "" +"இந்த விவரக்குறிப்பில் விவரிக்கப்பட்டுள்ள அனைத்து 3 உள்ளடக்க வகைகளையும் ஆதரிக்கவும், " +"சேவையகத்தால் இயக்கப்படும் உள்ளடக்க பேச்சுவார்த்தையைப் பயன்படுத்தி, அவை நியாயமான முறையில் " +"முடிந்தவரை." -#: ../source/specifications/simple-repository-api.rst:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " -"that you support." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:868 -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:874 -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:878 -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:881 -msgid "" -"Check the ``Content-Type`` of the response and ensure it matches something " -"that you were expecting." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." +"that you support." msgstr "" +"`` ஏற்றுக்கொள்` `தலைப்பைக் கட்டும் போது, நீங்கள் ஆதரிக்கும் அனைத்து உள்ளடக்க வகைகளையும் " +"சேர்க்கவும்." -#: ../source/specifications/simple-repository-api.rst:958 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." +"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:964 +#: ../source/specifications/simple-repository-api.rst:980 msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." +"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 "" +"இந்த பரிந்துரைக்கு ஒரு விதிவிலக்கு என்னவென்றால், நீங்கள் * `உரை/HTML`` உள்ளடக்க வகைக்கு " +"ஒரு` `; q = 0.01`` மதிப்பை நீங்கள் * சேர்க்க வேண்டும் என்று பரிந்துரைக்கப்படுகிறது, இது " +"நீங்கள் கோரும் ஒரே உள்ளடக்க வகையாக இல்லாவிட்டால்." -#: ../source/specifications/simple-repository-api.rst:973 +#: ../source/specifications/simple-repository-api.rst:984 msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." +"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:980 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." +"Check the ``Content-Type`` of the response and ensure it matches something " +"that you were expecting." msgstr "" +"பதிலின் `` உள்ளடக்க-வகை`` ஐச் சரிபார்த்து, நீங்கள் எதிர்பார்த்த ஒன்றோடு பொருந்துகிறது என்பதை" +" உறுதிப்படுத்தவும்." -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" -msgstr "" +msgstr "செப்டம்பர் 2015: உஉகுமொ வடிவமைப்பின் ஆரம்ப வடிவம், இல்: PEP: `503`" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" +"சூலை 2016: ஒரு புதுப்பிப்பில்-பைதான் மேனிலை தரவு தேவைப்படுகிறது: PEP: `503`" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" -msgstr "" +msgstr "மே 2019: \"யாங்க்\" உதவி, இல்: பெப்: `592`" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 msgid "" "July 2020: API versioning convention and metadata, and declaring the HTML " "format as API v1, in :pep:`629`" msgstr "" +"சூலை 2020: பநிஇ பதிப்பு மாநாடு மற்றும் மேனிலை தரவு, மற்றும் உஉகுமொ வடிவமைப்பை பநிஇ " +"V1 என அறிவித்தல், IN: PEP: `629`" -#: ../source/specifications/simple-repository-api.rst:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" +"மே 2021: ஒரு தொகுப்பிலிருந்து சுயாதீனமாக தொகுப்பு மெட்டாடேட்டாவை வழங்குதல், IN: PEP: " +"`658`" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 msgid "" "May 2022: initial form of the JSON format, with a mechanism for clients to " "choose between them, and declaring both formats as API v1, in :pep:`691`" msgstr "" +"மே 2022: சாதொபொகு வடிவமைப்பின் ஆரம்ப வடிவம், வாடிக்கையாளர்களுக்கு இடையே தேர்வு " +"செய்வதற்கான ஒரு பொறிமுறையுடன், இரு வடிவங்களையும் பநிஇ V1 என அறிவித்தல், IN: PEP: " +"`691`" -#: ../source/specifications/simple-repository-api.rst:999 +#: ../source/specifications/simple-repository-api.rst:1004 msgid "" "October 2022: project versions and file size and upload-time in the JSON " "format, in :pep:`700`" msgstr "" +"அக்டோபர் 2022: திட்ட பதிப்புகள் மற்றும் கோப்பு அளவு மற்றும் சாதொபொகு வடிவத்தில் பதிவேற்ற " +"நேரம், IN: PEP: `700`" -#: ../source/specifications/simple-repository-api.rst:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" +"சூன் 2023: ஒரு தொகுப்பிலிருந்து சுயாதீனமாக தொகுப்பு மெட்டாடேட்டாவை வழங்கும் புலத்தை " +"மறுபெயரிடுதல், IN: PEP: `714`" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" msgstr "" +"நவம்பர் 2024: உஉகுமொ மற்றும் சாதொபொகு வடிவங்களில் ஆதார மேனிலை தரவு, IN: PEP: `740`" #: ../source/specifications/source-distribution-format.rst:6 msgid "Source distribution format" -msgstr "" +msgstr "மூல விநியோக வடிவம்" #: ../source/specifications/source-distribution-format.rst:8 msgid "" @@ -18968,6 +26638,9 @@ msgid "" "The layout of such a distribution was originally specified in :pep:`517` and " "is formally documented here." msgstr "" +"மூல விநியோக வடிவமைப்பின் தற்போதைய நிலையான வடிவம் A: FILE: `pyproject.toml` கோப்பில்" +" விநியோக காப்பகத்தில் அடையாளம் காணப்படுகிறது. அத்தகைய விநியோகத்தின் தளவமைப்பு முதலில் " +"குறிப்பிடப்பட்டுள்ளது: PEP: `517` மற்றும் முறையாக இங்கே ஆவணப்படுத்தப்பட்டுள்ளது." #: ../source/specifications/source-distribution-format.rst:13 msgid "" @@ -18979,16 +26652,22 @@ msgid "" "MUST follow the rules applicable to source distributions defined in the " "metadata specification." msgstr "" +"மரபு மூல விநியோக வடிவமைப்பும் உள்ளது, இது நிலையான நூலகத்தில் `` தொலைதூரங்கள்` " +"`தொகுதியின் நடத்தை மூலம் மறைமுகமாக வரையறுக்கப்படுகிறது, செயல்படுத்தும் போது: கட்டளை:` " +"setup.py sdist`. மேனிலை தரவு பதிப்பு 2.2 அல்லது அதற்குப் பிறகு ஒரு மரபு மூல " +"விநியோகத்தில் `` பி.கே.சி-இன்ஃபோ`` கோப்பைக் கொண்டிருந்தால், இந்த ஆவணம் இந்த வடிவமைப்பை " +"தரப்படுத்த முயற்சிக்கவில்லை, பின்னர் அது மேனிலை தரவு விவரக்குறிப்பில் வரையறுக்கப்பட்ட மூல " +"விநியோகங்களுக்கு பொருந்தக்கூடிய விதிகளைப் பின்பற்ற வேண்டும்." #: ../source/specifications/source-distribution-format.rst:21 msgid "Source distributions are also known as *sdists* for short." -msgstr "" +msgstr "மூல விநியோகங்கள் சுருக்கமாக * sdists * என்றும் அழைக்கப்படுகின்றன." -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" -msgstr "" +msgstr "மூல மரங்கள்" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -18997,12 +26676,15 @@ msgid "" "definition of what :file:`pyproject.toml` must contain for something to be " "deemed a source tree." msgstr "" +"A * மூல மரம் * என்பது கோப்புகள் மற்றும் கோப்பகங்களின் தொகுப்பாகும் - பதிப்பு கட்டுப்பாட்டு " +"அமைப்பு புதுப்பிப்பு போன்றவை - இதில் ஒரு: கோப்பு: `pyproject.toml` கோப்பு உள்ளது, அவை" +" கொண்ட கோப்புகள் மற்றும் கோப்பகங்களிலிருந்து மூல விநியோகத்தை உருவாக்க பயன்படுத்தலாம். ." -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" -msgstr "" +msgstr "மூல விநியோக கோப்பு பெயர்" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19010,81 +26692,123 @@ msgid "" "distribution-format`), and ``{version}`` is the canonicalized form of the " "project version (see :ref:`version-specifiers`)." msgstr "" +"ஒரு SDIST இன் கோப்பு பெயர் தரப்படுத்தப்பட்டது: PEP: `625`. கோப்பு பெயர் " +"`{name}-{version} .tar.gz`` வடிவத்தில் இருக்க வேண்டும், அங்கு` `{name}` `பைனரி " +"விநியோகங்களுக்கு அதே விதிகளின்படி இயல்பாக்கப்படுகிறது (பார்க்க: Ref:` " +"பைனரி-டிச்ட்ரிபியூசன்-வடிவ), மற்றும் `{பதிப்பு-எச்." -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../source/specifications/source-distribution-format.rst:49 msgid "" "Code that produces a source distribution file MUST give the file a name that " "matches this specification. This includes the ``build_sdist`` hook of a :" "term:`build backend `." msgstr "" +"மூல விநியோக கோப்பை உருவாக்கும் குறியீடு கோப்பிற்கு இந்த விவரக்குறிப்புடன் பொருந்தக்கூடிய " +"பெயரைக் கொடுக்க வேண்டும். இதில் `` Build_Sdist`` கொக்கி ஒரு: கால: `பின்தளத்தில் " +"உருவாக்கு <பின்தளத்தில் உருவாக்கு>`." -#: ../source/specifications/source-distribution-format.rst:49 +#: ../source/specifications/source-distribution-format.rst:53 msgid "" "Code that processes source distribution files MAY recognise source " "distribution files by the ``.tar.gz`` suffix and the presence of precisely " "*one* hyphen in the filename. Code that does this may then use the " "distribution name and version from the filename without further verification." msgstr "" +"மூல விநியோக கோப்புகளை செயலாக்கும் குறியீடு மூல விநியோக கோப்புகளை `` .tar.gz`` " +"பின்னொட்டு மற்றும் கோப்பு பெயரில் துல்லியமாக * ஒன்று * ஐபன் மூலம் அங்கீகரிக்கலாம். இதைச் " +"செய்யும் குறியீடு பின்னர் சரிபார்ப்பு இல்லாமல் கோப்பு பெயரில் இருந்து விநியோக பெயர் மற்றும் " +"பதிப்பைப் பயன்படுத்தலாம்." -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" -msgstr "" +msgstr "மூல விநியோக கோப்பு வடிவம்" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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 "" +"ஒரு `` .tar.gz`` மூல வழங்கல் (SDIST) `` {name}-{version} `` (எ.கா. `` " +"foo-1.0``) என்ற ஒற்றை உயர்மட்ட கோப்பகத்தைக் கொண்டுள்ளது. பெயர் மற்றும் பதிப்பு கோப்பில் " +"சேமிக்கப்பட்ட மெட்டாடேட்டாவுடன் பொருந்த வேண்டும். இந்த கோப்பகத்தில் ஒரு: கோப்பு: " +"`pyproject.toml` இல் வரையறுக்கப்பட்ட வடிவத்தில் இருக்க வேண்டும்: குறிப்பு: ref:` " +"pyproject-toml-spec`, மற்றும் a: கோப்பு: `pkg-info` கோப்பு:` கோர்-மெட்டாடாட்டா` " +"குறிப்பு. மேனிலை தரவு விவரக்குறிப்பின் குறைந்தபட்சம் பதிப்பு 2.2 க்கு மேனிலை தரவு இணங்" +"க வேண்டும்." -#: ../source/specifications/source-distribution-format.rst:65 +#: ../source/specifications/source-distribution-format.rst:69 +msgid "" +"If the metadata version is 2.4 or greater, the source distribution MUST " +"contain any license files specified by the ``License-File`` field in the :" +"file:`PKG-INFO` at their respective paths relative to the root directory of " +"the sdist (containing the :file:`pyproject.toml` and the :file:`PKG-INFO` " +"metadata)." +msgstr "" +"மேனிலை தரவு பதிப்பு 2.4 அல்லது அதற்கு மேற்பட்டதாக இருந்தால், மூல விநியோகத்தில் `` " +"உரிம-கோப்பு` `புலத்தால் குறிப்பிடப்பட்ட எந்த உரிமக் கோப்புகளும் இருக்க வேண்டும்: கோப்பு:` " +"பி.கே." + +#: ../source/specifications/source-distribution-format.rst:74 msgid "" "No other content of a sdist is required or defined. Build systems can store " "whatever information they need in the sdist to build the project." msgstr "" +"ஒரு SDIST இன் வேறு எந்த உள்ளடக்கமும் தேவையில்லை அல்லது வரையறுக்கப்படவில்லை. திட்டத்தை " +"உருவாக்க SDIST இல் தங்களுக்குத் தேவையான எந்த தகவலையும் உருவாக்க முடியும்." -#: ../source/specifications/source-distribution-format.rst:68 +#: ../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 "" +"நாடாகாப்பகபந்து நவீன POSIX.1-2001 PAX கரிக்கீல் வடிவமைப்பைப் பயன்படுத்த வேண்டும், இது " +"UTF-8 அடிப்படையிலான கோப்பு பெயர்களைக் குறிப்பிடுகிறது. குறிப்பாக, 'R: GZ' திறந்த " +"கொடியுடன் நிலையான நூலக டார்ஃபைல் தொகுதியைப் பயன்படுத்தி மூல விநியோக கோப்புகள் " +"படிக்கக்கூடியதாக இருக்க வேண்டும்." -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" -msgstr "" +msgstr "மூல விநியோக காப்பக நற்பொருத்தங்கள்" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" -msgstr "" +msgstr "தரவு வடிப்பானுடன் திறக்க" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../source/specifications/source-distribution-format.rst:93 msgid "" "When extracting a source distribution, tools MUST either use :py:func:" "`tarfile.data_filter` (e.g. :py:meth:`TarFile.extractall(..., filter='data') " "`), OR follow the *Unpacking without the data " "filter* section below." msgstr "" +"ஒரு மூல விநியோகத்தைப் பிரித்தெடுக்கும் போது, கருவிகள் பயன்படுத்தப்பட வேண்டும்: PY: FUNC:" +" `tarfile.data_filter` (எ.கா." -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19093,140 +26817,179 @@ msgid "" "archive) and security (e.g. refusing to unpack) is left up to the tool in " "this case." msgstr "" +"விதிவிலக்காக, பைதான் உரைபெயர்ப்பாளர்களில்: PY: FUNC: `hasattr (tarfile, " +"'data_filter') ` (: pep: `706`), பொதுவாக அந்த வடிப்பானைப் " +"பயன்படுத்தும் கருவிகள் (நேரடியாக மறைமுகமாக) பயனரை எச்சரிக்கலாம் மற்றும் இந்த குறிப்பை " +"புறக்கணிக்கலாம். பயன்பாட்டினுக்கு இடையிலான வணிகம் (எ.கா. காப்பகத்தை முழுமையாக நம்புதல்) " +"மற்றும் பாதுகாப்பு (எ.கா. திறக்க மறுப்பது) இந்த விசயத்தில் கருவி வரை விடப்படுகிறது." -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" -msgstr "" +msgstr "தரவு வடிகட்டி இல்லாமல் திறக்க" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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:104 +#: ../source/specifications/source-distribution-format.rst:113 msgid "" "The following files are invalid in an *sdist* archive. Upon encountering " "such an entry, tools SHOULD notify the user, MUST NOT unpack the entry, and " "MAY abort with a failure:" msgstr "" +"பின்வரும் கோப்புகள் * SDIST * காப்பகத்தில் செல்லாது. அத்தகைய உள்ளீட்டை எதிர்கொண்டவுடன், " +"கருவிகள் பயனருக்கு அறிவிக்க வேண்டும், உள்ளீட்டைத் திறக்கக்கூடாது, தோல்வியுடன் " +"நிறுத்தப்படலாம்:" -#: ../source/specifications/source-distribution-format.rst:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." -msgstr "" +msgstr "இலக்கு கோப்பகத்திற்கு வெளியே வைக்கப்படும் கோப்புகள்." -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" +"இலக்கு கோப்பகத்திற்கு வெளியே சுட்டிக்காட்டும் இணைப்புகள் (குறியீட்டு அல்லது கடினமான)." -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." -msgstr "" +msgstr "சாதன கோப்புகள் (குழாய்கள் உட்பட)." -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../source/specifications/source-distribution-format.rst:124 msgid "Files with a ``..`` component in the filename or link target." -msgstr "" +msgstr "கோப்பு பெயர் அல்லது இணைப்பு இலக்கில் `` ..` கூறு கொண்ட கோப்புகள்." -#: ../source/specifications/source-distribution-format.rst:116 +#: ../source/specifications/source-distribution-format.rst:125 msgid "Links pointing to a file that is not part of the archive." -msgstr "" +msgstr "காப்பகத்தின் பகுதியாக இல்லாத ஒரு கோப்பை சுட்டிக்காட்டும் இணைப்புகள்." -#: ../source/specifications/source-distribution-format.rst:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" -msgstr "" +msgstr "* Sdist * காப்பகங்களை பிரித்தெடுக்கும் போது:" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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 "" +"கோப்பு பெயர்களில் முன்னணி ச்லாச்கள் கைவிடப்பட வேண்டும். (இது இப்போதெல்லாம் `` tar`` " +"திறக்கப்படுவதற்கான நிலையான நடத்தை.)" -#: ../source/specifications/source-distribution-format.rst:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" +"ஒவ்வொரு `` பயன்முறை`` (யூனிக்ச் அனுமதி) பிட்டிற்கும், கருவிகளும் இருக்க வேண்டும்:" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" -msgstr "" +msgstr "காப்பகத்தின் படி பிட் அமைக்கவும், அல்லது" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../source/specifications/source-distribution-format.rst:138 msgid "" "use the bit from ``rw-r--r--`` (``0o644``) for non-executable files or " "``rwxr-xr-x`` (``0o755``) for executable files and directories." msgstr "" +"செயல்படுத்தப்படாத கோப்புகளுக்கு `` rw-r-r --`` (`` 0o644``) அல்லது இயங்கக்கூடிய " +"கோப்புகள் மற்றும் கோப்பகங்களுக்கு `` rwxr-Xr-X`` (`0o755``) ஆகியவற்றிலிருந்து பிட்டைப் " +"பயன்படுத்தவும்." -#: ../source/specifications/source-distribution-format.rst:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" +"உயர் `` பயன்முறை` `பிட்கள் (Setuid, setgid, ஒட்டும்) அழிக்கப்பட வேண்டும்." -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." -msgstr "" +msgstr "பயனரை * இயங்கக்கூடிய * பிட் பாதுகாக்க பரிந்துரைக்கப்படுகிறது." -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" -msgstr "" +msgstr "மேலும் குறிப்புகள்" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../source/specifications/source-distribution-format.rst:155 msgid "" "November 2020: The original version of this specification was approved " "through :pep:`643`." msgstr "" +"நவம்பர் 2020: இந்த விவரக்குறிப்பின் அசல் பதிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `643`." -#: ../source/specifications/source-distribution-format.rst:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." -msgstr "" +msgstr "சூலை 2021: ஒரு மூல மரம் என்றால் என்ன என்பதை வரையறுத்தது." -#: ../source/specifications/source-distribution-format.rst:149 +#: ../source/specifications/source-distribution-format.rst:158 msgid "" "September 2022: The filename of a source distribution was standardized " "through :pep:`625`." msgstr "" +"செப்டம்பர் 2022: மூல விநியோகத்தின் கோப்பு பெயர் தரப்படுத்தப்பட்டது: PEP: `625`." -#: ../source/specifications/source-distribution-format.rst:151 +#: ../source/specifications/source-distribution-format.rst:160 msgid "" "August 2023: Source distribution archive features were standardized through :" "pep:`721`." msgstr "" +"ஆகச்ட் 2023: மூல விநியோக காப்பக நற்பொருத்தங்கள் தரப்படுத்தப்பட்டன: PEP: `721`." + +#: ../source/specifications/source-distribution-format.rst:162 +msgid "" +"December 2024: License files inclusion into source distribution was " +"standardized through :pep:`639`." +msgstr "" +"டிசம்பர் 2024: மூல விநியோகத்தில் உரிமக் கோப்புகளைச் சேர்ப்பது தரப்படுத்தப்பட்டது: PEP: " +"`639`." #: ../source/specifications/version-specifiers.rst:7 #: ../source/specifications/version-specifiers.rst:782 msgid "Version specifiers" -msgstr "" +msgstr "பதிப்பு விவரக்குறிப்புகள்" #: ../source/specifications/version-specifiers.rst:10 msgid "" "This specification describes a scheme for identifying versions of Python " "software distributions, and declaring dependencies on particular versions." msgstr "" +"இந்த விவரக்குறிப்பு பைதான் மென்பொருள் விநியோகங்களின் பதிப்புகளை அடையாளம் காண்பதற்கான " +"திட்டத்தை விவரிக்கிறது, மேலும் குறிப்பிட்ட பதிப்புகளில் சார்புகளை அறிவிக்கிறது." #: ../source/specifications/version-specifiers.rst:15 msgid "Definitions" -msgstr "" +msgstr "வரையறைகள்" #: ../source/specifications/version-specifiers.rst:17 msgid "" @@ -19235,6 +26998,9 @@ msgid "" "\"OPTIONAL\" in this document are to be interpreted as described in :rfc:" "`2119`." msgstr "" +"\"கட்டாயம்\", \"செய்யக்கூடாது\", \"தேவை\", \"வேண்டும்\", \"வேண்டும்\", \",\", \",\", " +"\",\", \"பரிந்துரைக்கப்படக்கூடாது\", \"மே\" மற்றும் \"விருப்பமானது\" ஆகியவை " +"விவரிக்கப்பட்டுள்ளபடி விளக்கப்பட வேண்டும்: RFC: `2119`." #: ../source/specifications/version-specifiers.rst:21 msgid "" @@ -19243,18 +27009,28 @@ msgid "" "invoked by integration tools in order to build software distributed as " "sdists rather than prebuilt binary archives." msgstr "" +"\"பில்ட் கருவிகள்\" என்பது மேம்பாட்டு அமைப்புகளில் இயங்குவதை நோக்கமாகக் கொண்ட தானியங்கி " +"கருவிகள், மூல மற்றும் பைனரி விநியோக காப்பகங்களை உருவாக்குகிறது. பைனரி காப்பகங்களை " +"முன்பே கட்டியெழுப்புவதை விட SDIST களாக விநியோகிக்கப்பட்ட மென்பொருளை உருவாக்குவதற்கு " +"ஒருங்கிணைப்பு கருவிகளால் உருவாக்க கருவிகள் பயன்படுத்தப்படலாம்." #: ../source/specifications/version-specifiers.rst:26 msgid "" "\"Index servers\" are active distribution registries which publish version " "and dependency metadata and place constraints on the permitted metadata." msgstr "" +"\"இன்டெக்ச் சேவையகங்கள்\" என்பது செயலில் விநியோக பதிவுகள் ஆகும், அவை பதிப்பு மற்றும் " +"சார்பு மெட்டாடேட்டாவை வெளியிடுகின்றன மற்றும் அனுமதிக்கப்பட்ட மெட்டாடேட்டாவில் இடக் " +"கட்டுப்பாடுகளை வெளியிடுகின்றன." #: ../source/specifications/version-specifiers.rst:29 msgid "" "\"Publication tools\" are automated tools intended to run on development " "systems and upload source and binary distribution archives to index servers." msgstr "" +"\"வெளியீட்டு கருவிகள்\" என்பது மேம்பாட்டு அமைப்புகளில் இயங்குவதற்கும், மூல மற்றும் பைனரி " +"விநியோக காப்பகங்களை குறியீட்டு சேவையகங்களுக்கு பதிவேற்றுவதற்கும் நோக்கம் கொண்ட தானியங்கி " +"கருவிகள்." #: ../source/specifications/version-specifiers.rst:32 msgid "" @@ -19263,6 +27039,10 @@ msgid "" "an index server or other designated location and deploying them to the " "target system." msgstr "" +"\"நிறுவல் கருவிகள்\" என்பது ஒருங்கிணைப்பு கருவிகள் குறிப்பாக வரிசைப்படுத்தல் இலக்குகள், " +"நுகர்வு மூல மற்றும் பைனரி விநியோக காப்பகங்களை ஒரு குறியீட்டு சேவையகம் அல்லது பிற " +"நியமிக்கப்பட்ட இடத்திலிருந்து இயக்கவும், அவற்றை இலக்கு அமைப்புக்கு அனுப்பவும் நோக்கம் " +"கொண்டவை." #: ../source/specifications/version-specifiers.rst:37 msgid "" @@ -19270,16 +27050,21 @@ msgid "" "servers, publication tools, integration tools and any other software that " "produces or consumes distribution version and dependency metadata." msgstr "" +"\"தானியங்கி கருவிகள்\" என்பது உருவாக்கும் கருவிகள், குறியீட்டு சேவையகங்கள், வெளியீட்டு " +"கருவிகள், ஒருங்கிணைப்பு கருவிகள் மற்றும் விநியோக பதிப்பு மற்றும் சார்பு மெட்டாடேட்டாவை " +"உருவாக்கும் அல்லது நுகரும் வேறு எந்த மென்பொருளையும் உள்ளடக்கியது." #: ../source/specifications/version-specifiers.rst:43 msgid "Version scheme" -msgstr "" +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 "" @@ -19288,25 +27073,32 @@ msgid "" "constraints on the version of dependencies needed in order to build or run " "the software." msgstr "" +"ஒரு குறிப்பிட்ட விநியோக காப்பகத்தால் வழங்கப்பட்ட விநியோக பதிப்பை விவரிக்கவும், மென்பொருளை" +" உருவாக்க அல்லது இயக்குவதற்குத் தேவையான சார்புகளின் பதிப்பில் தடைகளை வைக்கவும் பதிப்பு " +"திட்டம் பயன்படுத்தப்படுகிறது." #: ../source/specifications/version-specifiers.rst:57 msgid "Public version identifiers" -msgstr "" +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 "" @@ -19315,6 +27107,9 @@ msgid "" "Installation tools MAY warn the user when non-compliant or ambiguous " "versions are detected." msgstr "" +"நிறுவல் கருவிகள் இந்த திட்டத்திற்கு இணங்காத எந்தவொரு பொது பதிப்புகளையும் புறக்கணிக்க " +"வேண்டும், ஆனால் கீழே குறிப்பிடப்பட்டுள்ள இயல்பாக்கங்களையும் சேர்க்க வேண்டும். இணக்கமற்ற அல்லது " +"தெளிவற்ற பதிப்புகள் கண்டறியப்படும்போது நிறுவல் கருவிகள் பயனரை எச்சரிக்கலாம்." #: ../source/specifications/version-specifiers.rst:73 msgid "" @@ -19323,48 +27118,57 @@ msgid "" "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 "" +msgstr "பொது பதிப்பு அடையாளங்காட்டிகள் ஐந்து பிரிவுகளாக பிரிக்கப்படுகின்றன:" #: ../source/specifications/version-specifiers.rst:80 msgid "Epoch segment: ``N!``" -msgstr "" +msgstr "சகாப்தம்: `` `" #: ../source/specifications/version-specifiers.rst:81 msgid "Release segment: ``N(.N)*``" -msgstr "" +msgstr "வெளியீட்டு பிரிவு: `` n (.n)*``" #: ../source/specifications/version-specifiers.rst:82 msgid "Pre-release segment: ``{a|b|rc}N``" -msgstr "" +msgstr "முன் வெளியீட்டு பிரிவு: `{a | b | rc} n``" #: ../source/specifications/version-specifiers.rst:83 msgid "Post-release segment: ``.postN``" -msgstr "" +msgstr "வெளியீட்டுக்குப் பிந்தைய பிரிவு: `` .போச்ட்ன்``" #: ../source/specifications/version-specifiers.rst:84 msgid "Development release segment: ``.devN``" -msgstr "" +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 "" +"அனைத்து எண் கூறுகளும் ASCII இலக்கங்களின் வரிசைகளாக குறிப்பிடப்படும் எதிர்மறை அல்லாத முழு" +" எண்களாக இருக்க வேண்டும்." #: ../source/specifications/version-specifiers.rst:92 msgid "" "All numeric components MUST be interpreted and ordered according to their " "numeric value, not as text strings." msgstr "" +"அனைத்து எண் கூறுகளும் அவற்றின் எண் மதிப்புக்கு ஏற்ப விளக்கப்பட்டு ஆர்டர் செய்யப்பட வேண்டும், " +"உரை சரங்களாக அல்ல." #: ../source/specifications/version-specifiers.rst:95 msgid "" @@ -19372,6 +27176,9 @@ msgid "" "release segment, a numeric component of zero has no special significance " "aside from always being the lowest possible value in the version ordering." msgstr "" +"அனைத்து எண் கூறுகளும் பூச்சியமாக இருக்கலாம். வெளியீட்டுப் பிரிவுக்கு கீழே " +"விவரிக்கப்பட்டுள்ளதைத் தவிர, பூச்சியத்தின் ஒரு எண் கூறுக்கு பதிப்பு வரிசைப்படுத்தலில் " +"எப்போதும் மிகக் குறைந்த மதிப்பாக இருப்பதைத் தவிர்த்து சிறப்பு முக்கியத்துவம் இல்லை." #: ../source/specifications/version-specifiers.rst:101 msgid "" @@ -19379,6 +27186,8 @@ msgid "" "to better accommodate the wide range of versioning practices across existing " "public and private Python projects." msgstr "" +"தற்போதுள்ள பொது மற்றும் தனியார் பைதான் திட்டங்களில் பரந்த அளவிலான பதிப்பு நடைமுறைகளுக்கு " +"ஏற்றவாறு இந்த திட்டத்தால் பதிப்பு அடையாளங்காட்டிகளைப் படிக்க சில கடினமாக உள்ளது." #: ../source/specifications/version-specifiers.rst:105 msgid "" @@ -19387,10 +27196,14 @@ msgid "" "Where this is the case, the relevant details are noted in the following " "sections." msgstr "" +"அதன்படி, விவரக்குறிப்பால் தொழில்நுட்ப ரீதியாக அனுமதிக்கப்பட்ட சில பதிப்பு நடைமுறைகள் புதி" +"ய திட்டங்களுக்கு கடுமையாக ஊக்கமளிக்கின்றன. இது எங்கே, தொடர்புடைய விவரங்கள் பின்வரும் " +"பிரிவுகளில் குறிப்பிடப்பட்டுள்ளன." #: ../source/specifications/version-specifiers.rst:116 msgid "Local version identifiers MUST comply with the following scheme::" msgstr "" +"உள்ளக பதிப்பு அடையாளங்காட்டிகள் பின்வரும் திட்டத்திற்கு இணங்க வேண்டும் ::" #: ../source/specifications/version-specifiers.rst:120 msgid "" @@ -19400,6 +27213,11 @@ msgid "" "have no specific semantics assigned, but some syntactic restrictions are " "imposed." msgstr "" +"அவை ஒரு சாதாரண பொது பதிப்பு அடையாளங்காட்டியைக் கொண்டிருக்கின்றன (முந்தைய பிரிவில் " +"வரையறுக்கப்பட்டுள்ளபடி), தன்னிச்சையான \"உள்ளக பதிப்பு சிட்டை\" உடன், பொது பதிப்பு " +"அடையாளங்காட்டியிலிருந்து ஒரு பிளச் மூலம் பிரிக்கப்பட்டுள்ளன. உள்ளக பதிப்பு லேபிள்களுக்கு " +"குறிப்பிட்ட சொற்பொருள்கள் ஒதுக்கப்படவில்லை, ஆனால் சில தொடரியல் கட்டுப்பாடுகள் " +"விதிக்கப்படுகின்றன." #: ../source/specifications/version-specifiers.rst:125 msgid "" @@ -19410,6 +27228,12 @@ msgid "" "be too disruptive to the application or other integrated system (such as a " "Linux distribution)." msgstr "" +"மேலோடை திட்டங்களின் இணக்கமான இணைக்கப்பட்ட பதிப்புகளை முழுமையாக பநிஇ (மற்றும், " +"பொருந்தினால், ஏபிஐ) குறிக்க உள்ளக பதிப்பு அடையாளங்காட்டிகள் பயன்படுத்தப்படுகின்றன. " +"எடுத்துக்காட்டாக, புதிய மேலோடை வெளியீட்டிற்கு மேம்படுத்தும்போது குறிப்பிட்ட பின்னணி பிழைத்" +" திருத்தங்களைப் பயன்படுத்துவதன் மூலம் பயன்பாட்டு உருவாக்குபவர்கள் மற்றும் கணினி " +"ஒருங்கிணைப்பாளர்களால் இவை உருவாக்கப்படலாம், பயன்பாடு அல்லது பிற ஒருங்கிணைந்த அமைப்புக்கு " +"(லினக்ச் வழங்கல் போன்றவை) மிகவும் இடையூறு விளைவிக்கும்." #: ../source/specifications/version-specifiers.rst:132 msgid "" @@ -19419,6 +27243,11 @@ msgid "" "of a release but, when applied to a source distribution, does indicate that " "it may not contain the exact same code as the corresponding upstream release." msgstr "" +"உள்ளக பதிப்பு லேபிளைச் சேர்ப்பது, கீழ்நிலை ஒருங்கிணைப்பாளர்களால் மாற்றப்பட்ட " +"மறுகட்டமைப்புகளிலிருந்து மேலோடை வெளியீடுகளை வேறுபடுத்துவதை சாத்தியமாக்குகிறது. உள்ளக " +"பதிப்பு அடையாளங்காட்டியின் பயன்பாடு ஒரு வெளியீட்டைப் பாதிக்காது, ஆனால், மூல " +"விநியோகத்திற்குப் பயன்படுத்தப்படும்போது, அதனுடன் தொடர்புடைய மேலோடை வெளியீட்டின் சரியான " +"குறியீட்டைக் கொண்டிருக்கவில்லை என்பதைக் குறிக்கிறது." #: ../source/specifications/version-specifiers.rst:138 msgid "" @@ -19427,22 +27256,27 @@ msgid "" "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 "" +msgstr "ASCII கடிதங்கள் (`` [a-za-z] ``)" #: ../source/specifications/version-specifiers.rst:144 msgid "ASCII digits (``[0-9]``)" -msgstr "" +msgstr "ASCII இலக்கங்கள் (`` [0-9] ``)" #: ../source/specifications/version-specifiers.rst:145 msgid "periods (``.``)" -msgstr "" +msgstr "காலங்கள் (`` .``)" #: ../source/specifications/version-specifiers.rst:147 msgid "Local version labels MUST start and end with an ASCII letter or digit." msgstr "" +"உள்ளக பதிப்பு லேபிள்கள் ASCII கடிதம் அல்லது இலக்கத்துடன் தொடங்கி முடிவடைய வேண்டும்." #: ../source/specifications/version-specifiers.rst:149 msgid "" @@ -19457,6 +27291,15 @@ msgid "" "a local version with fewer segments, as long as the shorter local version's " "segments match the beginning of the longer local version's segments exactly." msgstr "" +"உள்ளக பதிப்புகளின் ஒப்பீடு மற்றும் வரிசைப்படுத்தல் உள்ளக பதிப்பின் ஒவ்வொரு பகுதியையும் (`` " +".``) தனித்தனியாகக் கருதுகிறது. ஒரு பிரிவு முழுவதுமாக ASCII இலக்கங்களைக் " +"கொண்டிருந்தால், அந்த பிரிவு ஒப்பீட்டு நோக்கங்களுக்காக ஒரு முழு எண்ணாக கருதப்பட வேண்டும், " +"மேலும் ஒரு பிரிவில் ஏதேனும் ASCII எழுத்துக்கள் இருந்தால், அந்த பிரிவு அகராதிக் முறையில் " +"வழக்கு உணர்வற்ற தன்மையுடன் ஒப்பிடப்படுகிறது. ஒரு எண் மற்றும் அகராதி பிரிவை ஒப்பிடும் போது" +", எண் பிரிவு எப்போதும் லெக்சிகோகிராஃபிக் பிரிவை விட அதிகமாக ஒப்பிடுகிறது. கூடுதலா" +"க, ஏராளமான பிரிவுகளைக் கொண்ட உள்ளக பதிப்பு எப்போதும் உள்ளக பதிப்பை விட குறைவான " +"பிரிவுகளுடன் ஒப்பிடப்படும், குறுகிய உள்ளக பதிப்பின் பிரிவுகள் நீண்ட உள்ளக பதிப்பின் " +"பிரிவுகளின் தொடக்கத்துடன் சரியாக பொருந்தும் வரை." #: ../source/specifications/version-specifiers.rst:160 msgid "" @@ -19465,6 +27308,10 @@ msgid "" "project, potentially backporting security and bug fixes from later versions " "of the upstream project." msgstr "" +"ஒரு \"மேலோடை திட்டம்\" என்பது அதன் சொந்த பொது பதிப்புகளை வரையறுக்கும் ஒரு திட்டமாகும். " +"ஒரு \"கீழ்நிலை திட்டம்\" என்பது ஒரு மேலோடை திட்டத்தை கண்காணித்து மறுபகிர்வு செய்யும் " +"ஒன்றாகும், இது மேலோடை திட்டத்தின் பிற்கால பதிப்புகளிலிருந்து பாதுகாப்பு மற்றும் பிழை " +"திருத்தங்களை பின்னுக்குத் தள்ளும்." #: ../source/specifications/version-specifiers.rst:165 msgid "" @@ -19477,28 +27324,42 @@ msgid "" "the Python Package Index is intended solely for indexing and hosting " "upstream projects, it MUST NOT allow the use of local version identifiers." msgstr "" +"மேலோடை திட்டங்களை ஒரு பொது குறியீட்டு சேவையகத்திற்கு வெளியிடும்போது உள்ளக பதிப்பு " +"அடையாளங்காட்டிகள் பயன்படுத்தப்படக்கூடாது, ஆனால் திட்ட மூலத்திலிருந்து நேரடியாக " +"உருவாக்கப்பட்ட தனியார் கட்டடங்களை அடையாளம் காண பயன்படுத்தப்படலாம். பொது பதிப்பு " +"அடையாளங்காட்டியால் அடையாளம் காணப்பட்ட மேலோடை திட்டத்தின் பதிப்போடு இணக்கமான பநிஇ பதிப்பை " +"வெளியிடும் போது உள்ளக பதிப்பு அடையாளங்காட்டிகள் கீழ்நிலை திட்டங்களால் பயன்படுத்தப்பட வேண்டும்" +", ஆனால் கூடுதல் மாற்றங்களைக் கொண்டுள்ளது (பிழை திருத்தங்கள் போன்றவை). பைதான் தொகுப்பு " +"குறியீடு மேலோடை திட்டங்களை அட்டவணைப்படுத்துவதற்கும் ஓச்டிங் செய்வதற்கும் மட்டுமே நோக்கம் " +"கொண்டதாக இருப்பதால், உள்ளக பதிப்பு அடையாளங்காட்டிகளைப் பயன்படுத்த அனுமதிக்கக்கூடாது." #: ../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 "" +"உள்ளக பதிப்பு அடையாளங்காட்டியைப் பயன்படுத்தும் மூல விநியோகங்கள் `` பைதான்.இண்டெக்ரேட்டர்` " +"`நீட்டிப்பு மெட்டாடேட்டாவை வழங்க வேண்டும் (வரையறுக்கப்பட்டுள்ளபடி: PEP:` 459`)." #: ../source/specifications/version-specifiers.rst:180 msgid "Final releases" -msgstr "" +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 "" @@ -19506,6 +27367,8 @@ msgid "" "increasing fashion, otherwise automated tools will not be able to upgrade " "them correctly." msgstr "" +"ஒரு திட்டத்திற்குள் இறுதி வெளியீடுகள் தொடர்ந்து அதிகரித்து வரும் பாணியில் எண்ணப்பட வேண்டும்" +", இல்லையெனில் தானியங்கி கருவிகள் அவற்றை சரியாக மேம்படுத்த முடியாது." #: ../source/specifications/version-specifiers.rst:194 msgid "" @@ -19514,6 +27377,10 @@ msgid "" "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 "" @@ -19521,10 +27388,13 @@ msgid "" "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 "" +msgstr "உதாரணமாக ::" #: ../source/specifications/version-specifiers.rst:218 msgid "" @@ -19532,6 +27402,9 @@ msgid "" "common prefix. For example, ``3.3.1``, ``3.3.5`` and ``3.3.9.45`` are all " "part of the ``3.3`` release series." msgstr "" +"வெளியீட்டுத் தொடர் என்பது பொதுவான முன்னொட்டுடன் தொடங்கும் இறுதி வெளியீட்டு எண்களின் " +"தொகுப்பாகும். எடுத்துக்காட்டாக, `` 3.3.1``, `` 3.3.5`` மற்றும் `` 3.3.9.45`` அனைத்தும்" +" `` 3.3`` வெளியீட்டுத் தொடரின் ஒரு பகுதியாகும்." #: ../source/specifications/version-specifiers.rst:224 msgid "" @@ -19540,34 +27413,46 @@ msgid "" "``X.Y.0`` when comparing it to any release segment that includes three " "components." msgstr "" +"`` X.y`` மற்றும் `` x.y.0`` ஆகியவை தனித்துவமான வெளியீட்டு எண்களாகக் கருதப்படுவதில்லை, " +"ஏனெனில் வெளியீட்டு பிரிவு ஒப்பீட்டு விதிகள் மறைமுகமாக இரண்டு கூறு படிவத்தை `` x.y.0`` " +"என விரிவாக்குகின்றன." #: ../source/specifications/version-specifiers.rst: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 "" +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 "" @@ -19576,28 +27461,38 @@ msgid "" "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 "" +"தற்போதுள்ள சில மரபு விநியோகங்களைக் கையாள்வதற்காக பொதுவான வெளியீட்டு பிரிவுக்கான `` " +"சி`` மற்றும் `` rc`` வெளியீடுகளை நிறுவல் கருவிகள் ஏற்றுக்கொள்ளலாம்." #: ../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 "" +"நிறுவல் கருவிகள் `` சி`` பதிப்புகள் `` rc`` பதிப்புகளுக்கு சமமானவை என்று விளக்க " +"வேண்டும் (அதாவது, `` சி 1`` அதே பதிப்பைக் குறிக்கிறது `` rc1``)." #: ../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 "" +"ஒரு பொதுவான வெளியீட்டு பிரிவுக்கு `` rc`` மற்றும் `C`` இரண்டையும் உருவாக்க கருவிகள், " +"வெளியீட்டு கருவிகள் மற்றும் குறியீட்டு சேவையகங்களை உருவாக்க அனுமதிக்க வேண்டும்." #: ../source/specifications/version-specifiers.rst:275 msgid "Post-releases" -msgstr "" +msgstr "பிந்தைய வெளியீடுகள்" #: ../source/specifications/version-specifiers.rst:277 msgid "" @@ -19605,18 +27500,26 @@ msgid "" "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 "" @@ -19625,6 +27528,9 @@ msgid "" "component, immediately following the corresponding release, and ahead of any " "subsequent release." msgstr "" +"வெளியீட்டுக்குப் பிந்தைய பிரிவு `` .போச்ட்`` என்ற சரம் கொண்டது, அதைத் தொடர்ந்து எதிர்மறை " +"அல்லாத முழு எண் மதிப்பு. பிந்தைய உறவுகள் அவற்றின் எண் கூறுகளால் கட்டளையிடப்படுகின்றன, " +"உடனடியாக தொடர்புடைய வெளியீட்டைத் தொடர்ந்து, அடுத்தடுத்த வெளியீட்டிற்கு முன்னதாக." #: ../source/specifications/version-specifiers.rst:296 msgid "" @@ -19633,10 +27539,14 @@ msgid "" "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 "" +msgstr "முன் வெளியீடுகளுக்கு பிந்தைய வெளியீடுகளும் அனுமதிக்கப்படுகின்றன ::" #: ../source/specifications/version-specifiers.rst:309 msgid "" @@ -19645,10 +27555,13 @@ msgid "" "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 "" +msgstr "வளர்ச்சி வெளியீடுகள்" #: ../source/specifications/version-specifiers.rst:318 msgid "" @@ -19657,6 +27570,9 @@ msgid "" "directly from source control which do not conflict with later project " "releases." msgstr "" +"சில திட்டங்கள் வழக்கமான மேம்பாட்டு வெளியீடுகளை உருவாக்குகின்றன, மேலும் கணினி பேக்கேசர்கள் " +"(குறிப்பாக லினக்ச் விநியோகங்களுக்கு) ஆரம்ப வெளியீடுகளை மூலக் கட்டுப்பாட்டிலிருந்து " +"நேரடியாக உருவாக்க விரும்பலாம், அவை பிற்கால திட்ட வெளியீடுகளுடன் முரண்படாது." #: ../source/specifications/version-specifiers.rst:323 msgid "" @@ -19664,12 +27580,17 @@ msgid "" "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 "" @@ -19679,12 +27600,19 @@ msgid "" "before any pre-releases with the same release segment), and following any " "previous release (including any post-releases)." msgstr "" +"மேம்பாட்டு வெளியீட்டு பிரிவு `` .dev`` என்ற சரத்தைக் கொண்டுள்ளது, அதைத் தொடர்ந்து எதிர்மறை" +" அல்லாத முழு எண் மதிப்பு. மேம்பாட்டு வெளியீடுகள் அவற்றின் எண் கூறுகளால் ஆர்டர் செய்யப்படுகின்" +"றன, அதனுடன் தொடர்புடைய வெளியீட்டிற்கு முன்பே (மற்றும் ஒரே வெளியீட்டு பிரிவுடன் எந்தவொரு " +"முன் வெளியீட்டிற்கும் முன்பு), மற்றும் முந்தைய வெளியீட்டைப் பின்பற்றி (எந்தவொரு பிந்தைய " +"வெளியீடுகளும் உட்பட)." #: ../source/specifications/version-specifiers.rst:338 msgid "" "Developmental releases are also permitted for pre-releases and post-" "releases::" msgstr "" +"முன் வெளியீடுகள் மற்றும் பிந்தைய வெளியீடுகளுக்கு வளர்ச்சி வெளியீடுகளும் அனுமதிக்கப்படுகின்" +"றன ::" #: ../source/specifications/version-specifiers.rst:348 msgid "" @@ -19695,6 +27623,11 @@ msgid "" "published, it is substantially clearer to instead create a new pre-release " "by incrementing the numeric component." msgstr "" +"தொடர்ச்சியான ஒருங்கிணைப்பு நோக்கங்களுக்காக அவை பயனுள்ளதாக இருக்கும் என்றாலும், பொது " +"நோக்கத்திற்கான பொது குறியீட்டு சேவையகங்களுக்கு முன் வெளியீடுகளின் மேம்பாட்டு வெளியீடுகளை " +"வெளியிடுவது வலுவாக ஊக்கமளிக்கிறது, ஏனெனில் இது பதிப்பு அடையாளங்காட்டியை மனித " +"வாசகர்களுக்கு அலசுவது கடினம். அத்தகைய வெளியீட்டை வெளியிட வேண்டியிருந்தால், எண் கூறுகளை " +"அதிகரிப்பதன் மூலம் புதிய முன் வெளியீட்டை உருவாக்குவது கணிசமாக தெளிவாக உள்ளது." #: ../source/specifications/version-specifiers.rst:355 msgid "" @@ -19702,20 +27635,26 @@ msgid "" "they may be appropriate for projects which use the post-release notation for " "full maintenance releases which may include code changes." msgstr "" +"பிந்தைய வெளியீடுகளின் மேம்பாட்டு வெளியீடுகளும் கடுமையாக ஊக்கமளிக்கின்றன, ஆனால் அவை " +"குறியீடு மாற்றங்களை உள்ளடக்கிய முழு பராமரிப்பு வெளியீடுகளுக்கு வெளியீட்டுக்குப் பிந்தைய " +"குறியீட்டைப் பயன்படுத்தும் திட்டங்களுக்கு அவை பொருத்தமானதாக இருக்கலாம்." #: ../source/specifications/version-specifiers.rst:361 msgid "Version epochs" -msgstr "" +msgstr "பதிப்பு சகாப்தங்கள்" #: ../source/specifications/version-specifiers.rst:363 msgid "" "If included in a version identifier, the epoch appears before all other " "components, separated from the release segment by an exclamation mark::" msgstr "" +"பதிப்பு அடையாளங்காட்டியில் சேர்க்கப்பட்டால், சகாப்தம் மற்ற எல்லா கூறுகளுக்கும் முன்பாக தோன்றும்" +", வெளியீட்டு பிரிவில் இருந்து ஆச்சரியக் குறி ::" #: ../source/specifications/version-specifiers.rst:368 msgid "If no explicit epoch is given, the implicit epoch is ``0``." msgstr "" +"வெளிப்படையான சகாப்தம் எதுவும் கொடுக்கப்படவில்லை என்றால், மறைமுகமான சகாப்தம் `` 0`` ஆகும்." #: ../source/specifications/version-specifiers.rst:370 msgid "" @@ -19727,6 +27666,13 @@ msgid "" "releases would be identified as *older* than the date based releases when " "using the normal sorting scheme::" msgstr "" +"பெரும்பாலான பதிப்பு அடையாளங்காட்டிகள் ஒரு சகாப்தத்தை சேர்க்காது, ஏனெனில் ஒரு திட்டம் * " +"மாற்றினால் மட்டுமே வெளிப்படையான சகாப்தம் தேவைப்படுகிறது * இது பதிப்பு எண்ணிக்கையை " +"கையாளும் விதத்தில் சாதாரண பதிப்பு வரிசைப்படுத்தும் விதிகள் தவறான பதிலைக் கொடுக்கும். " +"எடுத்துக்காட்டாக, ஒரு திட்டம் `` 2014.04`` போன்ற தேதி அடிப்படையிலான பதிப்புகளைப் " +"பயன்படுத்துகிறது மற்றும் `` 1.0`` போன்ற சொற்பொருள் பதிப்புகளுக்கு மாற விரும்பினால், புதி" +"ய வெளியீடுகள் சாதாரண வரிசையாக்கத் திட்டத்தைப் பயன்படுத்தும் போது தேதி அடிப்படையிலான " +"வெளியீடுகளை விட * பழையவை * என அடையாளம் காணப்படும் ::" #: ../source/specifications/version-specifiers.rst:384 msgid "" @@ -19734,10 +27680,13 @@ msgid "" "appropriately, as all versions from a later epoch are sorted after versions " "from an earlier epoch::" msgstr "" +"இருப்பினும், ஒரு வெளிப்படையான சகாப்தத்தைக் குறிப்பிடுவதன் மூலம், வரிசை வரிசையை சரியான " +"முறையில் மாற்ற முடியும், ஏனெனில் முந்தைய சகாப்தத்தின் அனைத்து பதிப்புகளும் முந்தைய " +"சகாப்தத்தின் பதிப்புகளுக்குப் பிறகு வரிசைப்படுத்தப்படுகின்றன ::" #: ../source/specifications/version-specifiers.rst:398 msgid "Normalization" -msgstr "" +msgstr "இயல்பாக்கம்" #: ../source/specifications/version-specifiers.rst:400 msgid "" @@ -19746,10 +27695,14 @@ msgid "" "parsing versions. These syntaxes MUST be considered when parsing a version, " "however they should be \"normalized\" to the standard syntax defined above." msgstr "" +"தற்போதுள்ள பதிப்புகளுடன் சிறந்த பொருந்தக்கூடிய தன்மையைப் பராமரிக்க, பல \"மாற்று\" " +"தொடரியல் உள்ளன, அவை பதிப்புகளை பாகுபடுத்தும்போது கணக்கில் எடுத்துக்கொள்ளப்பட வேண்டும். ஒரு" +" பதிப்பை பாகுபடுத்தும்போது இந்த தொடரியல் கருத்தில் கொள்ளப்பட வேண்டும், இருப்பினும் அவை " +"மேலே வரையறுக்கப்பட்ட நிலையான தொடரியல் க்கு \"இயல்பாக்கப்பட வேண்டும்\"." #: ../source/specifications/version-specifiers.rst:407 msgid "Case sensitivity" -msgstr "" +msgstr "வழக்கு உணர்திறன்" #: ../source/specifications/version-specifiers.rst:409 msgid "" @@ -19757,10 +27710,13 @@ msgid "" "and the normal form is lowercase. This allows versions such as ``1.1RC1`` " "which would be normalized to ``1.1rc1``." msgstr "" +"அனைத்து ASCII கடிதங்களும் ஒரு பதிப்பிற்குள் உணர்வற்ற முறையில் விளக்கப்பட வேண்டும் மற்றும் " +"சாதாரண வடிவம் சிறிய எழுத்துக்கள். இது `` 1.1rc1`` போன்ற பதிப்புகளை அனுமதிக்கிறது, " +"இது `1.1rc1`` க்கு இயல்பாக்கப்படும்." #: ../source/specifications/version-specifiers.rst:415 msgid "Integer Normalization" -msgstr "" +msgstr "முழு எண் இயல்பாக்கம்" #: ../source/specifications/version-specifiers.rst:417 msgid "" @@ -19770,10 +27726,15 @@ msgid "" "does not hold true for integers inside of an alphanumeric segment of a local " "version such as ``1.0+foo0100`` which is already in its normalized form." msgstr "" +"அனைத்து முழு எண்ணும் `` இன்ட் () `` வழியாக விளக்கப்பட்டு வெளியீட்டின் சரம் வடிவத்தை " +"இயல்பாக்குகிறது. இதன் பொருள் `` 00`` இன் முழு எண் பதிப்பு `` 0`` க்கு இயல்பாக்கும், அதே " +"நேரத்தில் `09000``` `9000`` க்கு இயல்பாக்கும். `` 1.0+FOO0100`` போன்ற உள்ளக பதிப்பின் " +"எண்ணெழுத்து பிரிவின் உள்ளே நுழைவதற்கு இது உண்மையல்ல, இது ஏற்கனவே அதன் இயல்பாக்கப்பட்ட " +"வடிவத்தில் உள்ளது." #: ../source/specifications/version-specifiers.rst:425 msgid "Pre-release separators" -msgstr "" +msgstr "முன் வெளியீட்டு பிரிப்பான்கள்" #: ../source/specifications/version-specifiers.rst:427 msgid "" @@ -19784,10 +27745,15 @@ msgid "" "be used between the pre-release signifier and the numeral. This allows " "versions such as ``1.0a.1`` which would be normalized to ``1.0a1``." msgstr "" +"முன் வெளியீடுகள் வெளியீட்டுப் பிரிவுக்கும் வெளியீட்டுக்கு முந்தைய பிரிவுக்கும் இடையில் ஒரு " +"`` .` .`. இதற்கான சாதாரண வடிவம் பிரிப்பான் இல்லாமல் உள்ளது. இது `` 1.1. இது ஒரு " +"பிரிப்பான் முன் வெளியீட்டு அடையாளத்திற்கும் எண்களுக்கும் இடையில் பயன்படுத்த அனுமதிக்க வேண்டும்" +". இது `` 1.0a.1`` போன்ற பதிப்புகளை அனுமதிக்கிறது, இது `` 1.0a1`` க்கு " +"இயல்பாக்கப்படும்." #: ../source/specifications/version-specifiers.rst:436 msgid "Pre-release spelling" -msgstr "" +msgstr "முன் வெளியீட்டு எழுத்துப்பிழை" #: ../source/specifications/version-specifiers.rst:438 msgid "" @@ -19798,10 +27764,15 @@ msgid "" "case the additional spelling should be considered equivalent to their normal " "forms." msgstr "" +"முன்-வெளியீடுகள் `` ஆல்பா``, `` பீட்டா``, `சி``,` `முன்``, மற்றும்` `பி``,` `rc``,` " +"`rc`, மற்றும்` `` `` `` `` `` `` `` `` `` `` `` `` `` `` இது `` 1.1alpha1``, ``" +" 1.1beta2``, அல்லது `` 1.1c3`` போன்ற பதிப்புகளை `` 1.1a1``, `` 1.1b2``, மற்றும் " +"`1rc3`` போன்ற பதிப்புகளை அனுமதிக்கிறது. ஒவ்வொரு சந்தர்ப்பத்திலும் கூடுதல் எழுத்துப்பிழை " +"அவற்றின் சாதாரண வடிவங்களுக்கு சமமானதாக கருதப்பட வேண்டும்." #: ../source/specifications/version-specifiers.rst:447 msgid "Implicit pre-release number" -msgstr "" +msgstr "மறைமுகத்திற்கு முந்தைய வெளியீடு எண்" #: ../source/specifications/version-specifiers.rst:449 msgid "" @@ -19810,10 +27781,14 @@ msgid "" "explicitly. This allows versions such as ``1.2a`` which is normalized to " "``1.2a0``." msgstr "" +"முன் வெளியீடுகள் எண்களைத் தவிர்ப்பதற்கு அனுமதிக்கின்றன, இந்த விசயத்தில் அது `` 0`` என்று " +"மறைமுகமாக கருதப்படுகிறது. இதற்கான சாதாரண வடிவம் `` 0`` வெளிப்படையாக சேர்க்க வேண்டும்" +". இது `` 1.2a`` போன்ற பதிப்புகளை அனுமதிக்கிறது, இது `` 1.2A0`` க்கு " +"இயல்பாக்கப்படுகிறது." #: ../source/specifications/version-specifiers.rst:455 msgid "Post release separators" -msgstr "" +msgstr "வெளியீட்டு பிரிப்பான்கள் இடுகை" #: ../source/specifications/version-specifiers.rst:457 msgid "" @@ -19825,10 +27800,16 @@ msgid "" "This allows versions like ``1.2.post-2`` which would normalize to ``1.2." "post2``." msgstr "" +"போச்ட் வெளியீடுகள் ஒரு `` .``, `` --``, அல்லது `` _`` பிரிப்பான் மற்றும் பிரிப்பான் " +"அனைத்தையும் ஒன்றாகத் தவிர்ப்பதை அனுமதிக்கின்றன. இதன் இயல்பான வடிவம் `` .`` பிரிப்பான். இது" +" `` 1.2-post2`` அல்லது `1.2 போச்ட் 2`` போன்ற பதிப்புகளை` `1.2.post2`` க்கு " +"இயல்பாக்குகிறது. முன் வெளியீட்டு பிரிப்பானைப் போலவே இது இடுகை வெளியீட்டு அடையாளத்திற்கும்" +" எண்களுக்கும் இடையில் விருப்பமான பிரிப்பான் அனுமதிக்கிறது. இது `` 1.2.post-2`` போன்ற " +"பதிப்புகளை அனுமதிக்கிறது, இது `` 1.2.post2`` க்கு இயல்பாக்கும்." #: ../source/specifications/version-specifiers.rst:466 msgid "Post release spelling" -msgstr "" +msgstr "வெளியீட்டு எழுத்துப்பிழை இடுகை" #: ../source/specifications/version-specifiers.rst:468 msgid "" @@ -19837,10 +27818,14 @@ msgid "" "with the pre-releases the additional spellings should be considered " "equivalent to their normal forms." msgstr "" +"பிந்தைய உறவுகள் `` rev`` மற்றும் `` r`` ஆகியவற்றின் கூடுதல் எழுத்துப்பிழைகளை " +"அனுமதிக்கின்றன. இது `` 1.0-R4`` போன்ற பதிப்புகளை `` 1.0.post4`` க்கு இயல்பாக்குகிறது" +". முன் வெளியீடுகளைப் போலவே கூடுதல் எழுத்துப்பிழைகள் அவற்றின் சாதாரண வடிவங்களுக்கு " +"சமமானதாக கருதப்பட வேண்டும்." #: ../source/specifications/version-specifiers.rst:475 msgid "Implicit post release number" -msgstr "" +msgstr "மறைமுகமான இடுகை வெளியீட்டு எண்" #: ../source/specifications/version-specifiers.rst:477 msgid "" @@ -19849,10 +27834,14 @@ msgid "" "explicitly. This allows versions such as ``1.2.post`` which is normalized to " "``1.2.post0``." msgstr "" +"போச்ட் வெளியீடுகள் எண்களைத் தவிர்ப்பதற்கு அனுமதிக்கின்றன, இந்த விசயத்தில் அது `` 0`` என்று " +"மறைமுகமாக கருதப்படுகிறது. இதற்கான சாதாரண வடிவம் `` 0`` வெளிப்படையாக சேர்க்க வேண்டும்" +". `` 1.2.post0`` க்கு இயல்பாக்கப்பட்ட `` 1.2.post`` போன்ற பதிப்புகளை இது " +"அனுமதிக்கிறது." #: ../source/specifications/version-specifiers.rst:483 msgid "Implicit post releases" -msgstr "" +msgstr "மறைமுகமான இடுகை வெளியீடுகள்" #: ../source/specifications/version-specifiers.rst:485 msgid "" @@ -19863,10 +27852,16 @@ msgid "" "post release number rule. In other words, ``1.0-`` is *not* a valid version " "and it does *not* normalize to ``1.0.post0``." msgstr "" +"பிந்தைய வெளியீடுகள் `` போச்ட்`` அடையாளங்காட்டியைத் தவிர்ப்பதற்கு அனுமதிக்கின்றன. இந்த " +"வடிவத்தைப் பயன்படுத்தும் போது பிரிப்பான் `` --`` ஆக இருக்க வேண்டும், வேறு எந்த வடிவமும் " +"அனுமதிக்கப்படவில்லை. இது `` 1.0-1`` போன்ற பதிப்புகளை `` 1.0.post1`` க்கு இயல்பாக்க " +"அனுமதிக்கிறது. இந்த குறிப்பிட்ட இயல்பாக்கம் மறைமுகமான இடுகை வெளியீட்டு எண் விதியுடன் " +"இணைந்து பயன்படுத்தப்படக்கூடாது. வேறு வார்த்தைகளில் கூறுவதானால், `` 1.0 -`` என்பது * " +"சரியான பதிப்பாக இல்லை, மேலும் இது * `1.0.post0`` க்கு * இயல்பாக்கப்படாது." #: ../source/specifications/version-specifiers.rst:494 msgid "Development release separators" -msgstr "" +msgstr "வளர்ச்சி வெளியீட்டு பிரிப்பான்கள்" #: ../source/specifications/version-specifiers.rst:496 msgid "" @@ -19875,10 +27870,14 @@ msgid "" "`` separator. This allows versions such as ``1.2-dev2`` or ``1.2dev2`` which " "normalize to ``1.2.dev2``." msgstr "" +"வளர்ச்சி வெளியீடுகள் ஒரு `` .``, `` --``, அல்லது ஒரு `` _`` பிரிப்பான் மற்றும் " +"பிரிப்பான் அனைத்தையும் ஒன்றாகத் தவிர்ப்பதை அனுமதிக்கின்றன. இதன் இயல்பான வடிவம் `` .`` " +"பிரிப்பான். இது `` 1.2-DEV2`` அல்லது `1.2dev2`` போன்ற பதிப்புகளை` `1.2.dev2`` க்கு " +"இயல்பாக்குகிறது." #: ../source/specifications/version-specifiers.rst:503 msgid "Implicit development release number" -msgstr "" +msgstr "மறைமுக வளர்ச்சி வெளியீட்டு எண்" #: ../source/specifications/version-specifiers.rst:505 msgid "" @@ -19887,10 +27886,13 @@ msgid "" "``0`` explicitly. This allows versions such as ``1.2.dev`` which is " "normalized to ``1.2.dev0``." msgstr "" +"வளர்ச்சி வெளியீடுகள் எண்களைத் தவிர்ப்பதற்கு அனுமதிக்கின்றன, இந்த விசயத்தில் அது `` 0`` என்று" +" மறைமுகமாக கருதப்படுகிறது. இதற்கான சாதாரண வடிவம் `` 0`` வெளிப்படையாக சேர்க்க வேண்டும்" +". `` 1.2.dev0`` க்கு இயல்பாக்கப்பட்ட `` 1.2.dev`` போன்ற பதிப்புகளை இது அனுமதிக்கிறது." #: ../source/specifications/version-specifiers.rst:512 msgid "Local version segments" -msgstr "" +msgstr "உள்ளக பதிப்பு பிரிவுகள்" #: ../source/specifications/version-specifiers.rst:514 msgid "" @@ -19899,10 +27901,14 @@ msgid "" "using the ``.`` character. This allows versions such as ``1.0+ubuntu-1`` to " "be normalized to ``1.0+ubuntu.1``." msgstr "" +"ஒரு உள்ளக பதிப்போடு, பிரிவுகளின் பிரிப்பாளராக `` .`` பயன்படுத்துவதோடு கூடுதலாக, `` " +"-`` மற்றும் `_`` ஆகியவற்றைப் பயன்படுத்துவதும் ஏற்றுக்கொள்ளத்தக்கது. சாதாரண வடிவம் `` .`` " +"எழுத்தைப் பயன்படுத்துகிறது. இது `` 1.0+உபுண்டு -1`` போன்ற பதிப்புகளை `` 1.0+உபுண்டு " +"1`` க்கு இயல்பாக்க அனுமதிக்கிறது." #: ../source/specifications/version-specifiers.rst:521 msgid "Preceding v character" -msgstr "" +msgstr "V எழுத்து முந்தையது" #: ../source/specifications/version-specifiers.rst:523 msgid "" @@ -19912,10 +27918,14 @@ msgid "" "version. The same version with and without the ``v`` is considered " "equivalent." msgstr "" +"`` V1.0`` பதிப்புகளின் பொதுவான பதிப்பு குறியீட்டை ஆதரிப்பதற்காக, ஒரு நேரடி `v`` " +"பாத்திரத்தால் முன்னதாக இருக்கலாம். இந்த பாத்திரம் அனைத்து நோக்கங்களுக்காகவும் புறக்கணிக்கப்பட " +"வேண்டும் மற்றும் பதிப்பின் அனைத்து இயல்பாக்கப்பட்ட வடிவங்களிலிருந்தும் தவிர்க்கப்பட வேண்டும். ``" +" வி`` உடன் மற்றும் இல்லாமல் அதே பதிப்பு சமமானதாகக் கருதப்படுகிறது." #: ../source/specifications/version-specifiers.rst:530 msgid "Leading and Trailing Whitespace" -msgstr "" +msgstr "வழிநடத்தும் மற்றும் பின்தங்கிய இடைவெளி" #: ../source/specifications/version-specifiers.rst:532 msgid "" @@ -19925,10 +27935,14 @@ msgid "" "be handled sensibly, such as a version like ``1.0\\n`` which normalizes to " "``1.0``." msgstr "" +"ஒரு பதிப்பின் இயல்பாக்கப்பட்ட அனைத்து வடிவங்களிலிருந்தும் அமைதியாக புறக்கணிக்கப்பட்டு அகற்றப்" +"பட வேண்டும். இதில் `` \"\" `` `,` `\\ t``,` `\\ n``,` `\\ r``,` \\ f``, மற்றும் `" +"\\ v`` ஆகியவை அடங்கும். `` 1.0 \\ n`` போன்ற பதிப்பு போன்ற தற்செயலான இடைவெளியை " +"விவேகத்துடன் கையாள இது அனுமதிக்கிறது, இது `` 1.0`` ஐ இயல்பாக்குகிறது." #: ../source/specifications/version-specifiers.rst:539 msgid "Examples of compliant version schemes" -msgstr "" +msgstr "இணக்கமான பதிப்பு திட்டங்களின் எடுத்துக்காட்டுகள்" #: ../source/specifications/version-specifiers.rst:541 msgid "" @@ -19939,6 +27953,11 @@ msgid "" "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:548 msgid "" @@ -19947,35 +27966,45 @@ msgid "" "ensuring that the \"latest release\" and the \"latest stable release\" can " "be easily determined, both by human users and automated tools." msgstr "" +"பின்வரும் எடுத்துக்காட்டுகள் வெவ்வேறு அணுகுமுறைகளின் ஒரு சிறிய தேர்வு திட்டங்கள் அவற்றின் " +"வெளியீடுகளை அடையாளம் காண தேர்வு செய்யலாம், அதே நேரத்தில் \"அண்மைக் கால வெளியீடு\" மற்றும்" +" \"அண்மைக் கால நிலையான வெளியீடு\" ஆகியவற்றை மனித பயனர்கள் மற்றும் தானியங்கி கருவிகளால் " +"எளிதில் தீர்மானிக்க முடியும் என்பதை உறுதிசெய்கிறது." #: ../source/specifications/version-specifiers.rst:553 msgid "Simple \"major.minor\" versioning::" -msgstr "" +msgstr "எளிய \"மேசர்.மினோர்\" பதிப்பு ::" #: ../source/specifications/version-specifiers.rst:562 msgid "Simple \"major.minor.micro\" versioning::" -msgstr "" +msgstr "எளிய \"மேசர்.மினோர்.மிக்ரோ\" பதிப்பு ::" #: ../source/specifications/version-specifiers.rst:570 msgid "" "\"major.minor\" versioning with alpha, beta and candidate pre-releases::" msgstr "" +"ஆல்பா, பீட்டா மற்றும் வேட்பாளர் முன் வெளியீடுகளுடன் \"மேசர்.மினோர்\" பதிப்பு ::" #: ../source/specifications/version-specifiers.rst:582 msgid "" "\"major.minor\" versioning with developmental releases, release candidates " "and post-releases for minor corrections::" msgstr "" +"மேம்பாட்டு வெளியீடுகளுடன் \"மேசர்.மினோர்\" பதிப்பு, வேட்பாளர்கள் மற்றும் சிறிய " +"திருத்தங்களுக்கு பிந்தைய வெளியீடுகளை வெளியிடுங்கள் ::" #: ../source/specifications/version-specifiers.rst:597 msgid "" "Date based releases, using an incrementing serial within each year, skipping " "zero::" msgstr "" +"தேதி அடிப்படையிலான வெளியீடுகள், ஒவ்வொரு ஆண்டும் அதிகரிக்கும் சீரியலைப் பயன்படுத்தி, " +"பூச்சியத்தைத் தவிர்ப்பது ::" #: ../source/specifications/version-specifiers.rst:611 msgid "Summary of permitted suffixes and relative ordering" msgstr "" +"அனுமதிக்கப்பட்ட பின்னொட்டுகளின் சுருக்கம் மற்றும் உறவினர் வரிசைப்படுத்தல்" #: ../source/specifications/version-specifiers.rst:615 msgid "" @@ -19983,6 +28012,9 @@ msgid "" "process distribution metadata, rather than developers of Python " "distributions deciding on a versioning scheme." msgstr "" +"இந்த பிரிவு முதன்மையாக ஒரு பதிப்பு திட்டத்தை தீர்மானிக்கும் பைதான் விநியோகங்களின் " +"டெவலப்பர்களைக் காட்டிலும், விநியோக மெட்டாடேட்டாவை தானாக செயலாக்கும் கருவிகளின் " +"ஆசிரியர்களுக்காக வடிவமைக்கப்பட்டுள்ளது." #: ../source/specifications/version-specifiers.rst:619 msgid "" @@ -19990,6 +28022,9 @@ msgid "" "numeric value of the given epoch. If no epoch segment is present, the " "implicit numeric value is ``0``." msgstr "" +"பதிப்பு அடையாளங்காட்டிகளின் சகாப்த பிரிவு கொடுக்கப்பட்ட சகாப்தத்தின் எண் மதிப்புக்கு ஏற்ப " +"வரிசைப்படுத்தப்பட வேண்டும். எபோச் பிரிவு எதுவும் இல்லை என்றால், மறைமுகமான எண் மதிப்பு `` " +"0`` ஆகும்." #: ../source/specifications/version-specifiers.rst:623 msgid "" @@ -19997,18 +28032,25 @@ msgid "" "as Python's tuple sorting when the normalized release segment is parsed as " "follows::" msgstr "" +"பதிப்பு அடையாளங்காட்டிகளின் வெளியீட்டுப் பிரிவு இயல்பாக்கப்பட்ட வெளியீட்டு பிரிவு " +"பின்வருமாறு பாகுபடுத்தப்படும்போது பைதனின் டூப்பிள் வரிசையாக்கத்தின் அதே வரிசையில் " +"வரிசைப்படுத்தப்பட வேண்டும் ::" #: ../source/specifications/version-specifiers.rst:629 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:632 msgid "" "Within a numeric release (``1.0``, ``2.7.3``), the following suffixes are " "permitted and MUST be ordered as shown::" msgstr "" +"ஒரு எண் வெளியீட்டிற்குள் (`` 1.0``, `` 2.7.3``), பின்வரும் பின்னொட்டுகள் " +"அனுமதிக்கப்படுகின்றன, மேலும் காட்டப்பட்டுள்ளபடி ஆர்டர் செய்யப்பட வேண்டும் ::" #: ../source/specifications/version-specifiers.rst:637 msgid "" @@ -20017,6 +28059,10 @@ msgid "" "same ``N`` for both a ``c`` and a ``rc`` in the same release segment as " "ambiguous and remain in compliance with the specification." msgstr "" +"`` சி`` சொற்பொருளாக `` rc`` க்கு சமமானதாகக் கருதப்படுகிறது, மேலும் அது `` rc`` போ" +"ல வரிசைப்படுத்தப்பட வேண்டும் என்பதை நினைவில் கொள்க. ஒரு `சி`` இரண்டிற்கும் ஒரே மாதிரியா" +"ன வெளியீட்டுப் பிரிவில் தெளிவற்ற அதே பிரிவில் ஒரே மாதிரியான` `n`` ஐக் கொண்ட வழக்கை " +"கருவிகள் நிராகரிக்கலாம் மற்றும் விவரக்குறிப்புக்கு இணங்க வேண்டும்." #: ../source/specifications/version-specifiers.rst:642 msgid "" @@ -20024,12 +28070,17 @@ msgid "" "(``1.0rc1``, ``1.0c1``), the following suffixes are permitted and MUST be " "ordered as shown::" msgstr "" +"ஆல்பா (`` 1.0a1``), பீட்டா (`` 1.0b1``), அல்லது வேட்பாளரை (`1.0rc1``,` `1.0c1``) " +"வெளியிடும், பின்வரும் பின்னொட்டுகள் அனுமதிக்கப்படுகின்றன, மேலும் காட்டப்பட்டுள்ளபடி ஆர்டர் " +"செய்யப்பட வேண்டும் ::" #: ../source/specifications/version-specifiers.rst:648 msgid "" "Within a post-release (``1.0.post1``), the following suffixes are permitted " "and MUST be ordered as shown::" msgstr "" +"ஒரு பிந்தைய வெளியீட்டிற்குள் (`` 1.0.post1``), பின்வரும் பின்னொட்டுகள் அனுமதிக்கப்படுகின்" +"றன, மேலும் அவை காட்டப்பட்டுள்ளபடி ஆர்டர் செய்யப்பட வேண்டும் ::" #: ../source/specifications/version-specifiers.rst:653 msgid "" @@ -20037,20 +28088,25 @@ msgid "" "used immediately following a numeric version (e.g. ``1.0.dev456``, ``1.0." "post1``)." msgstr "" +"ஒரு எண் பதிப்பை (எ.கா. `` 1.0.dev456``, `` 1.0.post1``) உடனடியாகப் " +"பயன்படுத்தும்போது கூட, `` devn`` மற்றும் `` போச்ட்ன்`` எப்போதும் ஒரு புள்ளிக்கு முன்னதாக " +"இருக்க வேண்டும் என்பதை நினைவில் கொள்க." #: ../source/specifications/version-specifiers.rst:657 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:660 msgid "The following example covers many of the possible combinations::" -msgstr "" +msgstr "பின்வரும் எடுத்துக்காட்டு சாத்தியமான பல சேர்க்கைகளை உள்ளடக்கியது ::" #: ../source/specifications/version-specifiers.rst:685 msgid "Version ordering across different metadata versions" -msgstr "" +msgstr "பதிப்பு வெவ்வேறு மேனிலை தரவு பதிப்புகளில் வரிசைப்படுத்துகிறது" #: ../source/specifications/version-specifiers.rst:687 msgid "" @@ -20058,6 +28114,10 @@ msgid "" "standard version identification or ordering scheme. However metadata v1.2 (:" "pep:`345`) does specify a scheme which is defined in :pep:`386`." msgstr "" +"மேனிலை தரவு V1.0 (: PEP: `241`) மற்றும் மேனிலை தரவு V1.1 (: PEP:` 314`) ஒரு " +"நிலையான பதிப்பு அடையாளம் அல்லது வரிசைப்படுத்தும் திட்டத்தை குறிப்பிடவில்லை. இருப்பினும் " +"மேனிலை தரவு V1.2 (: PEP: `345`) வரையறுக்கப்பட்ட ஒரு திட்டத்தை குறிப்பிடுகிறது: " +"PEP:` 386`." #: ../source/specifications/version-specifiers.rst:691 msgid "" @@ -20069,6 +28129,12 @@ msgid "" "requirements necessitate a standardization across one parsing mechanism to " "be used for all versions of a project." msgstr "" +"எளிய நிறுவி ஏபிஐயின் தன்மை காரணமாக, ஒரு குறிப்பிட்ட வழங்கல் எந்த மேனிலை தரவு பதிப்பைப்" +" பயன்படுத்துகிறது என்பதை ஒரு நிறுவி அறிந்து கொள்ள முடியாது. கூடுதலாக, நிறுவிகள் ஒரு" +" திட்டத்தின் அனைத்து பதிப்புகளை நிறுவ வேண்டும் என்பதை தீர்மானிக்க அனைத்தையும் உள்ளடக்கிய ஒரு" +" நியாயமான முன்னுரிமை பட்டியலை உருவாக்கும் திறன் தேவைப்பட்டது. இந்த தேவைகள் ஒரு " +"திட்டத்தின் அனைத்து பதிப்புகளுக்கும் பயன்படுத்தப்பட வேண்டிய ஒரு பாகுபடுத்தும் பொறிமுறையில் " +"ஒரு தரப்படுத்தல் தேவைப்படுகிறது." #: ../source/specifications/version-specifiers.rst:699 msgid "" @@ -20079,16 +28145,24 @@ msgid "" "and ordering schemes if no versions complying with this specification are " "available." msgstr "" +"மேற்கூறியவற்றின் காரணமாக, இந்த விவரக்குறிப்பு மேனிலை தரவு மற்றும் சூப்பர்செட்களின் அனைத்து" +" பதிப்புகளுக்கும் பயன்படுத்தப்பட வேண்டும்: PEP: `386` மேனிலை தரவு V1.2 க்கு கூட. இந்த " +"விவரக்குறிப்பில் உள்ள விதிகளால் பாகுபடுத்த முடியாத எந்த பதிப்புகளையும் கருவிகள் " +"புறக்கணிக்க வேண்டும், ஆனால் இந்த விவரக்குறிப்புக்கு இணங்காத பதிப்புகள் எதுவும் கிடைக்கவில்லை" +" என்றால், வரையறுக்கப்பட்ட பதிப்பு பாகுபடுத்தல் மற்றும் வரிசைப்படுத்தும் திட்டங்களை " +"செயல்படுத்தலாம்." #: ../source/specifications/version-specifiers.rst:705 msgid "" "Distribution users may wish to explicitly remove non-compliant versions from " "any private package indexes they control." msgstr "" +"விநியோக பயனர்கள் தாங்கள் கட்டுப்படுத்தும் எந்தவொரு தனியார் தொகுப்பு குறியீடுகளிலிருந்தும் " +"இணங்காத பதிப்புகளை வெளிப்படையாக அகற்ற விரும்பலாம்." #: ../source/specifications/version-specifiers.rst:710 msgid "Compatibility with other version schemes" -msgstr "" +msgstr "பிற பதிப்பு திட்டங்களுடன் பொருந்தக்கூடிய தன்மை" #: ../source/specifications/version-specifiers.rst:712 msgid "" @@ -20098,6 +28172,10 @@ msgid "" "the metadata while the translated public version is published in the version " "field." msgstr "" +"இந்த விவரக்குறிப்பில் வரையறுக்கப்பட்ட பொது பதிப்பு திட்டத்திற்கு இணங்க மொழிபெயர்ப்பு " +"தேவைப்படும் பதிப்பு திட்டத்தைப் பயன்படுத்த சில திட்டங்கள் தேர்வு செய்யலாம். இதுபோன்ற " +"சந்தர்ப்பங்களில், திட்ட குறிப்பிட்ட பதிப்பை மெட்டாடேட்டாவில் சேமிக்க முடியும், அதே நேரத்தில் " +"மொழிபெயர்க்கப்பட்ட பொது பதிப்பு பதிப்பு புலத்தில் வெளியிடப்படுகிறது." #: ../source/specifications/version-specifiers.rst:717 msgid "" @@ -20105,6 +28183,9 @@ msgid "" "ordering of published releases, while still allowing developers to use the " "internal versioning scheme they prefer for their projects." msgstr "" +"இது தானியங்கு விநியோக கருவிகளை வெளியிடப்பட்ட வெளியீடுகளின் தொடர்ச்சியாக சரியான " +"வரிசைப்படுத்தலை வழங்க அனுமதிக்கிறது, அதே நேரத்தில் உருவாக்குபவர்கள் தங்கள் திட்டங்களுக்கு " +"அவர்கள் விரும்பும் உள் பதிப்பு திட்டத்தைப் பயன்படுத்த அனுமதிக்கிறது." #: ../source/specifications/version-specifiers.rst:725 msgid "" @@ -20116,6 +28197,12 @@ msgid "" "on other distributions, and when publishing a distribution that others rely " "on." msgstr "" +"`சொற்பொருள் பதிப்பு `_ என்பது ஒரு பிரபலமான பதிப்பு அடையாளத் திட்டமாகும், இது வெளியீட்டு" +" எண்ணின் வெவ்வேறு கூறுகளின் முக்கியத்துவத்தைப் பற்றிய இந்த விவரக்குறிப்பை விட " +"பரிந்துரைக்கப்படுகிறது. ஒரு திட்டம் சொற்பொருள் பதிப்பின் விவரங்களுக்கு கட்டுப்படக்கூடாது " +"என்று தேர்வுசெய்தாலும், மற்ற விநியோகங்களைப் பொறுத்து எழும் பல சிக்கல்களை இது " +"உள்ளடக்கியுள்ளதால், மற்றவர்கள் நம்பியிருக்கும் விநியோகத்தை வெளியிடும் போது இந்த திட்டம் " +"புரிந்து கொள்ளத்தக்கது." #: ../source/specifications/version-specifiers.rst:732 msgid "" @@ -20124,6 +28211,10 @@ msgid "" "specification) are fully compatible with the version scheme defined in this " "specification, and abiding by these aspects is encouraged." msgstr "" +"சொற்பொருள் பதிப்பின் (இந்த விவரக்குறிப்பில் \"மேசர்.மினோர்\" என விவரிக்கப்பட்டுள்ளது (" +"2.0.0 விவரக்குறிப்பில் 1-8 உட்பிரிவுகள்) இந்த விவரக்குறிப்பில் வரையறுக்கப்பட்ட பதிப்பு " +"திட்டத்துடன் முழுமையாக ஒத்துப்போகும், மேலும் இந்த அம்சங்களை பின்பற்றுவது " +"ஊக்குவிக்கப்படுகிறது." #: ../source/specifications/version-specifiers.rst:737 msgid "" @@ -20131,6 +28222,9 @@ msgid "" "sign (builds - clause 11) are *not* compatible with this specification and " "are not permitted in the public version field." msgstr "" +"ஒரு ஐபன் (முன் -வெளியீடுகள் - பிரிவு 10) அல்லது ஒரு பிளச் அடையாளம் (கட்டடங்கள் - பிரிவு" +" 11) கொண்ட சொற்பொருள் பதிப்புகள் * இந்த விவரக்குறிப்புடன் பொருந்தாது மற்றும் பொது பதிப்பு " +"துறையில் அனுமதிக்கப்படாது." #: ../source/specifications/version-specifiers.rst:741 msgid "" @@ -20138,15 +28232,19 @@ msgid "" "labels to compatible public versions is to use the ``.devN`` suffix to " "specify the appropriate version order." msgstr "" +"இதுபோன்ற சொற்பொருள் பதிப்பு அடிப்படையிலான மூல லேபிள்களை இணக்கமான பொது பதிப்புகளுக்கு " +"மொழிபெயர்ப்பதற்கான ஒரு வழிமுறை, பொருத்தமான பதிப்பு வரிசையைக் குறிப்பிட `` .devn`` " +"பின்னொட்டைப் பயன்படுத்துவது." #: ../source/specifications/version-specifiers.rst:745 msgid "" "Specific build information may also be included in local version labels." msgstr "" +"உள்ளக பதிப்பு லேபிள்களிலும் குறிப்பிட்ட உருவாக்க தகவல்கள் சேர்க்கப்படலாம்." #: ../source/specifications/version-specifiers.rst:751 msgid "DVCS based version labels" -msgstr "" +msgstr "டி.வி.சி.எச் அடிப்படையிலான பதிப்பு லேபிள்கள்" #: ../source/specifications/version-specifiers.rst:753 msgid "" @@ -20155,6 +28253,10 @@ msgid "" "As hashes cannot be ordered reliably such versions are not permitted in the " "public version field." msgstr "" +"பதிப்பு அடையாளங்காட்டிக்கு அடையாளம் காணும் ஆசைச் சேர்க்க பல உருவாக்க கருவிகள் அறிவிலி " +"மற்றும் மெர்குரியல் போன்ற விநியோகிக்கப்பட்ட பதிப்பு கட்டுப்பாட்டு அமைப்புகளுடன் " +"ஒருங்கிணைக்கின்றன. ஆச்களை நம்பத்தகுந்த வகையில் ஆர்டர் செய்ய முடியாது, இதுபோன்ற பதிப்புகள் " +"பொது பதிப்பு துறையில் அனுமதிக்கப்படாது." #: ../source/specifications/version-specifiers.rst:758 msgid "" @@ -20162,15 +28264,19 @@ msgid "" "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:762 msgid "" "Identifying hash information may also be included in local version labels." msgstr "" +"ஆச் தகவல்களை அடையாளம் காண்பது உள்ளக பதிப்பு லேபிள்களிலும் சேர்க்கப்படலாம்." #: ../source/specifications/version-specifiers.rst:766 msgid "Olson database versioning" -msgstr "" +msgstr "ஓல்சன் தரவுத்தள பதிப்பு" #: ../source/specifications/version-specifiers.rst:768 msgid "" @@ -20178,6 +28284,9 @@ msgid "" "Olson timezone database versioning scheme: the year followed by a lowercase " "character indicating the version of the database within that year." msgstr "" +"`` Pytz`` திட்டம் அதன் பதிப்புத் திட்டத்தை தொடர்புடைய ஓல்சன் டைம்சோன் தரவுத்தள பதிப்பு " +"திட்டத்திலிருந்து பெறுகிறது: அந்த ஆண்டுக்குள் தரவுத்தளத்தின் பதிப்பைக் குறிக்கும் சிறிய " +"எழுத்து ஆண்டு." #: ../source/specifications/version-specifiers.rst:772 msgid "" @@ -20186,46 +28295,51 @@ msgid "" "release) and is incremented with each subsequent database update within the " "year." msgstr "" +"இதை ஒரு இணக்கமான பொது பதிப்பு அடையாளங்காட்டிக்கு `` <ஆண்டு> என மொழிபெயர்க்கலாம்." #: ../source/specifications/version-specifiers.rst:777 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:784 msgid "" "A version specifier consists of a series of version clauses, separated by " "commas. For example::" msgstr "" +"ஒரு பதிப்பு விவரக்குறிப்பு தொடர்ச்சியான பதிப்பு உட்பிரிவுகளைக் கொண்டுள்ளது, இது " +"காற்புள்ளிகளால் பிரிக்கப்பட்டுள்ளது. உதாரணமாக ::" #: ../source/specifications/version-specifiers.rst:789 msgid "The comparison operator determines the kind of version clause:" -msgstr "" +msgstr "ஒப்பீட்டு ஆபரேட்டர் பதிப்பு விதிமுறையை தீர்மானிக்கிறது:" #: ../source/specifications/version-specifiers.rst:791 msgid "``~=``: `Compatible release`_ clause" -msgstr "" +msgstr "`` ~ = ``: `இணக்கமான வெளியீடு`_ பிரிவு" #: ../source/specifications/version-specifiers.rst:792 msgid "``==``: `Version matching`_ clause" -msgstr "" +msgstr "`` == ``: `பதிப்பு பொருந்தும்`_ பிரிவு" #: ../source/specifications/version-specifiers.rst:793 msgid "``!=``: `Version exclusion`_ clause" -msgstr "" +msgstr "``! = ``: `பதிப்பு விலக்கு`_ பிரிவு" #: ../source/specifications/version-specifiers.rst:794 msgid "``<=``, ``>=``: `Inclusive ordered comparison`_ clause" -msgstr "" +msgstr "`` <= ``, ``> = ``: `உள்ளடக்கிய உத்தரவிடப்பட்ட ஒப்பீடு`_ பிரிவு" #: ../source/specifications/version-specifiers.rst:795 msgid "``<``, ``>``: `Exclusive ordered comparison`_ clause" -msgstr "" +msgstr "`` <``, ``> ``: `பிரத்யேக உத்தரவிடப்பட்ட ஒப்பீடு`_ பிரிவு" #: ../source/specifications/version-specifiers.rst:796 msgid "``===``: `Arbitrary equality`_ clause." -msgstr "" +msgstr "`` === ``: `தன்னிச்சையான சமத்துவம்`_ பிரிவு." #: ../source/specifications/version-specifiers.rst:798 msgid "" @@ -20233,12 +28347,16 @@ msgid "" "version must match all given version clauses in order to match the specifier " "as a whole." msgstr "" +"கமா (\",\") ஒரு தர்க்கரீதியான ** மற்றும் ** ஆபரேட்டருக்கு சமம்: ஒரு வேட்பாளர் பதிப்பு " +"கொடுக்கப்பட்ட அனைத்து பதிப்பு உட்பிரிவுகளையும் பொருத்த வேண்டும்." #: ../source/specifications/version-specifiers.rst:802 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:805 msgid "" @@ -20248,6 +28366,11 @@ msgid "" "releases are considered as candidate versions SHOULD be handled as described " "in `Handling of pre-releases`_." msgstr "" +"பல வேட்பாளர் பதிப்புகள் ஒரு பதிப்பு விவரக்குறிப்புடன் பொருந்தும்போது, விருப்பமான பதிப்பு " +"நிலையான `பதிப்பு திட்டம்`_ ஆல் வரையறுக்கப்பட்ட நிலையான வரிசைப்படுத்தலால் நிர்ணயிக்கப்பட்ட " +"அண்மைக் கால பதிப்பாக இருக்க வேண்டும். முன் வெளியீடுகள் வேட்பாளர் பதிப்புகளாக " +"கருதப்படுகிறதா இல்லையா என்பது `முன் வெளியீடுகளை கையாளுதல்`_ இல் விவரிக்கப்பட்டுள்ளபடி " +"கையாளப்பட வேண்டும்." #: ../source/specifications/version-specifiers.rst:811 msgid "" @@ -20255,10 +28378,14 @@ msgid "" "permitted in version specifiers, and local version labels MUST be ignored " "entirely when checking if candidate versions match a given version specifier." msgstr "" +"கீழே குறிப்பாக குறிப்பிடப்பட்ட இடத்தைத் தவிர, உள்ளக பதிப்பு அடையாளங்காட்டிகள் பதிப்பு " +"குறிப்பான்களில் அனுமதிக்கப்படக்கூடாது, மேலும் வேட்பாளர் பதிப்புகள் கொடுக்கப்பட்ட பதிப்பு " +"விவரக்குறிப்புடன் பொருந்துமா என்பதைச் சரிபார்க்கும்போது உள்ளக பதிப்பு லேபிள்கள் முற்றிலும் " +"புறக்கணிக்கப்பட வேண்டும்." #: ../source/specifications/version-specifiers.rst:820 msgid "Compatible release" -msgstr "" +msgstr "இணக்கமான வெளியீடு" #: ../source/specifications/version-specifiers.rst:822 msgid "" @@ -20266,6 +28393,9 @@ msgid "" "``~=`` and a version identifier. It matches any candidate version that is " "expected to be compatible with the specified version." msgstr "" +"இணக்கமான வெளியீட்டு பிரிவு இணக்கமான வெளியீட்டு ஆபரேட்டர் `` ~ = `` மற்றும் பதிப்பு " +"அடையாளங்காட்டியைக் கொண்டுள்ளது. குறிப்பிட்ட பதிப்போடு இணக்கமாக இருக்கும் என்று " +"எதிர்பார்க்கப்படும் எந்த வேட்பாளர் பதிப்பையும் இது பொருந்துகிறது." #: ../source/specifications/version-specifiers.rst:826 msgid "" @@ -20273,22 +28403,28 @@ msgid "" "`Version scheme`_. Local version identifiers are NOT permitted in this " "version specifier." msgstr "" +"குறிப்பிட்ட பதிப்பு அடையாளங்காட்டி `பதிப்பு திட்டம்`_ இல் விவரிக்கப்பட்டுள்ள நிலையான " +"வடிவத்தில் இருக்க வேண்டும். இந்த பதிப்பு விவரக்குறிப்பில் உள்ளக பதிப்பு அடையாளங்காட்டிகள் " +"அனுமதிக்கப்படவில்லை." #: ../source/specifications/version-specifiers.rst:830 msgid "" "For a given release identifier ``V.N``, the compatible release clause is " "approximately equivalent to the pair of comparison clauses::" msgstr "" +"கொடுக்கப்பட்ட வெளியீட்டு அடையாளங்காட்டிக்கு `` v.n`` க்கு, இணக்கமான வெளியீட்டு விதிமுறை " +"ஒப்பீட்டு உட்பிரிவுகளின் சோடியுக்கு சமமானதாகும் ::" #: ../source/specifications/version-specifiers.rst:835 msgid "" "This operator MUST NOT be used with a single segment version number such as " "``~=1``." msgstr "" +"இந்த ஆபரேட்டர் `` ~ = 1`` போன்ற ஒற்றை பிரிவு பதிப்பு எண்ணுடன் பயன்படுத்தப்படக்கூடாது." #: ../source/specifications/version-specifiers.rst:838 msgid "For example, the following groups of version clauses are equivalent::" -msgstr "" +msgstr "எடுத்துக்காட்டாக, பதிப்பு உட்பிரிவுகளின் பின்வரும் குழுக்கள் சமமானவை ::" #: ../source/specifications/version-specifiers.rst:846 msgid "" @@ -20296,6 +28432,9 @@ msgid "" "compatible release clause as ``V.N.suffix``, then the suffix is ignored when " "determining the required prefix match::" msgstr "" +"ஒரு முன் வெளியீடு, வெளியீடு அல்லது மேம்பாட்டு வெளியீடு ஒரு இணக்கமான வெளியீட்டு பிரிவில் " +"`` v.n.suffix`` என பெயரிடப்பட்டால், தேவையான முன்னொட்டு பொருத்தத்தை தீர்மானிக்கும்போது " +"பின்னொட்டு புறக்கணிக்கப்படுகிறது ::" #: ../source/specifications/version-specifiers.rst:856 msgid "" @@ -20303,16 +28442,21 @@ msgid "" "degree of forward compatibility in a compatible release clause can be " "controlled by appending additional zeros to the version specifier::" msgstr "" +"வெளியீட்டு பிரிவு ஒப்பீடுகளுக்கான திணிப்பு விதிகள் என்பது இணக்கமான வெளியீட்டு பிரிவில் " +"முன்னோக்கி பொருந்தக்கூடிய அளவைக் கருதுவதன் மூலம் கூடுதல் பூச்சியங்களை பதிப்பில் சேர்ப்பதன் " +"மூலம் கட்டுப்படுத்த முடியும் ::" #: ../source/specifications/version-specifiers.rst:868 msgid "Version matching" -msgstr "" +msgstr "பதிப்பு பொருந்தும்" #: ../source/specifications/version-specifiers.rst:870 msgid "" "A version matching clause includes the version matching operator ``==`` and " "a version identifier." msgstr "" +"ஒரு பதிப்பு பொருந்தும் பிரிவில் பதிப்பு பொருந்தும் ஆபரேட்டர் `` == `` மற்றும் பதிப்பு " +"அடையாளங்காட்டி ஆகியவை அடங்கும்." #: ../source/specifications/version-specifiers.rst:873 msgid "" @@ -20320,6 +28464,9 @@ msgid "" "`Version scheme`_, but a trailing ``.*`` is permitted on public version " "identifiers as described below." msgstr "" +"குறிப்பிட்ட பதிப்பு அடையாளங்காட்டி `பதிப்பு திட்டம்`_ இல் விவரிக்கப்பட்டுள்ள நிலையான " +"வடிவத்தில் இருக்க வேண்டும், ஆனால் கீழே விவரிக்கப்பட்டுள்ளபடி பொது பதிப்பு " +"அடையாளங்காட்டிகளில்` `." #: ../source/specifications/version-specifiers.rst:877 msgid "" @@ -20329,6 +28476,10 @@ msgid "" "release segment to ensure the release segments are compared with the same " "length." msgstr "" +"இயல்பாக, பதிப்பு பொருந்தும் ஆபரேட்டர் கடுமையான சமத்துவ ஒப்பீட்டை அடிப்படையாகக் கொண்டது: " +"குறிப்பிட்ட பதிப்பு கோரப்பட்ட பதிப்பைப் போலவே இருக்க வேண்டும். வெளியீட்டுப் பிரிவுகள் ஒரே " +"நீளத்துடன் ஒப்பிடப்படுவதை உறுதிசெய்ய வெளியீட்டு பிரிவின் சுழிய திணிப்பு * மட்டுமே " +"செய்யப்படுகிறது." #: ../source/specifications/version-specifiers.rst:883 msgid "" @@ -20337,6 +28488,10 @@ msgid "" "issue warnings and MAY reject them entirely when strict version matches are " "used inappropriately." msgstr "" +"கண்டிப்பான பதிப்பு பொருத்தம் பொருத்தமானது இல்லையா என்பது பதிப்பு விவரக்குறிப்புக்கான " +"குறிப்பிட்ட பயன்பாட்டு வழக்கைப் பொறுத்தது. தானியங்கு கருவிகள் குறைந்தபட்சம் எச்சரிக்கைகளை " +"வழங்க வேண்டும், மேலும் கடுமையான பதிப்பு போட்டிகள் தகாத முறையில் பயன்படுத்தப்படும்போது " +"அவற்றை முழுமையாக நிராகரிக்கலாம்." #: ../source/specifications/version-specifiers.rst:888 msgid "" @@ -20347,6 +28502,12 @@ msgid "" "specified version includes only a release segment, then trailing components " "(or the lack thereof) in the release segment are also ignored." msgstr "" +"பதிப்பு பொருந்தும் பிரிவில் பதிப்பு அடையாளங்காட்டிக்கு `` `` `` என்ற பின்தங்கியதைச் " +"சேர்ப்பதன் மூலம், கடுமையான ஒப்பீட்டுக்கு பதிலாக முன்னொட்டு பொருத்தம் கோரப்படலாம். பதிப்பு " +"அடையாளங்காட்டி பிரிவுடன் பொருந்துகிறதா இல்லையா என்பதை தீர்மானிக்கும்போது கூடுதல் பின்தங்கி" +"ய பிரிவுகள் புறக்கணிக்கப்படும் என்பதே இதன் பொருள். குறிப்பிட்ட பதிப்பில் ஒரு வெளியீட்டு " +"பிரிவு மட்டுமே இருந்தால், வெளியீட்டு பிரிவில் உள்ள பின்வரும் கூறுகள் (அல்லது அதன் " +"பற்றாக்குறை) புறக்கணிக்கப்படுகின்றன." #: ../source/specifications/version-specifiers.rst:895 #: ../source/specifications/version-specifiers.rst:956 @@ -20354,6 +28515,8 @@ msgid "" "For example, given the version ``1.1.post1``, the following clauses would " "match or not as shown::" msgstr "" +"எடுத்துக்காட்டாக, பதிப்பு `` 1.1.post1`` கொடுக்கப்பட்டால், பின்வரும் உட்பிரிவுகள் " +"பொருந்தாது அல்லது காட்டப்பட்டுள்ளபடி இல்லை ::" #: ../source/specifications/version-specifiers.rst:902 msgid "" @@ -20361,6 +28524,8 @@ msgid "" "have an implied preceding ``.``, so given the version ``1.1a1``, the " "following clauses would match or not as shown::" msgstr "" +"முன்னொட்டு பொருத்தத்தின் நோக்கங்களுக்காக, வெளியீட்டுக்கு முந்தைய பிரிவு `` .`` க்கு முந்தை" +"ய ஒரு மறைமுகத்தைக் கொண்டிருப்பதாகக் கருதப்படுகிறது, எனவே பதிப்பு `` 1.1a1```" #: ../source/specifications/version-specifiers.rst:910 msgid "" @@ -20369,6 +28534,10 @@ msgid "" "identifiers). Given the version ``1.1``, the following clauses would match " "or not as shown::" msgstr "" +"ஒரு சரியான போட்டி ஒரு முன்னொட்டு போட்டியாகவும் கருதப்படுகிறது (இந்த விளக்கம் பதிப்பு " +"அடையாளங்காட்டிகளின் வெளியீட்டு பிரிவுக்கான வழக்கமான சுழிய திணிப்பு விதிகளால் " +"குறிக்கப்படுகிறது). பதிப்பு `` 1.1`` கொடுக்கப்பட்டால், பின்வரும் உட்பிரிவுகள் பொருந்தாது " +"அல்லது காட்டப்பட்டுள்ளபடி இல்லை ::" #: ../source/specifications/version-specifiers.rst:922 msgid "" @@ -20378,6 +28547,10 @@ msgid "" "version, and the local version is ignored for comparison purposes, so using " "either in a prefix match wouldn't make any sense." msgstr "" +"`` 1.0.dev1.*`` அல்லது `` 1.0+foo1.*`` போன்ற வளர்ச்சி அல்லது உள்ளக வெளியீட்டைக் கொண்ட " +"முன்னொட்டு பொருத்தத்தைக் கொண்டிருப்பது தவறானது.*``. இருந்தால், வளர்ச்சி வெளியீட்டு பிரிவு " +"எப்போதும் பொது பதிப்பில் இறுதிப் பகுதியாகும், மேலும் உள்ளக பதிப்பு ஒப்பீட்டு நோக்கங்களுக்கா" +"க புறக்கணிக்கப்படுகிறது, எனவே முன்னொட்டு போட்டியில் பயன்படுத்துவது எந்த அர்த்தமும் இல்லை." #: ../source/specifications/version-specifiers.rst:928 msgid "" @@ -20388,6 +28561,12 @@ msgid "" "for repeatable *deployments of applications* while using a shared " "distribution index." msgstr "" +"வெளியிடப்பட்ட விநியோகங்களுக்கான சார்புகளை வரையறுக்கும் போது `` == `` (குறைந்தபட்சம் " +"வைல்டு அட்டை பின்னொட்டு இல்லாமல்) பயன்பாடு பாதுகாப்புத் திருத்தங்களை வரிசைப்படுத்துவதை " +"பெரிதும் சிக்கலாக்குவதால் கடுமையாக ஊக்கமளிக்கிறது. பகிரப்பட்ட விநியோகக் குறியீட்டைப் " +"பயன்படுத்தும் போது மீண்டும் மீண்டும் செய்யக்கூடிய * பயன்பாடுகளின் வரிசைப்படுத்தல்களுக்கான " +"சார்புகளை வரையறுக்கும் போது கடுமையான பதிப்பு ஒப்பீட்டு ஆபரேட்டர் முதன்மையாக பயன்பாட்டிற்கா" +"க கருதப்படுகிறது." #: ../source/specifications/version-specifiers.rst:935 msgid "" @@ -20395,6 +28574,9 @@ msgid "" "version label), then the local version label of any candidate versions MUST " "be ignored when matching versions." msgstr "" +"குறிப்பிட்ட பதிப்பு அடையாளங்காட்டி ஒரு பொது பதிப்பு அடையாளங்காட்டி (உள்ளூர் பதிப்பு " +"சிட்டை இல்லை) என்றால், எந்த வேட்பாளர் பதிப்புகளின் உள்ளக பதிப்பு சிட்டை பதிப்புகளுடன் " +"பொருந்தும்போது புறக்கணிக்கப்பட வேண்டும்." #: ../source/specifications/version-specifiers.rst:939 msgid "" @@ -20404,16 +28586,23 @@ msgid "" "above, and the local version label being checked for equivalence using a " "strict string equality comparison." msgstr "" +"குறிப்பிட்ட பதிப்பு அடையாளங்காட்டி ஒரு உள்ளக பதிப்பு அடையாளங்காட்டியாக இருந்தால், " +"பதிப்புகளுடன் பொருந்தும்போது வேட்பாளர் பதிப்புகளின் உள்ளக பதிப்பு லேபிள்கள் கருத்தில் கொள்ளப்" +"பட வேண்டும், மேலே விவரிக்கப்பட்டபடி பொது பதிப்பு அடையாளங்காட்டி பொருந்தும், மேலும் உள்ளக " +"பதிப்பு சிட்டை ஒரு கடுமையான சரம் சமத்துவ ஒப்பீட்டைப் பயன்படுத்தி சமநிலைக்கு " +"சரிபார்க்கப்படுகிறது." #: ../source/specifications/version-specifiers.rst:947 msgid "Version exclusion" -msgstr "" +msgstr "பதிப்பு விலக்கு" #: ../source/specifications/version-specifiers.rst:949 msgid "" "A version exclusion clause includes the version exclusion operator ``!=`` " "and a version identifier." msgstr "" +"பதிப்பு விலக்கு பிரிவில் பதிப்பு விலக்கு ஆபரேட்டர் ``! = `` மற்றும் பதிப்பு " +"அடையாளங்காட்டி ஆகியவை அடங்கும்." #: ../source/specifications/version-specifiers.rst:952 msgid "" @@ -20421,10 +28610,12 @@ msgid "" "those of the `Version matching`_ operator, except that the sense of any " "match is inverted." msgstr "" +"அனுமதிக்கப்பட்ட பதிப்பு அடையாளங்காட்டிகள் மற்றும் ஒப்பீட்டு சொற்பொருள்கள் `பதிப்பு பொருத்துதல்`" +"_ ஆபரேட்டருக்கு சமமானவை, தவிர எந்தவொரு போட்டியின் உணர்வும் தலைகீழாக உள்ளது." #: ../source/specifications/version-specifiers.rst:965 msgid "Inclusive ordered comparison" -msgstr "" +msgstr "உள்ளடக்கிய உத்தரவிட்ட ஒப்பீடு" #: ../source/specifications/version-specifiers.rst:967 msgid "" @@ -20434,10 +28625,15 @@ msgid "" "specified version given the consistent ordering defined by the standard " "`Version scheme`_." msgstr "" +"உள்ளடக்கிய ஆர்டர் செய்யப்பட்ட ஒப்பீட்டு பிரிவில் ஒரு ஒப்பீட்டு ஆபரேட்டர் மற்றும் பதிப்பு " +"அடையாளங்காட்டி ஆகியவை அடங்கும், மேலும் வேட்பாளர் பதிப்பின் ஒப்பீட்டு நிலை மற்றும் நிலையான " +"`பதிப்பு திட்டம்`_ ஆல் வரையறுக்கப்பட்ட நிலையான வரிசைப்படுத்தல் கொடுக்கப்பட்ட குறிப்பிட்ட " +"பதிப்பின் அடிப்படையில் ஒப்பீடு சரியானதாக இருக்கும் எந்த பதிப்பையும் பொருத்துகிறது." #: ../source/specifications/version-specifiers.rst:973 msgid "The inclusive ordered comparison operators are ``<=`` and ``>=``." msgstr "" +"உள்ளடக்கிய உத்தரவிடப்பட்ட ஒப்பீட்டு ஆபரேட்டர்கள் `` <= `` மற்றும் ``> = ``." #: ../source/specifications/version-specifiers.rst:975 #: ../source/specifications/version-specifiers.rst:1005 @@ -20445,15 +28641,18 @@ 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:978 #: ../source/specifications/version-specifiers.rst:1008 msgid "Local version identifiers are NOT permitted in this version specifier." msgstr "" +"இந்த பதிப்பு விவரக்குறிப்பில் உள்ளக பதிப்பு அடையாளங்காட்டிகள் அனுமதிக்கப்படவில்லை." #: ../source/specifications/version-specifiers.rst:982 msgid "Exclusive ordered comparison" -msgstr "" +msgstr "பிரத்தியேக உத்தரவிடப்பட்ட ஒப்பீடு" #: ../source/specifications/version-specifiers.rst:984 msgid "" @@ -20464,6 +28663,11 @@ msgid "" "specifically exclude pre-releases, post-releases, and local versions of the " "specified version." msgstr "" +"பிரத்தியேக ஆர்டர் செய்யப்பட்ட ஒப்பீடுகள் ``> `` மற்றும் `` <`` ஆகியவை உள்ளடக்கிய " +"உத்தரவிடப்பட்ட ஒப்பீடுகளுக்கு ஒத்தவை, அவை வேட்பாளர் பதிப்பின் ஒப்பீட்டு நிலையை நம்பியுள்ளன, " +"மேலும் நிலையான `பதிப்பு திட்டம்`_ ஆல் வரையறுக்கப்பட்ட நிலையான வரிசைப்படுத்தல் கொடுக்கப்பட்" +"ட குறிப்பிட்ட பதிப்பாகும். இருப்பினும், அவை குறிப்பிட்ட பதிப்பின் முன் வெளியீடுகள், பிந்தை" +"ய வெளியீடுகள் மற்றும் உள்ளக பதிப்புகளை குறிப்பாக விலக்குகின்றன." #: ../source/specifications/version-specifiers.rst:990 msgid "" @@ -20474,12 +28678,20 @@ msgid "" "``1.7.1`` but not ``1.7.0.post1`` and ``>1.7.post2`` will allow ``1.7.1`` " "and ``1.7.0.post3`` but not ``1.7.0``." msgstr "" +"பிரத்யேக உத்தரவிடப்பட்ட ஒப்பீடு ``> v`` ** ** கொடுக்கப்பட்ட பதிப்பின் பிந்தைய வெளியீட்டை " +"அனுமதிக்கக்கூடாது `` v`` ஒரு இடுகை வெளியீடு. ``> V.postn`` ஐப் பயன்படுத்துவதன் மூலம் " +"கூடுதல் இடுகை வெளியீடுகள் உட்பட ஒரு குறிப்பிட்ட இடுகை வெளியீட்டை விட வெளியீடுகள் பின்னர் " +"இருக்க வேண்டும் என்று நீங்கள் கட்டளையிடலாம். எடுத்துக்காட்டாக, ``> 1.7`` `` 1.7.1`` ஆனால் " +"`` 1.7.0.post1`` மற்றும் `> 1.7.post2`` ஐ அனுமதிக்கும்` `1.7.1``` மற்றும்` " +"`1.7.0.post3`` அல்ல, ஆனால்` `1.7.0``." #: ../source/specifications/version-specifiers.rst:997 msgid "" "The exclusive ordered comparison ``>V`` **MUST NOT** match a local version " "of the specified version." msgstr "" +"பிரத்யேக ஆர்டர் செய்யப்பட்ட ஒப்பீடு ``> v`` ** குறிப்பிட்ட பதிப்பின் உள்ளக பதிப்போடு " +"பொருந்தக்கூடாது." #: ../source/specifications/version-specifiers.rst:1000 msgid "" @@ -20488,10 +28700,14 @@ msgid "" "Allowing pre-releases that are earlier than, but not equal to a specific pre-" "release may be accomplished by using ``=`` entry as part " "of the URL fragment." msgstr "" +"மூல காப்பகம் மற்றும் சக்கர குறிப்புகளுக்கு, `` <ஆச்-அல்காரிதம்> = <எதிர்பார்க்கப்படும்-ஆச்> " +"`` முகவரி துண்டின் ஒரு பகுதியாக நுழைவு ஆகியவற்றைச் சேர்ப்பதன் மூலம் எதிர்பார்க்கப்படும் ஆச்" +" மதிப்பு குறிப்பிடப்படலாம்." #: ../source/specifications/version-specifiers.rst:1129 msgid "" @@ -20700,6 +28988,12 @@ msgid "" "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:1135 msgid "" @@ -20708,6 +29002,9 @@ msgid "" "end of the URL using the ``@`` or the ``@#`` " "notation." msgstr "" +"முகவரி இல் நேரடியாக கமிட் அல்லது டேக் குறிப்புகள் உட்பட ஆதரிக்காத பதிப்பு கட்டுப்பாட்டு " +"அமைப்புகளைக் கையாள, அந்த செய்தி `` `<கமிட்-ஆச்>` அல்லது ``@<குறிச்சொல்>#<கமிட்-ஆச்> `` " +"குறியீட்டைப் பயன்படுத்தி முகவரி இன் முடிவில் சேர்க்கப்படலாம்." #: ../source/specifications/version-specifiers.rst:1142 msgid "" @@ -20719,14 +29016,21 @@ msgid "" "a malicious repo with a particular tag is easy, creating one with a specific " "*hash*, less so)." msgstr "" +"இது PIP ஆல் ஆதரிக்கப்படும் தற்போதுள்ள பகஅ குறிப்பு குறியீட்டைப் போலவே இல்லை. முதலாவதாக, " +"விநியோக பெயர் முகவரி இன் ஒரு பகுதியாக உட்பொதிக்கப்பட்டதை விட முன்னால் நகர்த்தப்படுகிறது" +". இரண்டாவதாக, ஒரு குறிச்சொல்லின் அடிப்படையில் மீட்டெடுக்கும்போது கூட, கமிட் ஆச் " +"சேர்க்கப்பட்டுள்ளது, மேலே உள்ள தேவையை நிறைவு செய்வதற்காக *ஒவ்வொரு *இணைப்பும் விசயங்களை " +"உருவாக்க கடினமாக இருக்க ஒரு ஆச் இருக்க வேண்டும் (ஒரு குறிப்பிட்ட குறிச்சொல்லுடன் " +"தீங்கிழைக்கும் ரெப்போவை உருவாக்குவது எளிதானது, ஒரு குறிப்பிட்ட *ஆச் *உடன் ஒன்றை " +"உருவாக்குகிறது, குறைவாக)." #: ../source/specifications/version-specifiers.rst:1150 msgid "Remote URL examples::" -msgstr "" +msgstr "தொலைநிலை முகவரி எடுத்துக்காட்டுகள் ::" #: ../source/specifications/version-specifiers.rst:1158 msgid "File URLs" -msgstr "" +msgstr "கோப்பு முகவரி கள்" #: ../source/specifications/version-specifiers.rst:1160 msgid "" @@ -20735,6 +29039,10 @@ msgid "" "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:1165 msgid "" @@ -20743,6 +29051,10 @@ msgid "" "current machine believes matches its own host. In other words, on \\*nix the " "``file://`` scheme can only be used to access paths on the local machine." msgstr "" +"பல்வேறு \\*நிக்ச் இயக்க முறைமைகளில், `` <ஓச்ட்> `` க்கான ஒரே அனுமதிக்கப்பட்ட மதிப்புகள், " +"அதைத் தவிர்க்க வேண்டும், `` உள்ளக ஓச்ட்`` அல்லது தற்போதைய இயந்திரம் நம்பும் மற்றொரு fqdn அதன்" +" சொந்த ஓச்டுடன் பொருந்துகிறது. வேறு வார்த்தைகளில் கூறுவதானால், `` கோப்பு: // `` " +"திட்டத்தை உள்ளக கணினியில் பாதைகளை அணுக மட்டுமே பயன்படுத்த முடியும்." #: ../source/specifications/version-specifiers.rst:1170 msgid "" @@ -20755,10 +29067,18 @@ msgid "" "see `MSDN `_." msgstr "" +"சாளரங்களில் கோப்பு வடிவத்தில் `` `` (எ.கா. `` `` கோப்பு: /// " +"சி:/பாத்/டு/ஏ/கோப்பு``) இன் ஒரு பகுதியாக பொருந்தினால் இயக்கி கடிதத்தை சேர்க்க வேண்டும். " +"சாளரங்களில் \\*நிக்ச் போலல்லாமல் `` <ஓச்ட்> `` பிணையம் பங்கில் வசிக்கும் கோப்பைக் குறிப்பிட " +"அளவுரு பயன்படுத்தப்படலாம். வேறு வார்த்தைகளில் கூறுவதானால், `` \\\\ இயந்திர \\ தொகுதி " +"\\ கோப்பு`` ஒரு `` கோப்பு: // `` முகவரி க்கு மொழிபெயர்க்க, இது `` கோப்பு: // " +"இயந்திரம்/தொகுதி/கோப்பு`` என முடிவடையும். சாளரங்களில் `` கோப்பு: // `` urls பற்றிய " +"கூடுதல் தகவலுக்கு `msdtn `_ project):" msgstr "" +"பதிப்பு அடையாளங்காட்டியின் கூறுகளைப் பிரித்தெடுக்க, பின்வரும் வழக்கமான வெளிப்பாட்டைப் " +"பயன்படுத்தவும் (`பேக்கேசிங் _ _ திட்டம்):" #: ../source/specifications/version-specifiers.rst:1268 msgid "August 2014: This specification was approved through :pep:`440`." -msgstr "" +msgstr "ஆகச்ட் 2014: இந்த விவரக்குறிப்பு அங்கீகரிக்கப்பட்டது: PEP: `440`." #: ../source/specifications/virtual-environments.rst:6 msgid "Python Virtual Environments" -msgstr "" +msgstr "பைதான் மெய்நிகர் சூழல்கள்" #: ../source/specifications/virtual-environments.rst:8 msgid "" @@ -20833,10 +29176,17 @@ msgid "" "environments existed prior to this update, there was no previously " "standardised mechanism for declaring or discovering them." msgstr "" +"பைதான் 3.3 மற்றும் பின்னர் பதிப்புகளுக்கு,: PEP: `405`\" பைதான் மெய்நிகர் சூழல்கள் \"என்ற " +"கருத்துக்கு மொழிபெயர்ப்பாளர் நிலை ஆதரவை அறிமுகப்படுத்தியது. ஒவ்வொரு மெய்நிகர் சூழலும் " +"அதன் சொந்த பைதான் பைனரி (பல்வேறு பைதான் பதிப்புகளுடன் சூழல்களை உருவாக்க அனுமதிக்கிறது) " +"மற்றும் அதன் தள கோப்பகங்களில் நிறுவப்பட்ட பைதான் தொகுப்புகளின் சொந்த சுயாதீனமான தொகுப்பைக் " +"கொண்டிருக்கலாம், ஆனால் நிலையான நூலகத்தை அடிப்படை நிறுவப்பட்ட பைத்தானுடன் பகிர்ந்து " +"கொள்கிறது. இந்த புதுப்பிப்புக்கு முன்னர் மெய்நிகர் சூழல்களின் கருத்து இருந்தபோதிலும், அவற்றை" +" அறிவிக்க அல்லது கண்டுபிடிப்பதற்கு முன்னர் தரப்படுத்தப்பட்ட வழிமுறை எதுவும் இல்லை." #: ../source/specifications/virtual-environments.rst:18 msgid "Runtime detection of virtual environments" -msgstr "" +msgstr "மெய்நிகர் சூழல்களின் இயக்க நேர கண்டறிதல்" #: ../source/specifications/virtual-environments.rst:20 msgid "" @@ -20845,6 +29195,10 @@ msgid "" "different value from :py:data:`sys.base_prefix` (the default filesystem " "location of the standard library directories)." msgstr "" +"இயக்க நேரத்தில், மெய்நிகர் சூழல்களை நற்பண்பால் அடையாளம் காணலாம்: PY: தரவு: `sys.prefix` " +"(இயங்கும் மொழிபெயர்ப்பாளரின் கோப்பு முறைமை இருப்பிடம்) வேறுபட்ட மதிப்பைக் கொண்டுள்ளது: py:" +" தரவு:` sys.base_prefix` (நிலையான நூலக இயக்குநர்களின் இயல்புநிலை கோப்பு முறைமை " +"இருப்பிடம்)." #: ../source/specifications/virtual-environments.rst:25 msgid "" @@ -20855,10 +29209,15 @@ msgid "" "be reliably used to detect whether a Python program is running in a virtual " "environment or not)." msgstr "" +":ref:`venv-explanation` in the பைதான் தரநிலை library ஆவணப்படுத்துதல் க்கு the " +":py:mod:`venv` தொகுதி மறையம் this along with the concept of \"activating\" a " +"virtual சூழல் in an interactive operating மண்டலம் ஓடு (this activation படி is " +"விரும்பினால் and hence the changes it makes can't be reliably used பெறுநர் " +"detect whether a பைதான் திட்டம் is running in a virtual சூழல் or not)." #: ../source/specifications/virtual-environments.rst:33 msgid "Declaring installation environments as Python virtual environments" -msgstr "" +msgstr "நிறுவல் சூழல்களை பைதான் மெய்நிகர் சூழல்களாக அறிவித்தல்" #: ../source/specifications/virtual-environments.rst:35 msgid "" @@ -20868,6 +29227,10 @@ msgid "" "a ``home`` key that indicates where to find the Python standard library " "modules." msgstr "" +"இதில் விவரிக்கப்பட்டுள்ளபடி: PEP: `405`, ஒரு பைதான் மெய்நிகர் சூழலில் அதன் எளிமையான " +"வடிவத்தில் ஒரு` `தள-பேக்கேச்கள்` கோப்பகம் மற்றும் ஒரு` `pyvenv.cfg` கோப்புடன் ஒரு` " +"`pyvenv.cfg` கோப்புடன் ஒரு` `` pyvenv.cfg` கோப்புடன் ஒரு `` pyvenv.cfg` கோப்புடன் " +"ஒரு நகல் அல்லது சிம்லிங்க் ஆகியவற்றைத் தவிர வேறொன்றையும் கொண்டிருக்கவில்லை." #: ../source/specifications/virtual-environments.rst:40 msgid "" @@ -20877,6 +29240,10 @@ msgid "" "that they are already operating in a virtual environment and no further " "environment nesting is required or desired." msgstr "" +"தரத்தின் தேவைகளைப் நிறைவு செய்ய வடிவமைக்கப்பட்டிருந்தாலும்: PY: MOD: `VEV` தொகுதி, இந்" +"த பிளவு நிறுவல் மற்றும்` `pyvenv.cfg`` கோப்பு அணுகுமுறை ஆகியவை * எந்த * பைதான் " +"நிறுவல் வழங்குநரால் பயன்படுத்தப்படலாம், அவை பைதான்-குறிப்பிட்ட கருவிகளை ஏற்கனவே ஒரு " +"மெய்நிகர் சூழலில் இயங்குகின்றன, மேலும் எந்தவொரு சூழலும் தேவையில்லை அல்லது தேவையில்லை." #: ../source/specifications/virtual-environments.rst:46 msgid "" @@ -20887,14 +29254,16 @@ msgid "" "in :py:mod:`sysconfig`, will be detected and behave as a Python virtual " "environment." msgstr "" +"`` Pyvenv.cfg`` கோப்பு இல்லாத நிலையில் கூட, எந்தவொரு அணுகுமுறையும் (எ.கா. : py: " +"mod: `sysconfig`, கண்டறியப்பட்டு பைதான் மெய்நிகர் சூழலாக நடந்து கொள்ளும்." #: ../source/specifications/virtual-environments.rst:56 msgid "May 2012: This specification was approved through :pep:`405`." -msgstr "" +msgstr "மே 2012: இந்த விவரக்குறிப்பு மூலம் அங்கீகரிக்கப்பட்டது: PEP: `405`." #: ../source/specifications/well-known-project-urls.rst:5 msgid "Well-known Project URLs in Metadata" -msgstr "" +msgstr "மெட்டாடேட்டாவில் நன்கு அறியப்பட்ட திட்ட முகவரி கள்" #: ../source/specifications/well-known-project-urls.rst:9 msgid "" @@ -20902,6 +29271,9 @@ msgid "" "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 "" @@ -20910,6 +29282,11 @@ msgid "" "``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 "" @@ -20917,10 +29294,13 @@ msgid "" "for user-oriented guidance on choosing project URL labels in your package's " "metadata." msgstr "" +"காண்க: குறிப்பு: `உங்கள் pyproject.toml-URL கள் <எழுதுதல்-pyproject-toml-urls>` " +"உங்கள் தொகுப்பின் மெட்டாடேட்டாவில் திட்ட முகவரி லேபிள்களைத் தேர்ந்தெடுப்பதற்கான பயனர் சார்ந்த " +"வழிகாட்டுதலுக்காக." #: ../source/specifications/well-known-project-urls.rst:26 msgid "This specification was originally defined in :pep:`753`." -msgstr "" +msgstr "இந்த விவரக்குறிப்பு முதலில் வரையறுக்கப்பட்டது: PEP: `753`." #: ../source/specifications/well-known-project-urls.rst:28 msgid "" @@ -20931,22 +29311,26 @@ msgid "" "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 "" +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 "" @@ -20954,214 +29338,234 @@ msgid "" "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 "" +"`` Project-URL`` லேபிள்களுக்கான இயல்பாக்க செயல்முறை பின்வரும் பைதான் செயல்பாட்டால் " +"வரையறுக்கப்படுகிறது:" #: ../source/specifications/well-known-project-urls.rst:65 msgid "" "In plain language: a label is *normalized* by deleting all ASCII punctuation " "and whitespace, and then converting the result to lowercase." msgstr "" +"எளிய மொழியில்: அனைத்து ASCII நிறுத்தற்குறி மற்றும் இடைவெளிகளையும் நீக்குவதன் மூலம் ஒரு " +"சிட்டை * இயல்பாக்கப்பட்டது *, பின்னர் முடிவை சிறிய எழுத்துக்கு மாற்றுகிறது." #: ../source/specifications/well-known-project-urls.rst:68 msgid "" "The following table shows examples of labels before (raw) and after " "normalization:" msgstr "" +"பின்வரும் அட்டவணை லேபிள்களின் எடுத்துக்காட்டுகளை (மூல) மற்றும் இயல்பாக்கத்திற்குப் பிறகு " +"காட்டுகிறது:" #: ../source/specifications/well-known-project-urls.rst:74 msgid "Raw" -msgstr "" +msgstr "மூல" #: ../source/specifications/well-known-project-urls.rst:75 msgid "Normalized" -msgstr "" +msgstr "இயல்பாக்கப்பட்டது" #: ../source/specifications/well-known-project-urls.rst:76 msgid "``Homepage``" -msgstr "" +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 "" +msgstr "`` முகப்புப்பக்கம்``" #: ../source/specifications/well-known-project-urls.rst:78 msgid "``Home-page``" -msgstr "" +msgstr "`` முகப்பு-பக்கம்``" #: ../source/specifications/well-known-project-urls.rst:80 msgid "``Home page``" -msgstr "" +msgstr "`` முகப்பு பக்கம்``" #: ../source/specifications/well-known-project-urls.rst:82 msgid "``Change_Log``" -msgstr "" +msgstr "`` மாற்றம்_லாக்``" #: ../source/specifications/well-known-project-urls.rst:83 msgid "``changelog``" -msgstr "" +msgstr "`` சேஞ்ச்லாக்``" #: ../source/specifications/well-known-project-urls.rst:84 msgid "``What's New?``" -msgstr "" +msgstr "`` புதியது என்ன? ``" #: ../source/specifications/well-known-project-urls.rst:85 msgid "``whatsnew``" -msgstr "" +msgstr "`` வாட்ச்நியூ``" #: ../source/specifications/well-known-project-urls.rst:86 #: ../source/specifications/well-known-project-urls.rst:87 msgid "``github``" -msgstr "" +msgstr "`` கிடினப்``" #: ../source/specifications/well-known-project-urls.rst:92 msgid "Well-known labels" -msgstr "" +msgstr "நன்கு அறியப்பட்ட லேபிள்கள்" #: ../source/specifications/well-known-project-urls.rst:96 msgid "" "The list of well-known labels is a living standard, maintained as part of " "this document." msgstr "" +"நன்கு அறியப்பட்ட லேபிள்களின் பட்டியல் ஒரு வாழ்க்கைத் தரமாகும், இது இந்த ஆவணத்தின் ஒரு " +"பகுதியாக பராமரிக்கப்படுகிறது." #: ../source/specifications/well-known-project-urls.rst:99 msgid "" "The following table lists labels that are well-known for the purpose of " "specializing the presentation of ``Project-URL`` metadata:" msgstr "" +"`` Project-URL`` மெட்டாடேட்டாவின் விளக்கக்காட்சியை நிபுணத்துவம் பெறுவதற்கான நோக்கத்திற்கா" +"க நன்கு அறியப்பட்ட லேபிள்களை பின்வரும் அட்டவணை பட்டியலிடுகிறது:" #: ../source/specifications/well-known-project-urls.rst:105 msgid "Label (Human-readable equivalent)" -msgstr "" +msgstr "சிட்டை (மனிதனால் படிக்கக்கூடிய சமமான)" #: ../source/specifications/well-known-project-urls.rst:107 msgid "Aliases" -msgstr "" +msgstr "மாற்றுப்பெயர்கள்" #: ../source/specifications/well-known-project-urls.rst:108 msgid "``homepage`` (Homepage)" -msgstr "" +msgstr "`` முகப்புப்பக்கத்தை` (முகப்புப்பக்கம்)" #: ../source/specifications/well-known-project-urls.rst:109 msgid "The project's home page" -msgstr "" +msgstr "திட்டத்தின் முகப்பு பக்கம்" #: ../source/specifications/well-known-project-urls.rst:110 #: ../source/specifications/well-known-project-urls.rst:116 #: ../source/specifications/well-known-project-urls.rst:122 msgid "*(none)*" -msgstr "" +msgstr "*(எதுவுமில்லை)*" #: ../source/specifications/well-known-project-urls.rst:111 msgid "``source`` (Source Code)" -msgstr "" +msgstr "`` மூல`` (மூலக் குறியீடு)" #: ../source/specifications/well-known-project-urls.rst:112 msgid "The project's hosted source code or repository" -msgstr "" +msgstr "திட்டத்தின் புரவலன் செய்யப்பட்ட மூலக் குறியீடு அல்லது களஞ்சியம்" #: ../source/specifications/well-known-project-urls.rst:113 msgid "``repository``, ``sourcecode``, ``github``" -msgstr "" +msgstr "`` களஞ்சியம்``, `` சோர்ச் கோட்``, `` கிதுப்``" #: ../source/specifications/well-known-project-urls.rst:114 msgid "``download`` (Download)" -msgstr "" +msgstr "`` பதிவிறக்கம்`` (பதிவிறக்கம்)" #: ../source/specifications/well-known-project-urls.rst:115 msgid "" "A download URL for the current distribution, equivalent to ``Download-URL``" msgstr "" +"தற்போதைய விநியோகத்திற்கான பதிவிறக்க முகவரி, `` பதிவிறக்கம்-url`` க்கு சமம்" #: ../source/specifications/well-known-project-urls.rst:117 msgid "``changelog`` (Changelog)" -msgstr "" +msgstr "`` சேஞ்ச்லாக்`` (சேஞ்ச்லாக்)" #: ../source/specifications/well-known-project-urls.rst:118 msgid "The project's comprehensive changelog" -msgstr "" +msgstr "திட்டத்தின் விரிவான சேஞ்ச்லாக்" #: ../source/specifications/well-known-project-urls.rst:119 msgid "``changes``, ``whatsnew``, ``history``" -msgstr "" +msgstr "`` மாற்றங்கள்``, `` வாட்ச்நியூ``, `` வரலாறு``" #: ../source/specifications/well-known-project-urls.rst:120 msgid "``releasenotes`` (Release Notes)" -msgstr "" +msgstr "`` வெளியீட்டு குறிப்புகள்)" #: ../source/specifications/well-known-project-urls.rst:121 msgid "The project's curated release notes" -msgstr "" +msgstr "திட்டத்தின் நிர்வகிக்கப்பட்ட வெளியீட்டுக் குறிப்புகள்" #: ../source/specifications/well-known-project-urls.rst:123 msgid "``documentation`` (Documentation)" -msgstr "" +msgstr "`` ஆவணங்கள்`` (ஆவணங்கள்)" #: ../source/specifications/well-known-project-urls.rst:124 msgid "The project's online documentation" -msgstr "" +msgstr "திட்டத்தின் நிகழ்நிலை ஆவணங்கள்" #: ../source/specifications/well-known-project-urls.rst:125 msgid "``docs``" -msgstr "" +msgstr "`` டாக்ச்``" #: ../source/specifications/well-known-project-urls.rst:126 msgid "``issues`` (Issue Tracker)" -msgstr "" +msgstr "`` சிக்கல்கள்`` (டிராக்கர் வெளியீடு)" #: ../source/specifications/well-known-project-urls.rst:127 msgid "The project's bug tracker" -msgstr "" +msgstr "திட்டத்தின் பிழை டிராக்கர்" #: ../source/specifications/well-known-project-urls.rst:128 msgid "``bugs``, ``issue``, ``tracker``, ``issuetracker``, ``bugtracker``" msgstr "" +"`` பிழைகள்``, `` வெளியீடு``, `` டிராக்கர்``, `` issuetracker``, `` bugtracker``" #: ../source/specifications/well-known-project-urls.rst:129 msgid "``funding`` (Funding)" -msgstr "" +msgstr "`` நிதி`` (நிதி)" #: ../source/specifications/well-known-project-urls.rst:130 msgid "Funding Information" -msgstr "" +msgstr "பொருள் செய்தி" #: ../source/specifications/well-known-project-urls.rst:131 msgid "``sponsor``, ``donate``, ``donation``" -msgstr "" +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 "" +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 "" +"`` Pyproject.toml`` இலிருந்து கோர் மெட்டாடேட்டாவிலிருந்து சாத்தியமான குறியீட்டு " +"விளக்கக்காட்சிக்கு திட்ட முகவரி மெட்டாடேட்டாவின் ஓட்டத்தை பின்வருவது காட்டுகிறது:" #: ../source/specifications/well-known-project-urls.rst:142 msgid "Example project URLs in standard configuration" -msgstr "" +msgstr "நிலையான உள்ளமைவில் எடுத்துக்காட்டு திட்ட முகவரி கள்" #: ../source/specifications/well-known-project-urls.rst:151 msgid "Core metadata representation" -msgstr "" +msgstr "கோர் மேனிலை தரவு பிரதிநிதித்துவம்" #: ../source/specifications/well-known-project-urls.rst:159 msgid "Potential rendering" -msgstr "" +msgstr "சாத்தியமான வழங்குதல்" #: ../source/specifications/well-known-project-urls.rst:167 msgid "" @@ -21170,37 +29574,49 @@ msgid "" "*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 "" +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 "" @@ -21209,10 +29625,12 @@ msgid "" "template=general_issue.yml>`_ on the `packaging-problems `_ repository on GitHub." msgstr "" +"இன்னும் பொதுவான ஒன்றுக்கு, அல்லது உங்களுக்குத் தெரியாதபோது, தயவுசெய்து ஒரு சிக்கலைத் " +"திறக்கவும் `_ instead." msgstr "" +"இந்த டுடோரியல் பேக்கேசிங் தொடர்பானது அல்ல, ஏனெனில் இது அளவிடப்படவில்லை. அதற்கு பதிலாக " +"`ச்பின்க்ச் டுடோரியல் _ _ ஐப் " +"பார்க்கவும்." #: ../source/tutorials/index.rst:4 msgid "" @@ -21227,16 +29648,21 @@ msgid "" "with packaging concepts. For more detailed information on specific packaging " "topics, see :doc:`/guides/index`." msgstr "" +"** பயிற்சிகள் ** பேக்கேசிங் கருத்துக்களை நன்கு அறிந்து கொள்ள உதவும் படிப்படியான " +"வழிகாட்டிகள். குறிப்பிட்ட பேக்கேசிங் தலைப்புகள் பற்றிய விரிவான தகவலுக்கு, காண்க: DOC: " +"`/வழிகாட்டிகள்/குறியீட்டு`." #: ../source/tutorials/installing-packages.rst:5 msgid "Installing Packages" -msgstr "" +msgstr "தொகுப்புகளை நிறுவுதல்" #: ../source/tutorials/installing-packages.rst:7 msgid "" "This section covers the basics of how to install Python :term:`packages " "`." msgstr "" +"இந்த பிரிவு பைத்தானை எவ்வாறு நிறுவுவது என்பதற்கான அடிப்படைகளை உள்ளடக்கியது: கால: " +"`தொகுப்புகள் <விநியோக தொகுப்பு>`." #: ../source/tutorials/installing-packages.rst:10 msgid "" @@ -21250,26 +29676,39 @@ msgid "" "preferred, because it can easily be confused with a Linux distribution, or " "another larger software distribution like Python itself." msgstr "" +"இந்த சூழலில் \"தொகுப்பு\" என்ற சொல் நிறுவப்பட வேண்டிய மென்பொருளை விவரிக்க " +"பயன்படுத்தப்படுகிறது என்பதை கவனத்தில் கொள்ள வேண்டும் (அதாவது A க்கு ஒத்ததாக: கால: " +"`விநியோக <விநியோக தொகுப்பு>`). இது உங்கள் பைதான் மூலக் குறியீட்டில் இறக்குமதி செய்யும் " +"(அதாவது தொகுதிகளின் கொள்கலன்) நீங்கள் இறக்குமதி செய்யும்: `தொகுப்பு <இறக்குமதி தொகுப்பு> " +"வகைகளைக் குறிக்கவில்லை. ஒரு: கால: `விநியோகம் <விநியோக தொகுப்பு>` \"தொகுப்பு\" என்ற " +"வார்த்தையைப் பயன்படுத்துவது பைதான் சமூகத்தில் பொதுவானது. \"வழங்கல்\" என்ற வார்த்தையைப் " +"பயன்படுத்துவது பெரும்பாலும் விரும்பப்படுவதில்லை, ஏனென்றால் இது லினக்ச் விநியோகத்துடன் " +"அல்லது பைத்தான் போன்ற மற்றொரு பெரிய மென்பொருள் விநியோகத்துடன் எளிதாக குழப்பமடையக்கூடும்." #: ../source/tutorials/installing-packages.rst:24 msgid "Requirements for Installing Packages" -msgstr "" +msgstr "தொகுப்புகளை நிறுவுவதற்கான தேவைகள்" #: ../source/tutorials/installing-packages.rst:26 msgid "" "This section describes the steps to follow before installing other Python " "packages." msgstr "" +"இந்த பிரிவு பிற பைதான் தொகுப்புகளை நிறுவுவதற்கு முன் பின்பற்ற வேண்டிய படிகளை " +"விவரிக்கிறது." #: ../source/tutorials/installing-packages.rst:31 msgid "Ensure you can run Python from the command line" -msgstr "" +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 "" @@ -21278,10 +29717,14 @@ msgid "" "ref:`Installing Python ` section of the " "Hitchhiker's Guide to Python." msgstr "" +"`` பைதான் 3.6.3`` போன்ற சில வெளியீட்டை நீங்கள் பெற வேண்டும். உங்களிடம் பைதான் இல்லையென்றால்" +", தயவுசெய்து `python.org`_ இலிருந்து அண்மைக் கால 3.x பதிப்பை நிறுவவும் அல்லது: " +"குறிப்பு:` பைத்தானை நிறுவுதல் <பைதான்-வழிகாட்டியாக: நிறுவல்> `பைத்தானுக்கு இட்சிகரின் " +"வழிகாட்டியின் பிரிவு." #: ../source/tutorials/installing-packages.rst:53 msgid "If you're a newcomer and you get an error like this:" -msgstr "" +msgstr "நீங்கள் ஒரு புதியவர் என்றால், இது போன்ற பிழையைப் பெறுவீர்கள்:" #: ../source/tutorials/installing-packages.rst:62 msgid "" @@ -21290,6 +29733,10 @@ msgid "" "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 "" @@ -21297,6 +29744,8 @@ msgid "" "can run system commands like those in this tutorial by prefacing them with a " "``!`` character:" msgstr "" +"நீங்கள் ஐபிதான் அல்லது சூபிட்டர் நோட்புக் போன்ற மேம்பட்ட செல்லைப் பயன்படுத்துகிறீர்கள் என்றால், இந்" +"த டுடோரியலில் உள்ளதைப் போன்ற கணினி கட்டளைகளை ``! `` எழுத்து:" #: ../source/tutorials/installing-packages.rst:78 msgid "" @@ -21305,6 +29754,8 @@ msgid "" "the currently running notebook (which may not be the same Python " "installation that the ``python`` command refers to)." msgstr "" +"தற்போது இயங்கும் நோட்புக்குடன் பொருந்தக்கூடிய பைதான் நிறுவலில் கட்டளைகள் இயங்குவதை உறுதி " +"செய்வதற்காக `` பைதான்`` ஐ விட `{sys.executable}` `எழுத பரிந்துரைக்கப்படுகிறது." #: ../source/tutorials/installing-packages.rst:83 msgid "" @@ -21316,16 +29767,25 @@ msgid "" "you get a permissions error, come back to the section on creating virtual " "environments, set one up, and then continue with the tutorial as written." msgstr "" +"பெரும்பாலான லினக்ச் விநியோகங்கள் பைதான் 3 இடம்பெயர்வுகளைக் கையாளும் விதம் காரணமாக, " +"முதலில் ஒரு மெய்நிகர் சூழலை உருவாக்காமல் கணினி பைத்தானைப் பயன்படுத்தும் லினக்ச் பயனர்கள் இந்" +"த டுடோரியலில் `` பைதான்`` கட்டளையை `` பைதான் 3`` மற்றும் `` பைதான் -எம் பிப்` கட்டளை ``" +" பைட்டான் 3. இந்த டுடோரியலில் உள்ள எந்தவொரு கட்டளைகளையும் `` sudo`` உடன் இயக்க வேண்டாம்: " +"உங்களுக்கு இசைவு பிழை ஏற்பட்டால், மெய்நிகர் சூழல்களை உருவாக்குவது குறித்த பகுதிக்கு " +"திரும்பி வந்து, ஒன்றை அமைத்து, பின்னர் எழுதப்பட்ட டுடோரியலுடன் தொடரவும்." #: ../source/tutorials/installing-packages.rst:95 msgid "Ensure you can run pip from the command line" msgstr "" +"கட்டளை வரியிலிருந்து நீங்கள் PIP ஐ இயக்க முடியும் என்பதை உறுதிப்படுத்தவும்" #: ../source/tutorials/installing-packages.rst:97 msgid "" "Additionally, you'll need to make sure you have :ref:`pip` available. You " "can check this by running:" msgstr "" +"கூடுதலாக, உங்களிடம் இருப்பதை உறுதி செய்ய வேண்டும்: குறிப்பு: `பிப்` கிடைக்கிறது. " +"இயங்குவதன் மூலம் இதை நீங்கள் சரிபார்க்கலாம்:" #: ../source/tutorials/installing-packages.rst:112 msgid "" @@ -21334,21 +29794,28 @@ msgid "" "installed using your OS package manager, you may have to install pip " "separately, see :doc:`/guides/installing-using-linux-tools`." msgstr "" +"நீங்கள் மூலத்திலிருந்து பைத்தானை நிறுவியிருந்தால், `python.org`_ இலிருந்து ஒரு " +"நிறுவியுடன் அல்லது` ஓம் ப்ரூ`_ வழியாக உங்களிடம் ஏற்கனவே பிப் இருக்க வேண்டும். நீங்கள் " +"லினக்சில் இருந்தால், உங்கள் OS தொகுப்பு மேலாளரைப் பயன்படுத்தி நிறுவப்பட்டிருந்தால், நீங்கள் " +"PIP ஐ தனித்தனியாக நிறுவ வேண்டியிருக்கும், பார்க்க: DOC: " +"`/வழிகாட்டிகள்/நிறுவுதல்-பயன்படுத்தும்-லினக்ச்-கருவிகளை நிறுவுதல்." #: ../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 "" +msgstr "`` பைதான் -எம் பிப்`` ஐ இயக்க இன்னும் உங்களை அனுமதிக்கவில்லை என்றால்:" #: ../source/tutorials/installing-packages.rst:136 msgid "" "Securely Download `get-pip.py `_ [1]_" -msgstr "" +msgstr "பாதுகாப்பாக பதிவிறக்குங்கள்" #: ../source/tutorials/installing-packages.rst:139 msgid "" @@ -21356,6 +29823,9 @@ msgid "" "Additionally, it will install :ref:`setuptools` and :ref:`wheel` if they're " "not installed already." msgstr "" +"`` பைதான் get-pip.py`` ஐ இயக்கவும். [2] _ இது PIP ஐ நிறுவும் அல்லது மேம்படுத்தும். " +"கூடுதலாக, இது நிறுவப்படும்: Ref: `setuptools` மற்றும்: ref:` சக்கரம்` அவை ஏற்கனவே " +"நிறுவப்படவில்லை என்றால்." #: ../source/tutorials/installing-packages.rst:145 msgid "" @@ -21365,10 +29835,16 @@ msgid "" "can use ``python get-pip.py --prefix=/usr/local/`` to install in ``/usr/" "local`` which is designed for locally-installed software." msgstr "" +"உங்கள் இயக்க முறைமை அல்லது மற்றொரு தொகுப்பு மேலாளரால் நிர்வகிக்கப்படும் பைதான் நிறுவலைப் " +"பயன்படுத்துகிறீர்கள் என்றால் எச்சரிக்கையாக இருங்கள். get-pip.py அந்த கருவிகளுடன் " +"ஒருங்கிணைக்காது, மேலும் உங்கள் கணினியை சீரற்ற நிலையில் விட்டுவிடக்கூடும். உள்நாட்டில் " +"நிறுவப்பட்ட மென்பொருளுக்காக வடிவமைக்கப்பட்ட ``/usr/local`` இல் நிறுவ `` பைதான் " +"get-pip.py-/USR/`` ஆகியவற்றைப் பயன்படுத்தலாம்." #: ../source/tutorials/installing-packages.rst:154 msgid "Ensure pip, setuptools, and wheel are up to date" msgstr "" +"பிப், செட்டுப்டூல்கள் மற்றும் சக்கரம் புதுப்பித்த நிலையில் இருப்பதை உறுதிசெய்க" #: ../source/tutorials/installing-packages.rst:156 msgid "" @@ -21376,10 +29852,13 @@ msgid "" "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 "" +msgstr "விருப்பமாக, மெய்நிகர் சூழலை உருவாக்கவும்" #: ../source/tutorials/installing-packages.rst:175 msgid "" @@ -21387,6 +29866,9 @@ msgid "" "details, but here's the basic :doc:`venv ` [3]_ command " "to use on a typical Linux system:" msgstr "" +"காண்க: குறிப்பு: `கீழே உள்ள பிரிவு <மெய்நிகர் சூழல்களை உருவாக்குதல் மற்றும் " +"பயன்படுத்துதல்>` விவரங்களுக்கு, ஆனால் இங்கே அடிப்படை: ஆவணம்: `வெவி <பைதான்: " +"நூலகம்/வென்வ்>` [3] _ ஒரு பொதுவான லினக்ச் கணினியில் பயன்படுத்த கட்டளை:" #: ../source/tutorials/installing-packages.rst:192 msgid "" @@ -21394,10 +29876,12 @@ msgid "" "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 "" +msgstr "மெய்நிகர் சூழல்களை உருவாக்குதல்" #: ../source/tutorials/installing-packages.rst:201 msgid "" @@ -21407,6 +29891,10 @@ msgid "" "safely install global command line tools, see :doc:`/guides/installing-stand-" "alone-command-line-tools`." msgstr "" +"பைதான் \"மெய்நிகர் சூழல்கள்\" பைதானை அனுமதிக்கின்றன: கால: `தொகுப்புகள் <விநியோக " +"தொகுப்பு>` உலகளவில் நிறுவப்படுவதை விட, ஒரு குறிப்பிட்ட பயன்பாட்டிற்கான தனிமைப்படுத்தப்பட்" +"ட இடத்தில் நிறுவப்பட வேண்டும். உலகளாவிய கட்டளை வரி கருவிகளை பாதுகாப்பாக நிறுவ நீங்கள் " +"விரும்பினால், காண்க: DOC: `/வழிகாட்டிகள்/நிறுவுதல்-தனித்த-கட்டளை-கோட்டுகளை நிறுவுதல்." #: ../source/tutorials/installing-packages.rst:207 msgid "" @@ -21416,6 +29904,11 @@ msgid "" "your platform’s standard location is), it’s easy to end up in a situation " "where you unintentionally upgrade an application that shouldn’t be upgraded." msgstr "" +"லிப்ஃபூவின் பதிப்பு 1 தேவைப்படும் பயன்பாடு உங்களிடம் இருப்பதாக கற்பனை செய்து பாருங்கள், " +"ஆனால் மற்றொரு பயன்பாட்டிற்கு பதிப்பு தேவைப்படுகிறது. இந்த இரண்டு பயன்பாடுகளையும் நீங்கள் " +"எவ்வாறு பயன்படுத்தலாம்? எல்லாவற்றையும் /usr/lib/python3.6/site-pagages (அல்லது உங்கள் " +"தளத்தின் நிலையான இருப்பிடம் எதுவாக இருந்தாலும்) நிறுவினால், மேம்படுத்தப்படாத ஒரு " +"பயன்பாட்டை நீங்கள் தற்செயலாக மேம்படுத்தும் சூழ்நிலையில் முடிவடைவது எளிது." #: ../source/tutorials/installing-packages.rst:213 msgid "" @@ -21423,12 +29916,17 @@ msgid "" "be? If an application works, any change in its libraries or the versions of " "those libraries can break the application." msgstr "" +"அல்லது பொதுவாக, நீங்கள் ஒரு பயன்பாட்டை நிறுவி அதை விட்டுவிட விரும்பினால் என்ன செய்வது? " +"ஒரு பயன்பாடு செயல்பட்டால், அதன் நூலகங்களில் ஏதேனும் மாற்றம் அல்லது அந்த நூலகங்களின் " +"பதிப்புகள் பயன்பாட்டை உடைக்கலாம்." #: ../source/tutorials/installing-packages.rst: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 "" @@ -21436,12 +29934,16 @@ msgid "" "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 "" @@ -21450,6 +29952,10 @@ msgid "" "3.4 and later (Python versions prior to 3.12 also installed :ref:" "`setuptools`)." msgstr "" +":doc:`venv ` is available by இயல்புநிலை in பைதான் 3.3 and " +"later, and installs :ref:`pip` into உருவாக்கப்பட்டது virtual environments in " +"பைதான் 3.4 and later (Python versions prior பெறுநர் 3.12 also installed " +":ref:`setuptools`)." #: ../source/tutorials/installing-packages.rst:229 msgid "" @@ -21458,24 +29964,30 @@ msgid "" "always installed into created virtual environments by default (regardless of " "Python version)." msgstr "" +":ref:`virtualenv` needs பெறுநர் be installed separately, but supports பைதான் " +"2.7+ and பைதான் 3.3+, and :ref:`pip`, :ref:`setuptools` and :ref:`wheel` அரே " +"எப்போதும் installed into உருவாக்கப்பட்டது virtual environments by இயல்புநிலை (" +"regardless of பைதான் version)." #: ../source/tutorials/installing-packages.rst:234 msgid "The basic usage is like so:" -msgstr "" +msgstr "அடிப்படை பயன்பாடு அவ்வாறு உள்ளது:" #: ../source/tutorials/installing-packages.rst:236 msgid "Using :doc:`venv `:" -msgstr "" +msgstr "பயன்படுத்துதல்: DOC: `vev `:" #: ../source/tutorials/installing-packages.rst:252 msgid "Using :ref:`virtualenv`:" -msgstr "" +msgstr "பயன்படுத்துதல்: ref: `Virtualenv`:" #: ../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 "" @@ -21483,6 +29995,9 @@ msgid "" "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 "" @@ -21490,6 +30005,9 @@ msgid "" "`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 "" @@ -21498,10 +30016,14 @@ msgid "" "higher level tool, :ref:`Pipenv`, that automatically manages a separate " "virtual environment for each project and application that you work on." msgstr "" +"பல மெய்நிகர் சூழல்களை நேரடியாக நிர்வகிப்பது சிரமமாக மாறும், எனவே: ref: `சார்பு " +"மேலாண்மை பயிற்சி <நிர்வாக-சார்புநிலைகள்>` ஒரு உயர் மட்ட கருவியை அறிமுகப்படுத்துகிறது,:" +" re: `பைபென்வ்`, நீங்கள் பணிபுரியும் ஒவ்வொரு திட்டத்திற்கும் பயன்பாட்டிற்கும் ஒரு தனி " +"மெய்நிகர் சூழலை தானாக நிர்வகிக்கிறது." #: ../source/tutorials/installing-packages.rst:293 msgid "Use pip for Installing" -msgstr "" +msgstr "நிறுவ PIP ஐப் பயன்படுத்தவும்" #: ../source/tutorials/installing-packages.rst:295 msgid "" @@ -21509,10 +30031,14 @@ msgid "" "usage scenarios. For more detail, see the :doc:`pip docs `, which " "includes a complete :doc:`Reference Guide `." msgstr "" +": ref: `பிப்` என்பது பரிந்துரைக்கப்பட்ட நிறுவி. கீழே, மிகவும் பொதுவான பயன்பாட்டு " +"காட்சிகளை நாங்கள் உள்ளடக்குவோம். மேலும் விவரங்களுக்கு, டிஓசி: `பிஐபி டாக்ச் <பிப்: " +"இன்டெக்ச்>`, இதில் முழுமையானது: டாக்: `குறிப்பு வழிகாட்டி <பிஐபி: சிஎல்ஐ/குறியீட்டு>` " +"ஐப் பார்க்கவும்." #: ../source/tutorials/installing-packages.rst:301 msgid "Installing from PyPI" -msgstr "" +msgstr "PYPI இலிருந்து நிறுவுகிறது" #: ../source/tutorials/installing-packages.rst:303 msgid "" @@ -21524,34 +30050,47 @@ msgid "" "supported specifiers can be found in the :ref:`Version specifier " "specification `. Below are some examples." msgstr "" +"இதன் மிகவும் பொதுவான பயன்பாடு: ref: `பிப்` என்பது நிறுவல்: கால:` பைதான் தொகுப்பு " +"குறியீட்டு <பைதான் தொகுப்பு குறியீட்டு (பைபி)> `ஒரு: காலத்தைப் பயன்படுத்துதல்:` தேவை " +"விவரக்குறிப்பு <தேவை விவரக்குறிப்பு> `. பொதுவாக, ஒரு தேவை விவரக்குறிப்பு ஒரு திட்டப் " +"பெயரை உள்ளடக்கியது, அதைத் தொடர்ந்து ஒரு விருப்ப: சொல்: `பதிப்பு விவரக்குறிப்பு <பதிப்பு " +"விவரக்குறிப்பு>`. ஆதரிக்கப்பட்ட குறிப்பான்களின் முழு விளக்கத்தையும்: ref: `பதிப்பு " +"விவரக்குறிப்பு விவரக்குறிப்பு <பதிப்பு-விவரக்குறிப்புகள்>` இல் காணலாம். சில " +"எடுத்துக்காட்டுகள் கீழே." #: ../source/tutorials/installing-packages.rst:311 msgid "To install the latest version of \"SomeProject\":" -msgstr "" +msgstr "\"Forproject\" இன் அண்மைக் கால பதிப்பை நிறுவ:" #: ../source/tutorials/installing-packages.rst:325 msgid "To install a specific version:" -msgstr "" +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 "" +"ஒரு பதிப்பை நிறுவ: குறிப்பு: `இணக்கமான <பதிப்பு-விவரிப்பாளர்கள்-இணக்கமான-வெளியீடு>` " +"ஒரு குறிப்பிட்ட பதிப்போடு: [4] _" #: ../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 "" +"இந்த வழக்கில், \"== 1.4.*\" பதிப்பையும் நிறுவ வேண்டும் என்பதே இதன் பொருள் \"> = 1.4.2\"" +"." #: ../source/tutorials/installing-packages.rst:374 msgid "Source Distributions vs Wheels" -msgstr "" +msgstr "மூல வழங்கல் Vs சக்கரங்கள்" #: ../source/tutorials/installing-packages.rst:376 msgid "" @@ -21561,6 +30100,8 @@ msgid "" "can override pip`s default behavior by e.g. using its :ref:`--no-binary ` option." msgstr "" +". பைப்பின் இயல்புநிலை நடத்தை எ.கா. அதைப் பயன்படுத்துதல்: ref: `-no-entar ` விருப்பம்." #: ../source/tutorials/installing-packages.rst:382 msgid "" @@ -21569,6 +30110,10 @@ msgid "" "Distributions (sdist) `, especially when " "a project contains compiled extensions." msgstr "" +":term:`Wheels ` அரே a pre-built :term:`distribution ` வடிவம் that provides faster நிறுவல் compared பெறுநர் :term:`Source " +"Distributions (sdist) `, especially when a திட்டம் " +"contains compiled extensions." #: ../source/tutorials/installing-packages.rst:387 msgid "" @@ -21576,32 +30121,42 @@ msgid "" "wheel and cache it for future installs, instead of rebuilding the source " "distribution in the future." msgstr "" +"If: ref: `பிப்` நிறுவ ஒரு சக்கரத்தைக் கண்டுபிடிக்கவில்லை, இது எதிர்காலத்தில் மூல " +"விநியோகத்தை மீண்டும் கட்டியெழுப்புவதற்குப் பதிலாக, உள்நாட்டில் ஒரு சக்கரத்தை உருவாக்கி " +"எதிர்கால நிறுவல்களுக்கு தற்காலிகமாக சேமிக்கும்." #: ../source/tutorials/installing-packages.rst:395 msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." msgstr "" +"ஏற்கனவே நிறுவப்பட்ட `` someproject`` ஐ பைபியிலிருந்து சமீபத்தியதாக மேம்படுத்தவும்." #: ../source/tutorials/installing-packages.rst:412 msgid "Installing to the User Site" -msgstr "" +msgstr "பயனர் தளத்திற்கு நிறுவுதல்" #: ../source/tutorials/installing-packages.rst:414 msgid "" "To install :term:`packages ` that are isolated to the " "current user, use the ``--user`` flag:" msgstr "" +"நிறுவ: கால: `தொகுப்புகள் <விநியோக தொகுப்பு>` தற்போதைய பயனருக்கு தனிமைப்படுத்தப்பட்ட, " +"`` --user`` கொடியைப் பயன்படுத்தவும்:" #: ../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 "" +"மெய்நிகர் சூழலுக்குள் இருக்கும்போது `` --user`` கொடி எந்த விளைவையும் ஏற்படுத்தாது என்பதை" +" நினைவில் கொள்க-அனைத்து நிறுவல் கட்டளைகளும் மெய்நிகர் சூழலை பாதிக்கும்." #: ../source/tutorials/installing-packages.rst:436 msgid "" @@ -21613,6 +30168,9 @@ msgid "" "available in your shell after installation, you'll need to add the directory " "to your :envvar:`PATH`:" msgstr "" +"எந்தவொரு கட்டளை-வரி ச்கிரிப்டுகள் அல்லது கன்சோல் நுழைவு புள்ளிகளை `` சில திட்ட` " +"`வரையறுத்தால்,` `--user`` அவை` பயனர் தளத்தின் `_ இன் பைனரி கோப்பகத்திற்குள் நிறுவப்படும்" +", இது ஏற்கனவே உங்கள் செல்லில் இருக்கலாம் அல்லது இல்லாமல் இருக்கலாம்: envvar: `பாதை`. ." #: ../source/tutorials/installing-packages.rst:444 msgid "" @@ -21622,6 +30180,11 @@ msgid "" "path to your home directory) so you'll need to add ``~/.local/bin`` to your " "``PATH``. You can set your ``PATH`` permanently by `modifying ~/.profile`_." msgstr "" +"லினக்ச் மற்றும் மேகோசில் நீங்கள் `` பைதான் -எம் தளத்தை -யூசர் -பேச்`` ஐ இயக்கி, `` பின்`` ஐ " +"இறுதிவரை சேர்ப்பதன் மூலம் பயனர் அடிப்படை பைனரி கோப்பகத்தைக் காணலாம். எடுத்துக்காட்டாக, இது" +" பொதுவாக `` ~/.local`` ஐ அச்சிடும் (`` `` `உங்கள் வீட்டு கோப்பகத்திற்கான முழுமையான " +"பாதைக்கு விரிவாக்கப்படும்) எனவே உங்கள்` `பாதை`` இல்` `~/.local/bin`` ஐ சேர்க்க வேண்டும்" +". `மாற்றியமைப்பதன் மூலம் உங்கள்` `பாதையை` நிரந்தரமாக அமைக்கலாம்." #: ../source/tutorials/installing-packages.rst:450 msgid "" @@ -21634,40 +30197,54 @@ msgid "" "user ``PATH`` permanently in the `Control Panel`_. You may need to log out " "for the ``PATH`` changes to take effect." msgstr "" +"சாளரங்களில் நீங்கள் `` py -m தளத்தை-பயனர்-தளத்தை `` `` தள-தொகுப்புகள்`` `` ச்கிரிப்ட்கள்`` " +"உடன் மாற்றுவதன் மூலம் பயனர் அடிப்படை பைனரி கோப்பகத்தைக் காணலாம். க்கு example, this " +"could return ``C:\\Users\\Username\\AppData\\Roaming\\Python36\\site" +"-packages`` so you would need பெறுநர் கணம் your ``PATH`` பெறுநர் include ``C:" +"\\Users\\Username\\AppData\\Roaming\\Python36\\Scripts``. உங்கள் பயனரை " +"`கட்டுப்பாட்டு குழு`_ இல் நிரந்தரமாக அமைக்கலாம். நடைமுறைக்கு வருவதற்கான `` பாதை` " +"`மாற்றங்களுக்கு நீங்கள் வெளியேற வேண்டியிருக்கலாம்." #: ../source/tutorials/installing-packages.rst:466 msgid "" "Install a list of requirements specified in a :ref:`Requirements File `." msgstr "" +"A இல் குறிப்பிடப்பட்டுள்ள தேவைகளின் பட்டியலை நிறுவவும்: ref: `தேவைகள் கோப்பு `." #: ../source/tutorials/installing-packages.rst:482 msgid "Installing from VCS" -msgstr "" +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 "" +msgstr "பிற குறியீடுகளிலிருந்து நிறுவுகிறது" #: ../source/tutorials/installing-packages.rst:508 msgid "Install from an alternate index" -msgstr "" +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 "" +msgstr "உள்ளக எச்.ஆர்.சி மரத்திலிருந்து நிறுவுகிறது" #: ../source/tutorials/installing-packages.rst:541 msgid "" @@ -21675,28 +30252,33 @@ msgid "" "development_mode>`, i.e. in such a way that the project appears to be " "installed, but yet is still editable from the src tree." msgstr "" +"உள்ளக எச்.ஆர்.சியிலிருந்து நிறுவுதல்: டிஓசி: `மேம்பாட்டு முறை <செட்டப்டூல்ச்: பயனர் " +"வழிகாட்டி/மேம்பாட்டு பயன்முறை>`, ஐ.எச்.எச். திட்டம் நிறுவப்பட்டதாகத் தோன்றும் வகையில், ஆனால்" +" இன்னும் எச்.ஆர்.சி மரத்திலிருந்து திருத்தக்கூடியது." #: ../source/tutorials/installing-packages.rst:558 msgid "You can also install normally from src" -msgstr "" +msgstr "நீங்கள் பொதுவாக SRC இலிருந்து நிறுவலாம்" #: ../source/tutorials/installing-packages.rst:573 msgid "Installing from local archives" -msgstr "" +msgstr "உள்ளக காப்பகங்களிலிருந்து நிறுவுதல்" #: ../source/tutorials/installing-packages.rst:575 msgid "Install a particular source archive file." -msgstr "" +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 "" +msgstr "பிற மூலங்களிலிருந்து நிறுவுகிறது" #: ../source/tutorials/installing-packages.rst:611 msgid "" @@ -21705,20 +30287,26 @@ msgid "" "with the :ref:`simple repository API `:, and use the " "``--extra-index-url`` flag to direct pip to use that index." msgstr "" +"பிற தரவு மூலங்களிலிருந்து நிறுவ (எடுத்துக்காட்டாக அமேசான் எச் 3 சேமிப்பிடம்) நீங்கள் ஒரு " +"உதவி பயன்பாட்டை உருவாக்கலாம், இது ஒரு வடிவத்தில் இணக்கமான வடிவத்தில் வழங்கலாம்: ref: " +"`எளிய களஞ்சிய பநிஇ <எளிய-ரோபோசிட்டரி-ஏபிஐ>`:, மற்றும் ``-எக்ச்ட்ரா-இன்டெக்ச்-உர்எல்``` " +"கொடியை அந்த குறியீட்டைப் பயன்படுத்துவதற்கு நேரடியாகப் பயன்படுத்தவும்." #: ../source/tutorials/installing-packages.rst:623 msgid "Installing Prereleases" -msgstr "" +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 "" +msgstr "\"கூடுதல்\" நிறுவுதல்" #: ../source/tutorials/installing-packages.rst:643 msgid "" @@ -21727,6 +30315,10 @@ msgid "" "If you wish to install an extra for a package which you know publishes one, " "you can include it in the pip installation command:" msgstr "" +"கூடுதல் ஒரு தொகுப்பின் விருப்பமான \"மாறுபாடுகள்\" ஆகும், இதில் கூடுதல் சார்புநிலைகள் " +"இருக்கலாம், இதன் மூலம் தொகுப்பிலிருந்து கூடுதல் செயல்பாட்டை செயல்படுத்துகின்றன. ஒன்றை " +"வெளியிடுவது உங்களுக்குத் தெரிந்த ஒரு தொகுப்புக்கு கூடுதல் நிறுவ விரும்பினால், நீங்கள் அதை" +" PIP நிறுவல் கட்டளையில் சேர்க்கலாம்:" #: ../source/tutorials/installing-packages.rst:666 msgid "" @@ -21734,6 +30326,9 @@ msgid "" "command:`curl` that verifies SSL certificates when downloading from https " "URLs." msgstr "" +"இந்த சூழலில் \"பாதுகாப்பானது\" என்பது நவீன உலாவி அல்லது ஒரு கருவியைப் " +"பயன்படுத்துவதாகும்: கட்டளை: `சுருட்டை` இது HTTPS முகவரி களில் இருந்து பதிவிறக்கும் " +"போது SSL சான்றிதழ்களை சரிபார்க்கிறது." #: ../source/tutorials/installing-packages.rst:675 msgid "" @@ -21741,22 +30336,29 @@ msgid "" "`virtualenv`) will create virtualenv environments with ``pip`` pre-" "installed, thereby making it an equal alternative to :ref:`virtualenv`." msgstr "" +"பைதான் 3.4 உடன் தொடங்கி, `` வெர்வ்`` (ஒரு எச்.டி.எல்.ஐ.பி மாற்று: ref: `மெய்நிகர்என்வ்`) " +"மெய்நிகர் ஈட்டிங் சூழல்களை முன் நிறுவப்பட்ட` `பிஐபி`` உடன் உருவாக்கும், இதனால் இது சமமான " +"மாற்றாக அமைகிறது: குறிப்பு:` மெய்நிகர் ஈன்வ்`." #: ../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 "" +"இணக்கமான வெளியீட்டு விவரக்குறிப்பு ஏற்றுக்கொள்ளப்பட்டது: PEP: `440` மற்றும் உதவி " +"வெளியிடப்பட்டது: Ref:` setuptools` v8.0 மற்றும்: Ref: `Pip` v6.0" #: ../source/tutorials/managing-dependencies.rst:4 msgid "Managing Application Dependencies" -msgstr "" +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 "" @@ -21765,6 +30367,9 @@ msgid "" "up development environments automatically for projects with multiple " "contributors." msgstr "" +"எவ்வாறாயினும், இந்த கட்டளைகளை ஊடாடும் வகையில் இயக்குவது உங்கள் சொந்த திட்டங்களுக்கு கூட " +"கடினமாகிவிடும், மேலும் பல பங்களிப்பாளர்களைக் கொண்ட திட்டங்களுக்கு தானாகவே மேம்பாட்டு " +"சூழல்களை அமைக்க முயற்சிக்கும்போது விசயங்கள் இன்னும் கடினமாகிவிடும்." #: ../source/tutorials/managing-dependencies.rst:13 msgid "" @@ -21772,6 +30377,10 @@ msgid "" "dependencies for an application. It will show you how to install and use the " "necessary tools and make strong recommendations on best practices." msgstr "" +"இந்த டுடோரியல் பயன்பாட்டின் மூலம் உங்களை அழைத்துச் செல்கிறது: ref: `பைபென்வ்` ஒரு " +"விண்ணப்பத்திற்கான சார்புகளை நிர்வகிக்க. தேவையான கருவிகளை எவ்வாறு நிறுவுவது மற்றும் " +"பயன்படுத்துவது மற்றும் சிறந்த நடைமுறைகளில் வலுவான பரிந்துரைகளை வழங்குவது என்பதை இது " +"காண்பிக்கும்." #: ../source/tutorials/managing-dependencies.rst:17 msgid "" @@ -21782,15 +30391,22 @@ msgid "" "(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 "" +msgstr "பைபென்வ் நிறுவுதல்" #: ../source/tutorials/managing-dependencies.rst:29 msgid "" @@ -21800,10 +30416,15 @@ msgid "" "Pipenv is recommended for collaborative projects as it's a higher-level tool " "that simplifies dependency management for common use cases." msgstr "" +": குறிப்பு: `பைபென்வ்` பைதான் திட்டங்களுக்கான சார்பு மேலாளர். Node.js 'npm`_ அல்லது " +"ரூபியின் `பண்ட்லர்`_ உடன் உங்களுக்கு தெரிந்திருந்தால், அது அந்தக் கருவிகளுக்கு ஆவிக்கு " +"ஒத்ததாகும். அதே நேரத்தில்: ref: `பிப்` மட்டும் பெரும்பாலும் தனிப்பட்ட பயன்பாட்டிற்கு " +"போதுமானது, கூட்டு திட்டங்களுக்கு பைபென்வி பரிந்துரைக்கப்படுகிறது, ஏனெனில் இது பொதுவான " +"பயன்பாட்டு நிகழ்வுகளுக்கு சார்பு நிர்வாகத்தை எளிதாக்கும் உயர் மட்ட கருவியாகும்." #: ../source/tutorials/managing-dependencies.rst:35 msgid "Use ``pip`` to install Pipenv:" -msgstr "" +msgstr "பைபென்வை நிறுவ `` பிப்`` ஐப் பயன்படுத்தவும்:" #: ../source/tutorials/managing-dependencies.rst:51 msgid "" @@ -21813,10 +30434,14 @@ msgid "" "directory to your ``PATH``. See :ref:`Installing to the User Site` for more " "information." msgstr "" +"எந்தவொரு கணினி அளவிலான தொகுப்புகளையும் உடைப்பதைத் தடுக்க இது `பயனர் நிறுவல்`_ " +"செய்கிறது. நிறுவலுக்குப் பிறகு உங்கள் செல்லில் `` பைபென்வ்`` கிடைக்கவில்லை என்றால், நீங்கள்: " +"py: தரவு: `பயனர் அடிப்படை <பைதான்: site.user_base>` இன் பைனரி அடைவு உங்கள் `` " +"பாதை`` சேர்க்க வேண்டும். காண்க: குறிப்பு: `பயனர் தளத்திற்கு நிறுவுதல்` மேலும் தகவலுக்கு." #: ../source/tutorials/managing-dependencies.rst:62 msgid "Installing packages for your project" -msgstr "" +msgstr "உங்கள் திட்டத்திற்கான தொகுப்புகளை நிறுவுதல்" #: ../source/tutorials/managing-dependencies.rst:64 msgid "" @@ -21824,6 +30449,9 @@ msgid "" "change into your project's directory (or just an empty directory for this " "tutorial) and run:" msgstr "" +"PIPENV ஒரு திட்டத்தின் அடிப்படையில் சார்புகளை நிர்வகிக்கிறது. தொகுப்புகளை நிறுவ, உங்கள் " +"திட்டத்தின் கோப்பகத்தில் மாற்றவும் (அல்லது இந்த டுடோரியலுக்கான வெற்று அடைவு) மற்றும் " +"இயக்கவும்:" #: ../source/tutorials/managing-dependencies.rst:73 msgid "" @@ -21833,24 +30461,31 @@ msgid "" "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 "" +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 "" +"இப்போது கோரிக்கைகள் நிறுவப்பட்டுள்ளன, நீங்கள் ஒரு எளிய: கோப்பு: `main.py` கோப்பைப் " +"பயன்படுத்தலாம்:" #: ../source/tutorials/managing-dependencies.rst:122 msgid "Then you can run this script using ``pipenv run``:" -msgstr "" +msgstr "`` பைபென்வ் ரன்`` ஐப் பயன்படுத்தி இந்த ச்கிரிப்டை இயக்கலாம்:" #: ../source/tutorials/managing-dependencies.rst:128 msgid "You should get output similar to this:" -msgstr "" +msgstr "இதைப் போன்ற வெளியீட்டை நீங்கள் பெற வேண்டும்:" #: ../source/tutorials/managing-dependencies.rst:134 msgid "" @@ -21858,17 +30493,22 @@ msgid "" "your script. It's also possible to spawn a new shell that ensures all " "commands have access to your installed packages with ``pipenv shell``." msgstr "" +"`` பைபென்வ் ரன்`` ஐப் பயன்படுத்துவது உங்கள் நிறுவப்பட்ட தொகுப்புகள் உங்கள் ச்கிரிப்ட்டில் " +"கிடைப்பதை உறுதி செய்கிறது. `` பைபென்வ் செல்`` உடன் உங்கள் நிறுவப்பட்ட தொகுப்புகளுக்கு " +"அனைத்து கட்டளைகளும் அணுகுவதை உறுதி செய்யும் ஒரு புதிய செல்லை உருவாக்கவும் முடியும்." #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" -msgstr "" +msgstr "அடுத்த படிகள்" #: ../source/tutorials/managing-dependencies.rst:142 msgid "" "Congratulations, you now know how to effectively manage dependencies and " "development environments on a collaborative Python project! ✨ 🍰 ✨" msgstr "" +"வாழ்த்துக்கள், கூட்டு பைதான் திட்டத்தில் சார்புநிலைகள் மற்றும் மேம்பாட்டு சூழல்களை எவ்வாறு " +"திறம்பட நிர்வகிப்பது என்பது இப்போது உங்களுக்குத் தெரியும்! ✨" #: ../source/tutorials/managing-dependencies.rst:145 msgid "" @@ -21876,6 +30516,9 @@ msgid "" "see the :ref:`tutorial on packaging and distributing packages `." msgstr "" +"உங்கள் சொந்த பைதான் தொகுப்புகளை உருவாக்கி விநியோகிப்பதில் நீங்கள் ஆர்வமாக இருந்தால், இதைக் " +"காண்க: குறிப்பு: `தொகுப்புகளை பேக்கேசிங் மற்றும் விநியோகித்தல் பற்றிய பயிற்சி " +"<விநியோகிக்கும் பேக்கேச்கள்>`." #: ../source/tutorials/managing-dependencies.rst:148 msgid "" @@ -21884,10 +30527,13 @@ msgid "" "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 "" +msgstr "பயன்பாட்டு சார்பு நிர்வாகத்திற்கான பிற கருவிகள்" #: ../source/tutorials/managing-dependencies.rst:159 msgid "" @@ -21896,6 +30542,10 @@ msgid "" "other tools and techniques, listed in alphabetical order, to see if one of " "them is a better fit:" msgstr "" +"பயன்பாட்டு சார்புகளை நிர்வகிப்பதற்கான இந்த குறிப்பிட்ட அணுகுமுறையை நீங்கள் கண்டறிந்தால் " +"அல்லது உங்கள் பயன்பாட்டு வழக்குக்கு சரியாக வேலை செய்யாது என்றால், அவற்றில் ஒன்று சிறந்த " +"பொருத்தமாக இருக்கிறதா என்று பார்க்க, அகர வரிசைப்படி பட்டியலிடப்பட்டுள்ள இந்த பிற கருவிகள்" +" மற்றும் நுட்பங்களை நீங்கள் ஆராய விரும்பலாம்:" #: ../source/tutorials/managing-dependencies.rst:163 msgid "" @@ -21903,6 +30553,9 @@ msgid "" "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 "" @@ -21911,12 +30564,18 @@ msgid "" "and Poetry lock files, or converting them to pip-tools compatible output. " "Designed for containerized Python applications, but not limited to them." msgstr "" +"`மைக்ரோபிபென்வ் ` _ `` தேவைகள். " +"Txt``, பைபன்வி மற்றும் பா பூட்டு கோப்புகளை ஆதரிக்கும் அல்லது அவற்றை பிப்-குழாய்களுக்கு " +"இணக்கமான வெளியீட்டிற்கு மாற்றும் பி.ஐ.பி. கொள்கலன் செய்யப்பட்ட பைதான் பயன்பாடுகளுக்காக " +"வடிவமைக்கப்பட்டுள்ளது, ஆனால் அவற்றுடன் மட்டுப்படுத்தப்படவில்லை." #: ../source/tutorials/managing-dependencies.rst:170 msgid "" "`PDM `_ for a modern Python package " "management relying on standards such as :pep:`517` and :pep:`621`." msgstr "" +"`Pdm ` _ போன்ற தரங்களை நம்பியிருக்கும் நவீன " +"பைதான் தொகுப்பு நிர்வாகத்திற்கு: PEP: `517` மற்றும்: PEP:` 621`." #: ../source/tutorials/managing-dependencies.rst:172 msgid "" @@ -21924,6 +30583,9 @@ msgid "" "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 "" @@ -21934,10 +30596,16 @@ msgid "" "assumption that the application being worked on will support distribution as " "a ``pip``-installable Python package." msgstr "" +"`கவிதை ` __ __ __ PIPENV உடன் " +"ஒப்பிடக்கூடிய ஒரு கருவிக்கு, நிர்வகிக்கப்படும் திட்டம் ஒரு செல்லுபடியாகும் `` " +"pyproject.tomll`` `கோப்புடன் விநியோகிக்கக்கூடிய பைதான் தொகுப்பாக கட்டமைக்கப்பட்ட " +"பயன்பாட்டு நிகழ்வுகளில் நேரடியாக கவனம் செலுத்துகிறது. இதற்கு நேர்மாறாக, பிபென்வ் " +"வெளிப்படையாக வேலை செய்யப்படும் பயன்பாடு விநியோக விநியோகத்தை `` பிப்`` நிறுவக்கூடிய " +"பைதான் தொகுப்பாக ஆதரிக்கும் என்ற அனுமானத்தை செய்வதைத் தவிர்க்கிறது." #: ../source/tutorials/packaging-projects.rst:2 msgid "Packaging Python Projects" -msgstr "" +msgstr "பேக்கேசிங் பைதான் திட்டங்கள்" #: ../source/tutorials/packaging-projects.rst:4 msgid "" @@ -21946,6 +30614,10 @@ msgid "" "package, how to build the package, and how to upload it to the Python " "Package Index (PyPI)." msgstr "" +"இந்த பயிற்சி ஒரு எளிய பைதான் திட்டத்தை எவ்வாறு தொகுத்தல் மூலம் உங்களை அழைத்துச் செல்கிறது" +". தொகுப்பை உருவாக்க தேவையான கோப்புகள் மற்றும் கட்டமைப்பை எவ்வாறு சேர்ப்பது, தொகுப்பை " +"எவ்வாறு உருவாக்குவது, அதை பைதான் தொகுப்பு குறியீட்டில் (PYPI) எவ்வாறு பதிவேற்றுவது " +"என்பதை இது காண்பிக்கும்." #: ../source/tutorials/packaging-projects.rst:10 msgid "" @@ -21953,16 +30625,22 @@ msgid "" "command and its output, then `open an issue`_ on the `packaging-problems`_ " "repository on GitHub. We'll do our best to help you!" msgstr "" +"இந்த டுடோரியலில் கட்டளைகளை இயக்குவதில் உங்களுக்கு சிக்கல் இருந்தால், தயவுசெய்து " +"கட்டளையையும் அதன் வெளியீட்டையும் நகலெடுக்கவும், பின்னர் கிட்அப்பில் `பேக்கேசிங்-வெளியீடுகள்`_ " +"களஞ்சியத்தில்` ஒரு சிக்கலைத் திறக்கவும். உங்களுக்கு உதவ நாங்கள் எங்களால் முடிந்த அனைத்தையும் " +"செய்வோம்!" #: ../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 "" +msgstr "ஒரு எளிய திட்டம்" #: ../source/tutorials/packaging-projects.rst:37 msgid "" @@ -21973,10 +30651,16 @@ msgid "" "following this tutorial. We recommend following this tutorial as-is using " "this project, before packaging your own project." msgstr "" +"இந்த டுடோரியல் `` எடுத்துக்காட்டு_பேக்கேச்_யோர்_சர்ன்ம்_எர்`` என்ற எளிய திட்டத்தைப் " +"பயன்படுத்துகிறது. உங்கள் பயனர்பெயர் `` me`` என்றால், தொகுப்பு `` example_package_me``;" +" இந்த டுடோரியலைத் தொடர்ந்து மற்றவர்களால் பதிவேற்றப்பட்ட தொகுப்புகளுடன் முரண்படாத ஒரு " +"தனித்துவமான தொகுப்பு பெயர் உங்களிடம் இருப்பதை இது உறுதி செய்கிறது. உங்கள் சொந்த திட்டத்தை" +" பேக்கேசிங் செய்வதற்கு முன், இந்த திட்டத்தைப் பயன்படுத்த இந்த டுடோரியலைப் பின்பற்ற " +"பரிந்துரைக்கிறோம்." #: ../source/tutorials/packaging-projects.rst:44 msgid "Create the following file structure locally:" -msgstr "" +msgstr "உள்நாட்டில் பின்வரும் கோப்பு கட்டமைப்பை உருவாக்கவும்:" #: ../source/tutorials/packaging-projects.rst:54 msgid "" @@ -21984,6 +30668,8 @@ msgid "" "This simplifies the configuration and is more obvious to users who install " "the package." msgstr "" +"பைதான் கோப்புகளைக் கொண்ட அடைவு திட்ட பெயருடன் பொருந்த வேண்டும். இது உள்ளமைவை " +"எளிதாக்குகிறது மற்றும் தொகுப்பை நிறுவும் பயனர்களுக்கு மிகவும் தெளிவாகத் தெரிகிறது." #: ../source/tutorials/packaging-projects.rst:57 msgid "" @@ -21992,6 +30678,8 @@ msgid "" "regular package, even if (as is the case in this tutorial) :file:`__init__." "py` is empty. [#namespace-packages]_" msgstr "" +"கோப்பை உருவாக்குதல்: கோப்பு: `__init __. பை` பரிந்துரைக்கப்படுகிறது, ஏனெனில் ஒரு: " +"கோப்பு:` __init __. [#பெயர்வெளி-தொகுப்புகள்] _" #: ../source/tutorials/packaging-projects.rst:62 msgid "" @@ -21999,6 +30687,9 @@ msgid "" "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 "" @@ -22006,34 +30697,43 @@ msgid "" "`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 "" +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 "" +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 "" +msgstr "ஒரு கட்டமைப்பைத் தேர்ந்தெடுப்பது" #: ../source/tutorials/packaging-projects.rst:113 msgid "" @@ -22047,6 +30747,13 @@ msgid "" "term:`extension modules `, and you should choose one that " "suits your needs and preferences." msgstr "" +"போன்ற கருவிகள்: குறிப்பு: `பிப்` மற்றும்: குறிப்பு:` பில்ட்` உண்மையில் உங்கள் மூலங்களை ஒரு " +"ஆக மாற்ற வேண்டாம்: கால: `விநியோக தொகுப்பு <விநியோக தொகுப்பு>` (ஒரு சக்கரம் போன்றது); " +"அந்த வேலை ஒரு: கால: `பின்தளத்தில் உருவாக்கு <பின்தளத்தில் உருவாக்கு>`. மேனிலை தரவு " +"(திட்டத்தைப் பற்றிய தகவல்கள், எடுத்துக்காட்டாக, PYPI இல் காட்டப்படும் பெயர் மற்றும் " +"குறிச்சொற்கள்) மற்றும் உள்ளீட்டு கோப்புகள் உள்ளிட்ட அதன் உள்ளமைவை உங்கள் திட்டம் எவ்வாறு " +"குறிப்பிடும் என்பதை பில்ட் பின்தளத்தில் தீர்மானிக்கிறது. கட்டியெழுப்பும் பின்தளத்தில் அவை " +"கட்டடத்தை ஆதரிக்கின்றனவா?" #: ../source/tutorials/packaging-projects.rst:122 msgid "" @@ -22055,6 +30762,10 @@ msgid "" "ref:`Flit `, :ref:`PDM `, and others that support the " "``[project]`` table for :ref:`metadata `." msgstr "" +"நீங்கள் பல பின்தளத்தில் இருந்து தேர்வு செய்யலாம்; இந்த டுடோரியல் பயன்பாடுகள்: ref: `அட்ச்லிங் " +"<அட்ச்>` இயல்பாகவே, ஆனால் அது ஒரே மாதிரியாக செயல்படும்: ref: `setuptools`,: Ref:` " +"Flit `,: Ref:` pdm `, மற்றும்` `[திட்டம்]` `மெட்டாடாட்டா:` மெட்டாடாட்டா:" +" `மெட்டாடா கட்டமைப்பு." #: ../source/tutorials/packaging-projects.rst:129 msgid "" @@ -22063,6 +30774,10 @@ msgid "" "management, as well as building, uploading, and installing packages. This " "tutorial uses single-purpose tools that work independently." msgstr "" +"சில உருவாக்க பின்தளத்தில் பெரிய கருவிகளின் ஒரு பகுதியாகும், அவை திட்ட துவக்கம் மற்றும் " +"பதிப்பு மேலாண்மை போன்ற கூடுதல் அம்சங்களுடன் கட்டளை-வரி இடைமுகத்தை வழங்குகின்றன, அத்துடன் " +"தொகுப்புகளை உருவாக்குதல், பதிவேற்றுதல் மற்றும் நிறுவுதல். இந்த பயிற்சி சுயாதீனமாக வேலை " +"செய்யும் ஒற்றை நோக்கக் கருவிகளைப் பயன்படுத்துகிறது." #: ../source/tutorials/packaging-projects.rst:134 msgid "" @@ -22071,6 +30786,10 @@ msgid "" "project. Below are some examples for common build backends, but check your " "backend's own documentation for more details." msgstr "" +"தி: கோப்பு: `pyproject.toml` சொல்கிறது: சொல்:` பில்ட் ஃபிரான்டெண்ட் <பில்ட் ஃபிரான்டெண்ட்" +"> `போன்ற கருவிகள்: ref:` பிப்` மற்றும்: ref: `பில்ட்` உங்கள் திட்டத்திற்கு எந்த பின்தளத்தில் " +"பயன்படுத்த வேண்டும். பொதுவான கட்டமைப்பிற்கான சில எடுத்துக்காட்டுகள் கீழே உள்ளன, ஆனால் மேலும்" +" விவரங்களுக்கு உங்கள் பின்தளத்தில் சொந்த ஆவணங்களை சரிபார்க்கவும்." #: ../source/tutorials/packaging-projects.rst:172 msgid "" @@ -22081,12 +30800,19 @@ msgid "" "errors. This should always include your backend's package, and might have " "other build-time dependencies." msgstr "" +"`` தேவை` `விசையானது உங்கள் தொகுப்பை உருவாக்க தேவையான தொகுப்புகளின் பட்டியல். தி: கால:" +" `ஃபிரான்டென்ட் <பில்ட் ஃபிரான்டென்ட்>` உங்கள் தொகுப்பை உருவாக்கும்போது அவற்றை தானாக நிறுவ " +"வேண்டும். முன்பக்கங்கள் வழக்கமாக தனிமைப்படுத்தப்பட்ட சூழல்களில் கட்டடங்களை இயக்குகின்றன, எனவே " +"இங்குள்ள சார்புகளைத் தவிர்ப்பது கட்டட நேர பிழைகளை ஏற்படுத்தக்கூடும். இது எப்போதும் உங்கள் " +"பின்தளத்தில் தொகுப்பைக் கொண்டிருக்க வேண்டும், மேலும் பிற உருவாக்க நேர சார்புகள் இருக்கலாம்." #: ../source/tutorials/packaging-projects.rst:179 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:182 msgid "" @@ -22094,6 +30820,9 @@ msgid "" "backend, or generated by its command line interface. There should be no need " "for you to customize these settings." msgstr "" +"இந்த இரண்டு மதிப்புகளும் உங்கள் உருவாக்க பின்தளத்தில் ஆவணங்கள் மூலம் வழங்கப்படும், அல்லது அதன் " +"கட்டளை வரி இடைமுகத்தால் உருவாக்கப்படும். இந்த அமைப்புகளைத் தனிப்பயனாக்க வேண்டிய " +"அவசியமில்லை." #: ../source/tutorials/packaging-projects.rst:186 msgid "" @@ -22104,10 +30833,16 @@ msgid "" "file, and specifying ``setuptools.build_meta`` in your build allows the " "tools to locate and use these automatically." msgstr "" +"உருவாக்க கருவியின் கூடுதல் உள்ளமைவு `` pyproject.toml`` இன் `` கருவி` பிரிவில் " +"அல்லது உருவாக்க கருவியால் வரையறுக்கப்பட்ட சிறப்பு கோப்பில் இருக்கும். எடுத்துக்காட்டாக, `` " +"செடிப்டூல்ச்`` ஐ உங்கள் உருவாக்க பின்தளத்தில் பயன்படுத்தும் போது, கூடுதல் உள்ளமைவு ஒரு `` " +"setup.py`` அல்லது `` setup.cfg`` கோப்பில் சேர்க்கப்படலாம், மேலும் `` " +"setuptools.build_meta` ஐக் குறிப்பிடுவது உங்கள் கட்டமைப்பில் கருவிகளை தானாகவே " +"பயன்படுத்தவும் பயன்படுத்தவும் அனுமதிக்கிறது." #: ../source/tutorials/packaging-projects.rst:196 msgid "Configuring metadata" -msgstr "" +msgstr "மெட்டாடேட்டாவை உள்ளமைத்தல்" #: ../source/tutorials/packaging-projects.rst:198 msgid "" @@ -22116,8 +30851,12 @@ msgid "" "package name that doesn't conflict with packages uploaded by other people " "following this tutorial." msgstr "" +"திறந்த: கோப்பு: `pyproject.toml` மற்றும் பின்வரும் உள்ளடக்கத்தை உள்ளிடவும். உங்கள் " +"பயனர்பெயரைச் சேர்க்க `` பெயர்`` ஐ மாற்றவும்; இந்த டுடோரியலைத் தொடர்ந்து மற்றவர்களால் " +"பதிவேற்றப்பட்ட தொகுப்புகளுடன் முரண்படாத ஒரு தனித்துவமான தொகுப்பு பெயர் உங்களிடம் இருப்பதை" +" இது உறுதி செய்கிறது." -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22125,25 +30864,35 @@ msgid "" "username** for this tutorial, as this ensures you won't try to upload a " "package with the same name as one which already exists." msgstr "" +"`` பெயர்`` என்பது உங்கள் தொகுப்பின் * விநியோக பெயர் *. கடிதங்கள், எண்கள், `` .``, `` _``" +", மற்றும் `` -`` ஆகியவற்றைக் கொண்டிருக்கும் வரை இது எந்த பெயராகவும் இருக்கலாம். இது " +"ஏற்கனவே பைபி மீது எடுக்கப்படக்கூடாது. ** இந்த டுடோரியலுக்காக இதை உங்கள் பயனர்பெயருடன் " +"புதுப்பிக்க மறக்காதீர்கள், ஏனெனில் இது ஏற்கனவே இருக்கும் அதே பெயருடன் ஒரு தொகுப்பை பதிவேற்" +"ற முயற்சிக்காது என்பதை இது உறுதி செய்கிறது." -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." -msgstr "" +msgstr "`` விளக்கம்`` என்பது தொகுப்பின் குறுகிய, ஒரு வாக்கிய சுருக்கமாகும்." -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22151,54 +30900,87 @@ msgid "" "There also is a more advanced table form described in the :ref:`pyproject." "toml guide `." msgstr "" +"`` ரீட்மே`` என்பது தொகுப்பின் விரிவான விளக்கத்தைக் கொண்ட கோப்பிற்கான பாதை. இது PYPI இல் " +"உள்ள தொகுப்பு விவரம் பக்கத்தில் காட்டப்பட்டுள்ளது. இந்த வழக்கில், விளக்கம் ஏற்றப்பட்டது: கோப்பு:" +" `ReadMe.md` (இது ஒரு பொதுவான முறை). இதில் விவரிக்கப்பட்டுள்ள ஒரு மேம்பட்ட அட்டவணை " +"வடிவமும் உள்ளது: erf: `pyproject.toml வழிகாட்டி <எழுதுதல்-பைபிரெக்ட்-டாம்>`." -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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 "" +"`` தேவை-பைதான் `your உங்கள் திட்டத்தால் ஆதரிக்கப்படும் பைதனின் பதிப்புகளைத் தருகிறது. இது" +" போன்ற ஒரு நிறுவி: ref: `பிப்` பொருந்தக்கூடிய பைதான் பதிப்பைக் கொண்ட ஒன்றைக் " +"கண்டுபிடிக்கும் வரை பழைய பதிப்புகளின் மூலம் திரும்பிப் பார்க்கும்." -#: ../source/tutorials/packaging-projects.rst:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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 "" +"`` வகைப்படுத்திகள்`` குறியீட்டைக் கொடுக்கும்: குறிப்பு: `பிப்` உங்கள் தொகுப்பைப் பற்றி சில " +"கூடுதல் மேனிலை தரவு. இந்த வழக்கில், தொகுப்பு பைதான் 3 உடன் மட்டுமே இணக்கமானது மற்றும் " +"OS- சுயாதீனமானது. பைதனின் எந்த பதிப்பு (கள்) உங்கள் தொகுப்பு செயல்படுகிறது, எந்த இயக்க " +"முறைமைகள் உங்கள் தொகுப்பு செயல்படும் என்பதை நீங்கள் எப்போதும் சேர்க்க வேண்டும். " +"வகைப்படுத்திகளின் முழுமையான பட்டியலுக்கு, https://pypi.org/classifiers/ ஐப் " +"பார்க்கவும்." -#: ../source/tutorials/packaging-projects.rst:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 msgid "" "``urls`` lets you list any number of extra links to show on PyPI. Generally " "this could be to the source, documentation, issue trackers, etc." msgstr "" +"`` urls`` PYPI இல் காண்பிக்க கூடுதல் கூடுதல் இணைப்புகளை பட்டியலிட அனுமதிக்கிறது. " +"பொதுவாக இது மூல, ஆவணங்கள், வெளியீட்டு டிராக்கர்கள் போன்றவற்றுக்கு இருக்கலாம்." -#: ../source/tutorials/packaging-projects.rst:253 +#: ../source/tutorials/packaging-projects.rst:284 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 "" +"`` [திட்டம்] `` அட்டவணையில் வரையறுக்கக்கூடிய இந்த மற்றும் பிற துறைகள் பற்றிய விவரங்களுக்கு" +" `pyproject.toml வழிகாட்டி <எழுதுதல்-பைபிரோசெக்ட்-டோம்>` ஐக் காண்க. " +"கண்டுபிடிப்புத்தன்மையை மேம்படுத்துவதற்கான பிற பொதுவான புலங்கள் `` முக்கிய வார்த்தைகள்` " +"மற்றும் உங்கள் தொகுப்பை நிறுவ தேவையான `` சார்புகள்`." -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" -msgstr "" +msgstr "README.MD ஐ உருவாக்குதல்" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" +"திறந்த: கோப்பு: `ReadMe.md` மற்றும் பின்வரும் உள்ளடக்கத்தை உள்ளிடவும். நீங்கள் விரும்பினால் " +"இதைத் தனிப்பயனாக்கலாம்." -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" -msgstr "" +msgstr "உரிமத்தை உருவாக்குதல்" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22206,58 +30988,83 @@ msgid "" "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 "" +"பைதான் தொகுப்பு குறியீட்டில் பதிவேற்றப்பட்ட ஒவ்வொரு தொகுப்புக்கும் உரிமம் சேர்க்க வேண்டியது " +"தேவை. உங்கள் தொகுப்பைப் பயன்படுத்தக்கூடிய விதிமுறைகளை உங்கள் தொகுப்பை நிறுவும் பயனர்களிடம்" +" இது சொல்கிறது. உரிமத்தை எடுக்க உதவ, https://choosealicense.com/ ஐப் பார்க்கவும். " +"நீங்கள் உரிமத்தைத் தேர்ந்தெடுத்ததும், திறந்து: கோப்பு: `உரிமம்` மற்றும் உரிம உரையை உள்ளிடவும்" +". எடுத்துக்காட்டாக, நீங்கள் எம்ஐடி உரிமத்தைத் தேர்ந்தெடுத்திருந்தால்:" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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 "" +"பெரும்பாலானவை பின்தளத்தில் தானாகவே தொகுப்புகளில் உரிமக் கோப்புகளை உள்ளடக்குகின்றன. மேலும்" +" விவரங்களுக்கு உங்கள் பின்தளத்தில் ஆவணங்களைப் பார்க்கவும். உரிமம் பெறுவதற்கான பாதையை `` " +"உரிமம்-கோப்புகள்` `விசையில் சேர்த்தால்: கோப்பு:` pyproject.toml`, மற்றும் உங்கள் உருவாக்க " +"பின்தளத்தில் ஆதரவளிக்கிறது: PEP: `639`, கோப்பு தானாகவே தொகுப்பில் சேர்க்கப்படும்." -#: ../source/tutorials/packaging-projects.rst:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" -msgstr "" +msgstr "பிற கோப்புகள் உட்பட" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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 "" +"மேலே பட்டியலிடப்பட்டுள்ள கோப்புகள் தானாகவே உங்கள்: கால: `மூல வழங்கல் <மூல வழங்கல் (அல்லது" +"\" SDIST \")>` இல் சேர்க்கப்படும். கூடுதல் கோப்புகளை நீங்கள் சேர்க்க விரும்பினால், உங்கள் " +"உருவாக்க பின்தளத்தில் ஆவணங்களைப் பார்க்கவும்." -#: ../source/tutorials/packaging-projects.rst:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" -msgstr "" +msgstr "விநியோக காப்பகங்களை உருவாக்குதல்" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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 "" +"அடுத்த கட்டம் உருவாக்குவது: கால: `விநியோக தொகுப்புகள் <விநியோக தொகுப்பு>` தொகுப்புக்கு" +". இவை பைதான் தொகுப்பு குறியீட்டில் பதிவேற்றப்படும் காப்பகங்கள் மற்றும் நிறுவலாம்: ref: " +"`பிப்`." -#: ../source/tutorials/packaging-projects.rst:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" +"பைபாவின் அண்மைக் கால பதிப்பு உங்களிடம் இருப்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்: குறிப்பு: " +"`பில்ட்` நிறுவப்பட்டுள்ளது:" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" +"இவற்றை நிறுவுவதில் சிக்கல் இருந்தால், இதைக் காண்க: டாக்: `நிறுவுதல்-பேக்கேச்கள்` டுடோரியல்." -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" +"இப்போது இந்த கட்டளையை அதே கோப்பகத்திலிருந்து இயக்கவும்: கோப்பு: `pyproject.toml` " +"அமைந்துள்ளது:" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 msgid "" "This command should output a lot of text and once completed should generate " "two files in the :file:`dist` directory:" msgstr "" +"இந்த கட்டளை நிறைய உரையை வெளியிட வேண்டும் மற்றும் முடிந்ததும் இரண்டு கோப்புகளை உருவாக்க " +"வேண்டும்: கோப்பு: `Dist` அடைவு:" -#: ../source/tutorials/packaging-projects.rst:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` " +"அதேசமயம் `` .Whl`` கோப்பு ஒரு: கால: `கட்டப்பட்ட வழங்கல் <கட்டமைக்கப்பட்ட விநியோகம்>`. " +"புதியது: ref: `பிப்` பதிப்புகள் முன்னுரிமையாக கட்டமைக்கப்பட்ட விநியோகங்களை நிறுவுகின்" +"றன, ஆனால் தேவைப்பட்டால் மூல விநியோகங்களுக்கு மீண்டும் வரும். நீங்கள் எப்போதும் ஒரு மூல " +"விநியோகத்தை பதிவேற்ற வேண்டும் மற்றும் உங்கள் திட்டம் இணக்கமான தளங்களுக்கு கட்டப்பட்ட " +"விநியோகங்களை வழங்க வேண்டும். இந்த வழக்கில், எங்கள் எடுத்துக்காட்டு தொகுப்பு எந்தவொரு " +"தளத்திலும் பைத்தானுடன் இணக்கமானது, எனவே கட்டப்பட்ட ஒரு வழங்கல் மட்டுமே தேவைப்படுகிறது." -#: ../source/tutorials/packaging-projects.rst:376 +#: ../source/tutorials/packaging-projects.rst:410 msgid "Uploading the distribution archives" -msgstr "" +msgstr "விநியோக காப்பகங்களைப் பதிவேற்றுதல்" -#: ../source/tutorials/packaging-projects.rst:378 +#: ../source/tutorials/packaging-projects.rst:412 msgid "Finally, it's time to upload your package to the Python Package Index!" msgstr "" +"இறுதியாக, உங்கள் தொகுப்பை பைதான் தொகுப்பு குறியீட்டில் பதிவேற்ற வேண்டிய நேரம் இது!" -#: ../source/tutorials/packaging-projects.rst:380 +#: ../source/tutorials/packaging-projects.rst:414 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 " @@ -22287,65 +31102,87 @@ msgid "" "You will also need to verify your email address before you're able to upload " "any packages. For more details, see :doc:`/guides/using-testpypi`." msgstr "" +"நீங்கள் செய்ய வேண்டிய முதல் சேதி, டெச்ட்பைட்டில் ஒரு கணக்கைப் பதிவுசெய்வதுதான், இது சோதனை " +"மற்றும் பரிசோதனைக்கு நோக்கம் கொண்ட தொகுப்பு குறியீட்டின் தனி நிகழ்வு ஆகும். இந்த டுடோரியல் " +"போன்ற விசயங்களுக்கு இது சிறந்தது, அங்கு நாம் உண்மையான குறியீட்டில் பதிவேற்ற விரும்பவில்லை" +". கணக்கைப் பதிவுசெய்ய, https://test.pypi.org/account/register/ க்குச் சென்று அந்தப் " +"பக்கத்தில் உள்ள படிகளை முடிக்கவும். நீங்கள் எந்த தொகுப்புகளையும் பதிவேற்றுவதற்கு முன்பு உங்கள்" +" மின்னஞ்சல் முகவரியை சரிபார்க்க வேண்டும். மேலும் விவரங்களுக்கு, காண்க: DOC: " +"`/வழிகாட்டிகள்/பயன்படுத்துதல்-டெச்ட்பைப்பைப் பயன்படுத்துதல்`." -#: ../source/tutorials/packaging-projects.rst:388 +#: ../source/tutorials/packaging-projects.rst:422 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 "" +"உங்கள் திட்டத்தை பாதுகாப்பாக பதிவேற்ற, உங்களுக்கு ஒரு பைபி `ஏபிஐ டோக்கன்`_ தேவை. " +"Https://test.pypi.org/manage/account/#api-tokens இல் ஒன்றை உருவாக்கவும், " +"\"நோக்கம்\" ஐ \"முழு கணக்கு\" ஆகவும் அமைக்கவும். ** நீங்கள் கிள்ளாக்கை நகலெடுத்து " +"சேமிக்கும் வரை பக்கத்தை மூட வேண்டாம் - அந்த கிள்ளாக்கை நீங்கள் மீண்டும் பார்க்க மாட்டீர்கள். **" -#: ../source/tutorials/packaging-projects.rst:395 +#: ../source/tutorials/packaging-projects.rst:429 msgid "" "Now that you are registered, you can use :ref:`twine` to upload the " "distribution packages. You'll need to install Twine:" msgstr "" +"இப்போது நீங்கள் பதிவுசெய்துள்ளீர்கள், நீங்கள் பயன்படுத்தலாம்: Ref: `ட்வைன்` விநியோக தொகுப்புகளை" +" பதிவேற்ற. நீங்கள் கயிறு நிறுவ வேண்டும்:" -#: ../source/tutorials/packaging-projects.rst:410 +#: ../source/tutorials/packaging-projects.rst:444 msgid "" "Once installed, run Twine to upload all of the archives under :file:`dist`:" msgstr "" +"நிறுவப்பட்டதும், காப்பகங்கள் அனைத்தையும் பதிவேற்ற கயிறு இயக்கவும்: கோப்பு: `DIST`:" -#: ../source/tutorials/packaging-projects.rst:424 +#: ../source/tutorials/packaging-projects.rst:458 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:427 +#: ../source/tutorials/packaging-projects.rst:461 msgid "After the command completes, you should see output similar to this:" -msgstr "" +msgstr "கட்டளை முடிந்ததும், இதைப் போன்ற வெளியீட்டை நீங்கள் காண வேண்டும்:" -#: ../source/tutorials/packaging-projects.rst:438 +#: ../source/tutorials/packaging-projects.rst:472 msgid "" "Once uploaded, your package should be viewable on TestPyPI; for example: " "``https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE``." msgstr "" +"பதிவேற்றியதும், உங்கள் தொகுப்பு டெச்ட்பைப்பில் பார்க்கப்பட வேண்டும்; எடுத்துக்காட்டாக: `` " +"https: // test.pypi.org/project/example_package_your_username_here``." -#: ../source/tutorials/packaging-projects.rst:443 +#: ../source/tutorials/packaging-projects.rst:477 msgid "Installing your newly uploaded package" -msgstr "" +msgstr "புதிதாக பதிவேற்றிய உங்கள் தொகுப்பை நிறுவுதல்" -#: ../source/tutorials/packaging-projects.rst:445 +#: ../source/tutorials/packaging-projects.rst:479 msgid "" "You can use :ref:`pip` to install your package and verify that it works. " "Create a :ref:`virtual environment ` and install your package from TestPyPI:" msgstr "" +"நீங்கள் பயன்படுத்தலாம்: ref: `பிப்` உங்கள் தொகுப்பை நிறுவவும், அது செயல்படுகிறதா என்பதை " +"சரிபார்க்கவும். ஒரு: ref: `மெய்நிகர் சூழல் <மெய்நிகர் சூழல்களை உருவாக்குதல் மற்றும் " +"பயன்படுத்துதல்>` மற்றும் டெச்ட்பைட்டிலிருந்து உங்கள் தொகுப்பை நிறுவவும்:" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" -msgstr "" +msgstr "உங்கள் பயனர்பெயரை தொகுப்பு பெயரில் குறிப்பிடுவதை உறுதிசெய்க!" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" +"PIP டெச்ட்பைட்டிலிருந்து தொகுப்பை நிறுவ வேண்டும், வெளியீடு இதுபோன்றதாக இருக்க வேண்டும்:" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22354,98 +31191,138 @@ msgid "" "package doesn't have any dependencies, it's a good practice to avoid " "installing dependencies when using TestPyPI." msgstr "" +"இந்த எடுத்துக்காட்டு நேரடி பைபிக்கு பதிலாக டெச்ட்பை குறிப்பிட `` --index-url`` " +"கொடியைப் பயன்படுத்துகிறது. கூடுதலாக, இது `` --no-deps`` ஐக் குறிப்பிடுகிறது. " +"டெச்ட்பிபிக்கு லைவ் பைபியின் அதே தொகுப்புகள் இல்லை என்பதால், சார்புகளை நிறுவ முயற்சிப்பது " +"தோல்வியடையக்கூடும் அல்லது எதிர்பாராத ஒன்றை நிறுவக்கூடும். எங்கள் எடுத்துக்காட்டு " +"தொகுப்புக்கு எந்தவிதமான சார்புநிலைகளும் இல்லை என்றாலும், டெச்ட்பைப்பைப் பயன்படுத்தும் போது " +"சார்புகளை நிறுவுவதைத் தவிர்ப்பது ஒரு நல்ல நடைமுறை." -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" -msgstr "" +msgstr "மற்றும் தொகுப்பை இறக்குமதி செய்யுங்கள்:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" +"** வாழ்த்துக்கள், நீங்கள் ஒரு பைதான் திட்டத்தை தொகுத்து விநியோகித்திருக்கிறீர்கள்! ** ✨ ✨" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 msgid "" "Register an account on https://pypi.org - note that these are two separate " "servers and the login details from the test server are not shared with the " "main server." msgstr "" +"ஒரு கணக்கை https://pypi.org இல் பதிவுசெய்க - இவை இரண்டு தனித்தனி சேவையகங்கள் மற்றும் " +"சோதனை சேவையகத்திலிருந்து உள்நுழைவு விவரங்கள் முதன்மையான சேவையகத்துடன் பகிரப்படவில்லை " +"என்பதை நினைவில் கொள்க." -#: ../source/tutorials/packaging-projects.rst:524 +#: ../source/tutorials/packaging-projects.rst:558 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 "" +"உங்கள் தொகுப்பைப் பதிவேற்றவும் `` `ட்வைன் பதிவேற்றவும் DIST/*` `பயன்படுத்தவும் மற்றும் " +"உண்மையான PYPI இல் நீங்கள் பதிவுசெய்த கணக்கிற்கான உங்கள் சான்றுகளை உள்ளிடவும். இப்போது நீங்கள் " +"தயாரிப்பில் தொகுப்பை பதிவேற்றுகிறீர்கள், நீங்கள் `` --repository`` ஐ குறிப்பிட " +"தேவையில்லை; தொகுப்பு முன்னிருப்பாக https://pypi.org/ இல் பதிவேற்றும்." -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" +"`` பைதான் 3 -எம் பிஐபி நிறுவுதல் [உங்கள் தொகுப்பாக] `` ஆகியவற்றைப் பயன்படுத்தி உண்மையான " +"பைபியிலிருந்து உங்கள் தொகுப்பை நிறுவவும்." -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" +"நீங்கள் தேர்ந்தெடுக்கப்பட்ட கட்டமைப்பிற்கான மேம்பட்ட உள்ளமைவைப் பற்றி படியுங்கள்: `அட்ச்லிங் " +"<அட்ச்லிங்-கான்ஃபிக்_>` _,: டாக்: `செட்டப்டூல்ச் <செட்டுப்டூல்ச்: " +"யூசர்சூட்/பைபிரோசெக்ட்_கான்ஃபிக்>`,: டாக்: `ஃபிளிட் <ஃப்ளிட்: பி.டி.எம்." -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 msgid "" "Consider packaging tools that provide a single command-line interface for " "project management and packaging, such as :ref:`hatch`, :ref:`flit`, :ref:" "`pdm`, and :ref:`poetry`." msgstr "" +"திட்ட மேலாண்மை மற்றும் பேக்கேசிங்கிற்கான ஒற்றை கட்டளை-வரி இடைமுகத்தை வழங்கும் பேக்கேசிங் " +"கருவிகளைக் கவனியுங்கள், அதாவது: ref: `அட்ச்`,: ref:` ஃபிளிட்`,: ref: `PDM`, மற்றும்: " +"ref:` கவிதை`." -#: ../source/tutorials/packaging-projects.rst:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" -msgstr "" +msgstr "குறிப்புகள்" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages ` மற்றும் ** மேம்பட்ட தலைப்பாக " +"கருதப்படுகிறது ** (இந்த டூட்டோரியலில் மறைக்கப்படவில்லை). நீங்கள் பைதான் பேக்கேசிங் மூலம் " +"மட்டுமே தொடங்கினால், * வழக்கமான தொகுப்புகள் * மற்றும் `__init __. பை`` (கோப்பு காலியா" +"க இருந்தாலும் கூட) ஒட்டிக்கொள்ள பரிந்துரைக்கப்படுகிறது." diff --git a/locales/tr/LC_MESSAGES/messages.po b/locales/tr/LC_MESSAGES/messages.po index 794118fb4..90b491a72 100644 --- a/locales/tr/LC_MESSAGES/messages.po +++ b/locales/tr/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-01-07 04:23+0000\n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" "PO-Revision-Date: 2024-10-16 20:19+0000\n" "Last-Translator: Emr \n" "Language-Team: Turkish `, 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 " @@ -1887,7 +2585,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2681,49 +3379,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2732,7 +3472,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2740,7 +3480,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2748,32 +3488,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2783,21 +3523,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2806,31 +3546,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2840,48 +3580,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2889,11 +3629,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2902,11 +3642,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2914,49 +3654,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2965,21 +3725,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -2988,11 +3748,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3000,15 +3760,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3016,21 +3776,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3182,7 +3942,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3539,7 +4299,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4227,7 +4987,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5907,6 +6667,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8559,13 +9644,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8573,11 +9659,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8587,29 +9673,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8617,37 +9703,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8656,98 +9742,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8755,93 +9841,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8850,31 +9978,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8883,26 +10072,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8910,28 +10099,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8939,26 +10128,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11874,23 +13063,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11898,7 +13094,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11906,64 +13102,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11971,28 +13167,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12001,22 +13197,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12024,29 +13220,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12056,7 +13265,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12064,7 +13273,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12072,17 +13281,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12090,39 +13299,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12132,11 +13341,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12145,38 +13354,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12184,7 +13393,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12192,18 +13401,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12212,7 +13421,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12223,7 +13432,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12241,7 +13450,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12250,37 +13459,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12288,11 +13497,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12402,8 +13624,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12510,8 +13732,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13131,24 +14353,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13156,28 +14387,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13188,33 +14419,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13223,89 +14454,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13650,11 +14881,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13666,11 +14897,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13678,7 +14909,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13686,17 +14917,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13707,11 +14937,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13720,13 +14950,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13735,7 +14965,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13748,7 +14978,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13758,7 +14988,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13766,20 +14996,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13789,194 +15019,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -13984,24 +15215,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14028,7 +15259,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14181,17 +15412,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14200,7 +15431,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14208,7 +15439,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14216,34 +15447,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14252,13 +15483,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14266,7 +15497,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14274,24 +15505,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14299,22 +15530,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14325,65 +15556,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14391,106 +15622,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15712,7 +16943,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15777,7 +17008,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16065,12 +17296,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16124,90 +17355,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16215,7 +17647,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16226,14 +17658,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16242,69 +17674,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16315,11 +17747,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16329,7 +17761,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16337,11 +17769,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16349,13 +17781,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16366,23 +17798,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16390,11 +17822,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16404,33 +17836,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16438,13 +17870,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16453,34 +17885,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16721,7 +18161,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16733,81 +18173,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16821,7 +18262,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16830,7 +18271,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16842,41 +18283,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16884,20 +18429,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16906,92 +18451,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -16999,14 +18547,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17014,7 +18562,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17022,24 +18570,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17047,7 +18595,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17058,17 +18606,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17076,19 +18624,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17097,20 +18645,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17118,18 +18666,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17137,7 +18685,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17145,19 +18693,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17255,7 +18809,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17263,7 +18827,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17271,58 +18835,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17330,7 +18894,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17339,13 +18903,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17354,7 +18918,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17363,18 +18927,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17382,7 +18946,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17392,11 +18956,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17404,15 +18968,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17420,11 +18984,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17432,29 +18996,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17463,11 +19041,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17475,14 +19053,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17491,28 +19069,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17540,15 +19118,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17556,23 +19142,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17588,44 +19174,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17633,7 +19219,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17642,7 +19228,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17650,22 +19270,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17674,17 +19294,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17694,11 +19318,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17708,7 +19332,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17716,7 +19340,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17724,11 +19348,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17738,7 +19362,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17748,14 +19372,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17765,7 +19389,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17773,7 +19397,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17782,71 +19406,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17855,7 +19479,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17865,48 +19489,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17915,7 +19562,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17927,7 +19574,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17937,18 +19584,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17956,11 +19603,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17968,7 +19615,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -17978,7 +19625,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -17988,7 +19635,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -17996,28 +19643,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18026,37 +19673,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18064,19 +19711,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18129,7 +19782,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18186,14 +19868,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18203,7 +19885,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18211,44 +19893,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18257,7 +19957,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18268,7 +19968,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18276,7 +20006,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18339,11 +20073,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18352,65 +20086,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18418,7 +20152,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18429,7 +20163,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18438,33 +20172,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18474,7 +20208,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18484,7 +20218,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18492,7 +20226,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18503,22 +20237,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18527,25 +20261,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18553,13 +20287,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18569,18 +20303,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18588,7 +20322,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18598,7 +20332,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18606,11 +20340,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18621,7 +20355,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18629,7 +20363,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18638,7 +20372,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18646,7 +20380,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18656,20 +20390,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18677,7 +20411,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18686,18 +20420,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18705,13 +20439,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18720,23 +20454,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18745,216 +20479,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -18987,11 +20573,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19001,11 +20587,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19014,20 +20600,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19035,29 +20621,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19065,21 +20660,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19087,7 +20682,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19097,11 +20692,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19109,113 +20704,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21863,7 +23464,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22120,7 +23721,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22129,24 +23730,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22155,31 +23756,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22187,21 +23800,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22210,57 +23823,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22358,23 +23974,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22382,28 +23998,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22411,44 +24027,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Ukrainian `, 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 +#, fuzzy +#| msgid "Distribution Package" +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 +#, fuzzy +#| msgid "zest.releaser" +msgid "Aim for stable releases" +msgstr "zest.releaser" + +#: ../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 " @@ -2218,7 +2920,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy #| msgid "Version" msgid "Versioning" @@ -3049,49 +3751,95 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 +#, fuzzy +#| msgid "``classifiers``" +msgid "License Classifier" +msgstr "``classifiers``" + +#: ../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 +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 +#, fuzzy +#| msgid "Local version identifiers" +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:152 +#: ../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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "Реєстр Пакунків" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "Індекс за проєктом" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -3100,7 +3848,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -3108,7 +3856,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -3116,34 +3864,34 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy #| msgid "Project name" msgid "Project Root Directory" msgstr "Назва проєкту" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -3153,23 +3901,23 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "Чистий модуль" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata" msgstr "Назва проєкту" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -3178,33 +3926,33 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy #| msgid "pyproject.toml" msgid "Pyproject Metadata Key" msgstr "pyproject.toml" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "Управління з пакування Python (PyPA)" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3214,48 +3962,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "Реєстр Python-пакунків (PyPI)" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "Випуск" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -3263,11 +4011,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3276,11 +4024,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "Специфікатор вимоги" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3288,49 +4036,71 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +#| msgid "Project name" +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 "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "Вихідний архів" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3339,21 +4109,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "Специфікатор версії" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3362,11 +4132,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3374,17 +4144,17 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 #, fuzzy #| msgid "Format::" msgid "Wheel Format" msgstr "Формат::" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "Колесо" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3392,23 +4162,23 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 #, fuzzy #| msgid "Project" msgid "Wheel Project" msgstr "Проєкт" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3562,7 +4332,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "Приклади" @@ -3925,7 +4695,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4623,7 +5393,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "``scripts``" @@ -6363,6 +7133,339 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +#, fuzzy +#| msgid "Examples" +msgid "Licensing Examples" +msgstr "Приклади" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +#, fuzzy +#| msgid "For example:" +msgid "Basic example" +msgstr "Наприклад:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +#, fuzzy +#| msgid "For example:" +msgid "Advanced example" +msgstr "Наприклад:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +#, fuzzy +#| msgid "For example:" +msgid "Expression examples" +msgstr "Наприклад:" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -9053,13 +10156,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -9067,11 +10171,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -9081,29 +10185,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -9111,37 +10215,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "``name``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -9150,100 +10254,100 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "``version``" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 #, fuzzy #| msgid "install_requires vs requirements files" msgid "Dependencies and requirements" msgstr "install_requires проти файлів requirements" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "``dependencies``/``optional-dependencies``" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "``requires-python``" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -9251,93 +10355,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "``authors``/``maintainers``" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "``description``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "``readme``" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "``license``" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -9346,31 +10492,94 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +#, fuzzy +#| msgid "``license``" +msgid "``license-files``" +msgstr "``license``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "``keywords``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "``classifiers``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -9379,26 +10588,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "``urls``" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9406,28 +10615,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9435,28 +10644,28 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 #, fuzzy #| msgid "For example:" msgid "A full example" msgstr "Наприклад:" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -12389,23 +13598,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -12413,7 +13629,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -12421,64 +13637,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12486,28 +13702,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12516,22 +13732,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12539,29 +13755,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12571,7 +13800,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12579,7 +13808,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12587,17 +13816,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12605,15 +13834,15 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 #, fuzzy msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" @@ -12621,26 +13850,26 @@ msgid "" msgstr "" "https://self-issued.info/docs/draft-jones-jose-jws-json-serialization.html" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 #, fuzzy msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "https://self-issued.info/docs/draft-jones-jose-json-private-key.html" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "ЧаПи" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12650,11 +13879,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12663,38 +13892,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12702,7 +13931,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12710,18 +13939,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12730,7 +13959,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12741,7 +13970,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12759,7 +13988,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12768,37 +13997,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12806,11 +14035,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "Додаток" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12920,8 +14162,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "Приклад::" @@ -13028,8 +14270,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "Приклади::" @@ -13649,24 +14891,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13674,30 +14925,30 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 #, fuzzy #| msgid "Requirements files" msgid "Requires" msgstr "Файли requirements" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13708,33 +14959,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13743,89 +14994,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -14179,12 +15430,12 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 #, fuzzy msgid "Names" msgstr "Name" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -14196,11 +15447,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -14208,7 +15459,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -14216,18 +15467,17 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 #, fuzzy msgid "Versions" msgstr "Version" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -14238,11 +15488,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -14251,13 +15501,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -14266,7 +15516,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -14279,7 +15529,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -14289,7 +15539,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -14297,20 +15547,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -14320,205 +15570,206 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 #, fuzzy msgid "Python equivalent" msgstr "Версія Python" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 #, fuzzy msgid "``os_name``" msgstr "``name``" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 #, fuzzy msgid ":py:data:`os.name`" msgstr "``name``" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 #, fuzzy msgid "``platform_version``" msgstr "``version``" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 #, fuzzy msgid ":py:func:`platform.version()`" msgstr "``version``" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 #, fuzzy msgid "``python_version``" msgstr "``version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 #, fuzzy msgid "``python_full_version``" msgstr "``python_requires``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 #, fuzzy msgid ":py:func:`platform.python_version()`" msgstr "``version``" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 #, fuzzy msgid "``cpython``" msgstr "``description``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 #, fuzzy msgid "``implementation_version``" msgstr "Реалізація мови та теґ версії" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 #, fuzzy msgid "``test``" msgstr "``text/x-rst``" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14526,24 +15777,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14570,7 +15821,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14726,17 +15977,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14745,7 +15996,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14753,7 +16004,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14761,34 +16012,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14797,13 +16048,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14811,7 +16062,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14819,24 +16070,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14844,22 +16095,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14870,65 +16121,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "Git" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" msgstr "git" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14936,108 +16187,108 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "Mercurial" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../source/specifications/direct-url-data-structure.rst:184 +#: ../source/specifications/direct-url-data-structure.rst:187 msgid "hg" msgstr "hg" -#: ../source/specifications/direct-url-data-structure.rst:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "Bazaar" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 #, fuzzy #| msgid "https://www.mercurial-scm.org/" msgid "https://www.breezy-vcs.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../source/specifications/direct-url-data-structure.rst:202 +#: ../source/specifications/direct-url-data-structure.rst:205 msgid "bzr" msgstr "bzr" -#: ../source/specifications/direct-url-data-structure.rst:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "Subversion" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "https://subversion.apache.org/" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../source/specifications/direct-url-data-structure.rst:220 +#: ../source/specifications/direct-url-data-structure.rst:223 msgid "svn" msgstr "svn" -#: ../source/specifications/direct-url-data-structure.rst:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -16275,7 +17526,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -16341,7 +17592,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 #, fuzzy #| msgid "Packaging tool recommendations" msgid "Recommendations" @@ -16639,12 +17890,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16722,67 +17973,274 @@ msgstr "``>=19.0``" msgid "``>=19.3``" msgstr "``>=19.3``" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" -msgstr "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:142 +msgid "``>=20.3``" +msgstr "``>=20.3``" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "auditwheel" +msgstr "auditwheel" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=1.0.0``" +msgstr "``>=1.0.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=2.0.0``" +msgstr "``>=2.0.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=3.0.0``" +msgstr "``>=3.0.0``" + +#: ../source/specifications/platform-compatibility-tags.rst:143 +msgid "``>=3.3.0`` [#]_" +msgstr "``>=3.3.0`` [#]_" + +#: ../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 +#, fuzzy +msgid "``musllinux``" +msgstr "``manylinux1``" + +#: ../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 +#, fuzzy +#| msgid "``version``" +msgid "``universal2``" +msgstr "``version``" + +#: ../source/specifications/platform-compatibility-tags.rst:219 +msgid "``arm64``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +#, fuzzy +#| msgid "``version``" +msgid "``universal``" +msgstr "``version``" + +#: ../source/specifications/platform-compatibility-tags.rst:220 +msgid "``i386``, ``ppc``, ``ppc64``, ``x86_64``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +#, fuzzy +#| msgid "``pip install app``" +msgid "``intel``" +msgstr "``pip install app``" + +#: ../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:143 -msgid "auditwheel" -msgstr "auditwheel" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" +msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=1.0.0``" -msgstr "``>=1.0.0``" +#: ../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:143 -msgid "``>=2.0.0``" -msgstr "``>=2.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" +msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=3.0.0``" -msgstr "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" -msgstr "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -#, fuzzy -msgid "``musllinux``" -msgstr "``manylinux1``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:286 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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:157 +#: ../source/specifications/platform-compatibility-tags.rst:289 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:" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:188 +#: ../source/specifications/platform-compatibility-tags.rst:291 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." +"``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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16790,7 +18248,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16801,14 +18259,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16817,69 +18275,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16890,11 +18348,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16904,7 +18362,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16912,11 +18370,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16924,13 +18382,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16941,23 +18399,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16965,11 +18423,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16979,33 +18437,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -17013,13 +18471,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -17028,34 +18486,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "Файл :file:`.pypirc`" @@ -17300,7 +18766,7 @@ msgid "``dependencies``" msgstr "Перевизначення залежностей" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "``dynamic``" @@ -17313,83 +18779,84 @@ msgstr "" msgid "``gui-scripts``" msgstr "``scripts``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 #, fuzzy msgid "``maintainers``" msgstr "Доглядач" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 #, fuzzy msgid "``optional-dependencies``" msgstr "``dependencies``/``optional-dependencies``" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -17403,7 +18870,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -17412,7 +18879,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -17424,41 +18891,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -17466,20 +19037,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17488,92 +19059,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17581,14 +19155,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17596,7 +19170,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17604,24 +19178,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17629,7 +19203,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17640,17 +19214,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17658,19 +19232,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17679,20 +19253,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17700,18 +19274,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17719,7 +19293,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17727,19 +19301,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17837,7 +19417,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17845,7 +19435,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17853,58 +19443,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "Файл METADATA" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "Файл RECORD" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17912,7 +19502,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17921,13 +19511,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17936,7 +19526,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17945,18 +19535,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17964,7 +19554,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17974,11 +19564,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "Файл INSTALLER" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17986,15 +19576,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -18002,11 +19592,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -18014,29 +19604,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -18045,11 +19649,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -18057,14 +19661,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -18073,28 +19677,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -18124,15 +19728,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -18140,23 +19752,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -18172,44 +19784,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -18217,7 +19829,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -18226,7 +19838,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -18234,22 +19880,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -18258,18 +19904,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "Переклади" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -18279,11 +19929,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -18293,7 +19943,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -18301,7 +19951,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -18309,13 +19959,13 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy #| msgid "Installer" msgid "Installers" msgstr "Встановлювач" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -18325,7 +19975,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -18335,14 +19985,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -18352,7 +20002,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -18360,7 +20010,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -18369,71 +20019,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -18442,7 +20092,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -18452,50 +20102,73 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 #, fuzzy #| msgid "Contents" msgid "Clients" msgstr "Зміст" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18504,7 +20177,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18516,7 +20189,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18526,18 +20199,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18545,11 +20218,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18557,7 +20230,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18567,7 +20240,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18577,7 +20250,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18585,28 +20258,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18615,38 +20288,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "Переклади" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18654,19 +20327,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy #| msgid "Project" msgid "Project List" msgstr "Проєкт" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 #, fuzzy #| msgid "For example:" msgid "As an example:" msgstr "Наприклад:" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18723,7 +20402,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18782,14 +20490,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18799,7 +20507,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18807,44 +20515,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18853,7 +20579,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18864,7 +20590,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18872,7 +20628,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18937,13 +20697,13 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy #| msgid "Version" msgid "Version + Format Selection" msgstr "Version" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18952,65 +20712,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -19018,7 +20778,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -19029,7 +20789,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -19038,33 +20798,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -19074,7 +20834,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -19084,7 +20844,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -19092,7 +20852,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -19103,22 +20863,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -19127,25 +20887,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -19153,13 +20913,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -19169,18 +20929,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -19188,7 +20948,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -19198,7 +20958,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -19206,11 +20966,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -19221,7 +20981,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -19229,7 +20989,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -19238,7 +20998,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -19246,7 +21006,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -19256,20 +21016,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -19277,7 +21037,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -19286,18 +21046,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -19305,13 +21065,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -19320,23 +21080,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -19345,218 +21105,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -#, fuzzy -#| msgid "Additional tools" -msgid "Additional file information" -msgstr "Додаткові інструменти" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19589,11 +21199,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19603,11 +21213,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19616,20 +21226,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19637,29 +21247,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19667,21 +21286,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19689,7 +21308,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19699,11 +21318,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19711,113 +21330,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -22515,7 +24140,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "Наступні кроки" @@ -22772,7 +24397,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22781,24 +24406,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22807,31 +24432,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22839,21 +24476,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22862,57 +24499,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -23010,23 +24650,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "**Вітаємо, ви запакували та розповсюдили Python-проєкт!** ✨ 🍰 ✨" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -23038,7 +24678,7 @@ msgstr "" "видаляє пакунки та облікові записи. Краще використовувати TestPyPI для " "тестування та експериментів, як у цьому туторіалі." -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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 " @@ -23048,7 +24688,7 @@ msgstr "" "пакунків, ви можете зробити те ж саме, що і в цьому туторіалі, але з цими " "важливими відмінностями:" -#: ../source/tutorials/packaging-projects.rst:519 +#: ../source/tutorials/packaging-projects.rst:553 #, fuzzy msgid "" "Choose a memorable and unique name for your package. You don't have to " @@ -23058,7 +24698,7 @@ msgstr "" "Оберіть пам'ятну й унікальну назву для свого пакунку. Вам не потрібно " "додавати своє ім'я користувача, як ви це робили в туторіалі." -#: ../source/tutorials/packaging-projects.rst:521 +#: ../source/tutorials/packaging-projects.rst:555 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 " @@ -23068,7 +24708,7 @@ msgstr "" "окремих сервери, а дані для входу для тестового сервера не підходять до " "основного." -#: ../source/tutorials/packaging-projects.rst:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -23081,7 +24721,7 @@ msgstr "" "repository``; пакунок буде опубліковано на https://pypi.org/ за " "замовчуванням." -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." @@ -23089,7 +24729,7 @@ msgstr "" "Встановіть свій пакунок зі справжнього PyPI за допомогою ``python3 -m pip " "install [your-package]``." -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 msgid "" "At this point if you want to read more on packaging Python libraries here " "are some things you can do:" @@ -23097,32 +24737,32 @@ msgstr "" "На цьому етапі, якщо ви бажаєте почитати більше про пакування Python-" "бібліотек, то ось що ви можете зробити:" -#: ../source/tutorials/packaging-projects.rst:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages \n" "Language-Team: Vietnamese `, 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 " @@ -1912,7 +2610,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "" @@ -2706,49 +3404,91 @@ msgid "" msgstr "" #: ../source/glossary.rst:149 -msgid "Module" +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 +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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2757,7 +3497,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2765,7 +3505,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2773,32 +3513,32 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 msgid "Project Root Directory" msgstr "" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2808,21 +3548,21 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" msgstr "" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2831,31 +3571,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" msgstr "" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2865,48 +3605,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2914,11 +3654,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2927,11 +3667,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2939,49 +3679,69 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../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:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -2990,21 +3750,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3013,11 +3773,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3025,15 +3785,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3041,21 +3801,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3207,7 +3967,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "" @@ -3564,7 +4324,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "" @@ -4252,7 +5012,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5932,6 +6692,331 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8584,13 +9669,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8598,11 +9684,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8612,29 +9698,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8642,37 +9728,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8681,98 +9767,98 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8780,93 +9866,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This 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:335 +#: ../source/guides/writing-pyproject-toml.rst:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 +msgid "" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8875,31 +10003,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8908,26 +10097,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -8935,28 +10124,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -8964,26 +10153,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -11899,23 +13088,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11923,7 +13119,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -11931,64 +13127,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -11996,28 +13192,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12026,22 +13222,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12049,29 +13245,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12081,7 +13290,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12089,7 +13298,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12097,17 +13306,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12115,39 +13324,39 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12157,11 +13366,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12170,38 +13379,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12209,7 +13418,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12217,18 +13426,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12237,7 +13446,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12248,7 +13457,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12266,7 +13475,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12275,37 +13484,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12313,11 +13522,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12427,8 +13649,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -12535,8 +13757,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "" @@ -13156,24 +14378,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13181,28 +14412,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13213,33 +14444,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13248,89 +14479,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13675,11 +14906,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13691,11 +14922,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13703,7 +14934,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13711,17 +14942,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13732,11 +14962,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13745,13 +14975,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13760,7 +14990,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13773,7 +15003,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13783,7 +15013,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13791,20 +15021,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13814,194 +15044,195 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14009,24 +15240,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14053,7 +15284,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14206,17 +15437,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14225,7 +15456,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14233,7 +15464,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14241,34 +15472,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14277,13 +15508,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14291,7 +15522,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14299,24 +15530,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14324,22 +15555,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14350,65 +15581,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14416,106 +15647,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15737,7 +16968,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15802,7 +17033,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16090,12 +17321,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16149,90 +17380,291 @@ msgstr "" msgid "``manylinux1``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2010``" +#: ../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:140 -msgid "``manylinux2014``" +#: ../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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../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:143 -msgid "``>=1.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=2.0.0``" +#: ../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:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -msgid "``musllinux``" +#: ../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:152 +#: ../source/specifications/platform-compatibility-tags.rst:289 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:157 +#: ../source/specifications/platform-compatibility-tags.rst:291 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:" +"``arm64_iphonesimulator``, for simulators running on Apple Silicon macOS " +"hardware; and" 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." +#: ../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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16240,7 +17672,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16251,14 +17683,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16267,69 +17699,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16340,11 +17772,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16354,7 +17786,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16362,11 +17794,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16374,13 +17806,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16391,23 +17823,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16415,11 +17847,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16429,33 +17861,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16463,13 +17895,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16478,34 +17910,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16746,7 +18186,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16758,81 +18198,82 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16846,7 +18287,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16855,7 +18296,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16867,41 +18308,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16909,20 +18454,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -16931,92 +18476,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17024,14 +18572,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17039,7 +18587,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17047,24 +18595,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17072,7 +18620,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17083,17 +18631,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17101,19 +18649,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17122,20 +18670,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17143,18 +18691,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17162,7 +18710,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17170,19 +18718,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17280,7 +18834,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17288,7 +18852,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17296,58 +18860,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17355,7 +18919,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17364,13 +18928,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17379,7 +18943,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17388,18 +18952,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17407,7 +18971,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17417,11 +18981,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17429,15 +18993,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17445,11 +19009,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17457,29 +19021,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17488,11 +19066,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17500,14 +19078,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17516,28 +19094,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17565,15 +19143,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17581,23 +19167,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17613,44 +19199,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17658,7 +19244,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17667,7 +19253,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17675,22 +19295,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17699,17 +19319,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" msgstr "" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17719,11 +19343,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17733,7 +19357,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17741,7 +19365,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17749,11 +19373,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" msgstr "" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17763,7 +19387,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17773,14 +19397,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17790,7 +19414,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17798,7 +19422,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17807,71 +19431,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17880,7 +19504,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17890,48 +19514,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" msgstr "" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -17940,7 +19587,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -17952,7 +19599,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -17962,18 +19609,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -17981,11 +19628,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -17993,7 +19640,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18003,7 +19650,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18013,7 +19660,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18021,28 +19668,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18051,37 +19698,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" msgstr "" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18089,19 +19736,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" msgstr "" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18154,7 +19807,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18211,14 +19893,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18228,7 +19910,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18236,44 +19918,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18282,7 +19982,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18293,7 +19993,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18301,7 +20031,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18364,11 +20098,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" msgstr "" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18377,65 +20111,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18443,7 +20177,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18454,7 +20188,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18463,33 +20197,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18499,7 +20233,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18509,7 +20243,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18517,7 +20251,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18528,22 +20262,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18552,25 +20286,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18578,13 +20312,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18594,18 +20328,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18613,7 +20347,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18623,7 +20357,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18631,11 +20365,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18646,7 +20380,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18654,7 +20388,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18663,7 +20397,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18671,7 +20405,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18681,20 +20415,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18702,7 +20436,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18711,18 +20445,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18730,13 +20464,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18745,23 +20479,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18770,216 +20504,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19012,11 +20598,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19026,11 +20612,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19039,20 +20625,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19060,29 +20646,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19090,21 +20685,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19112,7 +20707,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19122,11 +20717,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19134,113 +20729,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21888,7 +23489,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22145,7 +23746,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22154,24 +23755,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22180,31 +23781,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22212,21 +23825,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22235,57 +23848,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22383,23 +23999,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22407,28 +24023,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22436,44 +24052,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2023, 2024. # Autuamn End , 2023. # Thomas , 2023, 2024. -# 大王叫我来巡山 , 2024. +# 大王叫我来巡山 , 2024, 2025. # Peter Shen , 2024. # hello_wac , 2024. # Xianpeng Shen , 2024. @@ -32,9 +32,10 @@ msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-12-15 11:00+0000\n" -"Last-Translator: Xianpeng Shen \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-02-27 16:25+0000\n" +"Last-Translator: 大王叫我来巡山 " +"\n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" @@ -42,7 +43,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.9-rc\n" +"X-Generator: Weblate 5.10.2-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -81,10 +82,9 @@ msgid "" "`pull requests`__. If you're planning to write or edit the guide, please " "read the :ref:`style guide `." msgstr "" -"大部分关于 |PyPUG| 的工作都是在 `项目的GitHub存储库 `__ 进行的。要开始工作,请查看 `open issues`__ 和 `pull " -"requests`__ 的列表。如果你打算编写或编辑指南,请阅读 :ref:`style guide " -"`。" +"大部分关于 |PyPUG| 的工作发生于`项目的 GitHub 存储库`__ 。要开始,请查看 " +"`open issues`__ 和 `pull requests`__ 的列表。如果你打算编写或编辑指南,请阅" +"读 :ref:`style guide `。" #: ../source/contribute.rst:25 msgid "" @@ -200,8 +200,8 @@ msgid "" "guilabel:`Start new translation` at the bottom of the language list and add " "the language you want to translate." msgstr "" -"如果你的语言没有列在 `packaging.python.org`_ 上,请点击语言列表底部的按钮 :" -"guilabel:`Start new translation`并添加你要翻译的语言。" +"如果你的语言没有列在 `packaging.python.org`_ 上,请单击语言列表底部的 :" +"guilabel:`Start new translation` 按钮并添加你要翻译的语言。" #: ../source/contribute.rst:100 msgid "Following reStructuredText syntax" @@ -250,9 +250,7 @@ msgstr "" #: ../source/contribute.rst:130 msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" -msgstr "" -"`Nox `_ 。你可以用 ``pip`` 来安装或升" -"级nox:" +msgstr ":doc:`Nox `。你可以用 ``pip`` 安装或升级 nox:" #: ../source/contribute.rst:137 msgid "" @@ -330,8 +328,8 @@ msgid "" "The purpose of the |PyPUG| is to be the authoritative resource on how to " "package, publish, and install Python projects using current tools." msgstr "" -"|PyPUG| 的目的是成为关于如何使用当前工具打包、发布和安装 Python 项目的权威性" -"资源。" +"|PyPUG| 的目的是成为关于如何使用当前工具打包、发布和安装 Python 项目的权威资" +"源。" #: ../source/contribute.rst:187 msgid "Scope" @@ -577,6 +575,7 @@ msgid "Deploying Python applications" msgstr "部署 Python 应用程序" #: ../source/discussions/deploying-python-applications.rst:0 +#: ../source/discussions/downstream-packaging.rst:0 #: ../source/discussions/single-source-version.rst:0 #: ../source/guides/distributing-packages-using-setuptools.rst:0 #: ../source/guides/index-mirrors-and-caches.rst:0 @@ -597,6 +596,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 @@ -697,6 +697,7 @@ msgstr "" "2.0 下发布的。" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "macOS" @@ -924,6 +925,701 @@ msgstr "" "尽管从技术上讲,通过使用 :doc:`importlib ` 可以导入" "名称不是有效 Python 标识符的包/模块,但这种情况极为罕见且强烈不推荐。" +#: ../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 " @@ -1346,7 +2042,7 @@ msgstr "" #: ../source/discussions/package-formats.rst:144 msgid "Here's a breakdown of the important differences between wheel and egg." -msgstr "下面是关于 :term:`Wheel` 和 :term:`Egg` 之间的重要区别。" +msgstr "下面是 Wheel 和 Egg 之间重要区别的详细说明。" #: ../source/discussions/package-formats.rst:146 msgid "" @@ -1361,8 +2057,8 @@ msgid "" "Wheel has an :doc:`official standard specification `. Egg did not." msgstr "" -":term:`Wheel` 有一个 :doc:`官方标准规范 `,而 :term:`Egg` 没有。" +"Wheel 有一个 :doc:`官方标准规范 `,而 Egg 没有。" #: ../source/discussions/package-formats.rst:152 msgid "" @@ -1371,9 +2067,9 @@ msgid "" "and a runtime installation format (if left zipped), and was designed to be " "importable." msgstr "" -":term:`Wheel`是一种 :term:`分发 `格式,也就是一种打包格" -"式。 [1]_ :term:`Egg` 既是一种发行格式,也是一种运行时的安装格式(如果留下压" -"缩包),并被设计为可导入。" +"Wheel 是一种 :term:`distribution ` 格式,也就是一种打包" +"格式。 [#wheel-importable]_ Egg 既是一种分发格式,也是一种运行时的安装格式" +"(如果是压缩状态),并被设计为可导入。" #: ../source/discussions/package-formats.rst:156 msgid "" @@ -1383,9 +2079,9 @@ msgid "" "\"universal\", similar to an :term:`sdist `." msgstr "" -":term:`Wheel`格式不包括 ``.pyc`` 文件。因此,当发行版只包含 Python 文件(即没" -"有编译的扩展),并且与 Python 2 和 3 兼容时,wheel 有可能是 「通用」的,类似" -"于 :term:`sdist ` (源分发)。" +"Wheel 压缩文件不包括 ``.pyc`` 文件。因此,当发行版只包含 Python 文件时 (即没" +"有已编译的扩展), 且兼容 Python 2 and 3 时,可以让 wheel \"universal\",类似" +"于 :term:`sdist `." #: ../source/discussions/package-formats.rst:161 msgid "" @@ -1401,16 +2097,15 @@ msgid "" "single wheel archive can indicate its compatibility with a number of Python " "language versions and implementations, ABIs, and system architectures." msgstr "" -":term:`Wheel`有一个 :pep:`更丰富的文件命名约定 <425>`。一个单一的 wheel 档案" -"可以表明它与许多 Python 语言版本和工具、ABI 以及系统架构的兼容性。" +"Wheel 有一个 :ref:`更丰富的文件命名约定 `。一个单一的 " +"wheel 档案可以表明它与许多 Python 语言版本和实现、ABI 以及系统架构的兼容性。" #: ../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 "" -":term:`Wheel` 是有版本的。每个 wheel 文件都包含 wheel 规范的版本和包装它的工" -"具。" +"Wheel 是版本化的。每个 wheel 文件都包含 wheel 规范的版本和打包它的实现。" #: ../source/discussions/package-formats.rst:171 msgid "" @@ -1418,8 +2113,8 @@ msgid "" "org/2/library/sysconfig.html#installation-paths>`_, therefore making it " "easier to convert to other formats." msgstr "" -":term:`Wheel` 由 `sysconfig 路径类型 `_ 内部组织,因此更容易转换为其他格式。" +"Wheel 内部由 `sysconfig 路径类型 `_ 所组织,因此更容易转换为其他格式。" #: ../source/discussions/package-formats.rst:177 msgid "" @@ -1604,11 +2299,11 @@ msgstr "" #: ../source/discussions/setup-py-deprecated.rst:6 msgid "Is ``setup.py`` deprecated?" -msgstr "``setup.py``被弃用了吗?" +msgstr "``setup.py`` 被废弃了吗?" #: ../source/discussions/setup-py-deprecated.rst:8 msgid "No, :term:`setup.py` and :ref:`setuptools` are not deprecated." -msgstr "不,:term:`setup.py`和:ref:`setuptools`并没有被弃用。" +msgstr "不,:term:`setup.py` 和 :ref:`setuptools` 并没有被弃用。" #: ../source/discussions/setup-py-deprecated.rst:10 msgid "" @@ -1755,7 +2450,7 @@ msgstr "那其他命令呢?" #: ../source/discussions/setup-py-deprecated.rst:87 msgid "What are some replacements for the other ``python setup.py`` commands?" -msgstr "有哪些命令可以替代其他 ``python setup.py``的命令呢?" +msgstr "有哪些命令可以替代其他的 ``python setup.py`` 命令?" #: ../source/discussions/setup-py-deprecated.rst:91 msgid "``python setup.py test``" @@ -2161,8 +2856,8 @@ msgid "" "repository, such that the various configuration files and :term:`import " "packages ` are all in the top-level directory." msgstr "" -"“平面布局”是指将项目的文件组织在文件夹或存储库中,例如各种配置文件和 :term:" -"`import packages <导入包>` 都在顶级目录中。" +"“平坦布局”指将项目的文件组织在文件夹或存储库中,这样各种配置文件和 :term:`导" +"入包 ` 都在顶级目录中。" #: ../source/discussions/src-layout-vs-flat-layout.rst:25 msgid "" @@ -2171,15 +2866,15 @@ msgid "" "term:`import packages `) into a subdirectory. This " "subdirectory is typically named ``src/``, hence \"src layout\"." msgstr "" -"“src布局”通过将预期可导入的代码(即“import awesome_package ”,也称为:term:` " -"Import packages < Import Package > `)移动到子目录中,偏离了平面布局。这" -"个子目录通常被命名为“src/”,因此称为“src布局”。" +"“src 布局”和平坦布局不同,是将预期可导入的代码 (亦即 ``import " +"awesome_package`` 也称 :term:`导入包 `) 移动至子目录中。该子" +"目录通常名为 ``src/``,因为其被称为“src 布局”。" #: ../source/discussions/src-layout-vs-flat-layout.rst:45 msgid "" "Here's a breakdown of the important behaviour differences between the src " "layout and the flat layout:" -msgstr "以下详解 src 布局和平面布局之间重要行为差异:" +msgstr "以下详解 src 布局和平坦布局之间重要的行为差异:" #: ../source/discussions/src-layout-vs-flat-layout.rst:48 msgid "" @@ -2277,7 +2972,7 @@ msgstr "" "data:`sys.path` 中:" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 msgid "Versioning" msgstr "版本" @@ -2471,9 +3166,9 @@ msgid "" msgstr "" "大多数 Python 项目使用类似于语义版本控制的版本方案。然而,大多数项目,尤其是" "较大的项目,并不严格遵循语义版本控制,因为许多变化在技术上是破坏兼容性的,但" -"仅影响一小部分用户。这类项目通常在不兼容性较大时递增主版本号,或用来表示项目" -"的重大变化,而不是为了任何微小的不兼容性 [#semver-strictness] 。相反,主版本" -"号的递增有时也用来表示重要但向后兼容的新特性。" +"仅影响一小部分用户。这类项目倾向于在不兼容性较高时递增主版本号,或发出项目重" +"大变化的信号,而不是为了任何微小的不兼容性 [#semver-strictness]_ 。相反,主版" +"本号的跃升有时也用来暗示重要但向后兼容的新特性。" #: ../source/discussions/versioning.rst:103 msgid "" @@ -2536,8 +3231,8 @@ msgid "" "`_ (CalVer), is that it is straightforward to tell how old the base " "feature set of a particular release is given just the version number." msgstr "" -"基于日期的版本控制,或称为 `日历版本控制 `_(CalVer)的一个主要优势" -"是,通过版本号就可以直接判断特定发布的基础功能集已经有多旧。" +"基于日期的版本控制,或称为`calendar versioning `_ (CalVer) ,的一个" +"主要优势是,通过版本号就可以直接判断特定版本的基础功能集已经有多旧。" #: ../source/discussions/versioning.rst:134 msgid "" @@ -2635,8 +3330,8 @@ msgid "" "Many projects also choose to version their top level :term:`import packages " "` by providing a package level ``__version__`` attribute::" msgstr "" -"许多项目还选择通过提供包级别 ``__version__`` 属性来对其顶级 :term:`import " -"packages ` 进行版本控制::" +"许多项目还选择对其顶级 :term:`import packages ` 进行版本控" +"制,方法是提供包级别 ``__version__`` 属性::" #: ../source/discussions/versioning.rst:194 msgid "" @@ -2714,9 +3409,9 @@ msgid "" "Package Index (PyPI)`_. It is written for package publishers, who are " "assumed to be the package author." msgstr "" -"该文件旨在概述通常在 `Python 包索引 (PyPI)`_ 上发布/分发一个 :term:`分发包 " -"`所涉及的流程。它是为包发布者编写的,而他们被认为是包的" -"作者。" +"本文档旨在概述流程,用于发布/分发一个 :term:`distribution package " +"` 包到 `Python Package Index (PyPI)`_。它是为包发布者编" +"写的,这些人被假定为包的作者。" #: ../source/flow.rst:12 msgid "" @@ -2782,7 +3477,7 @@ msgstr "" msgid "" "These last 2 steps are typically performed by :ref:`pip` when an end user " "runs ``pip install``." -msgstr "这最后两个步骤通常由 :ref:`pip` 在终端用户运行 ``pip install``时执行。" +msgstr "最后两个步骤通常由 :ref:`pip` 在终端用户运行 ``pip install``时执行。" #: ../source/flow.rst:50 msgid "The steps above are described in more detail below." @@ -2880,7 +3575,7 @@ msgstr "" msgid "" "The :ref:`build` package knows how to invoke your build tool to create one " "of these:" -msgstr ":ref:`build`包知道如何调用你的构建工具来创建其中一个:" +msgstr ":ref:`build` 包知道如何调用你的构建工具来创建其中一个:" #: ../source/flow.rst:126 msgid "" @@ -2962,7 +3657,7 @@ msgstr "二进制发行版" msgid "" "A specific kind of :term:`Built Distribution` that contains compiled " "extensions." -msgstr "一种特定的术语:`Build Distribution',包含编译的扩展。" +msgstr "包含已编译扩展的特定种类的 :term:`Built Distribution`。" #: ../source/glossary.rst:14 msgid "Build Backend" @@ -3005,7 +3700,6 @@ msgid "Built Distribution" msgstr "编译发行版" #: ../source/glossary.rst:47 -#, fuzzy msgid "" "A :term:`Distribution ` format containing files and " "metadata that only need to be moved to the correct location on the target " @@ -3016,11 +3710,11 @@ msgid "" "does not include compiled Python files). See :ref:`package-formats` for more " "information." msgstr "" -"一个term:`Distribution < Distribution Package >` 格式包含只需要移动到目标系统" -"上正确位置的文件和元数据,即可安装。:term:` Wheel ` 是这样一种格式,而 " -"distutil 的 :term:` Source Distribution < Source Distribution (or " -"\"sdist\")>` 不是,因为它需要一个构建步骤才能安装。 这种格式并不意味着必须预" -"编译 Python 文件(:term:` Wheel ` 故意不包括编译的 Python 文件)。" +"一种 :term:`分发 ` 格式,包含只需移动到目标系统上正确位" +"置的文件和元数据,即可安装。:term:`Wheel` 是这样一种格式,而 :term:`源分发 " +"`不是,因为它需要一个构建步骤才能安装。 " +"这种格式并不意味着必须预编译 Python 文件(:term:`Wheel` 有意不包括编译好的 " +"Python 文件)。更多信息见 :ref:`package-formats`。" #: ../source/glossary.rst:56 msgid "Built Metadata" @@ -3058,9 +3752,8 @@ msgid "" msgstr "" #: ../source/glossary.rst:83 -#, fuzzy msgid "Distribution Archive" -msgstr "发行版" +msgstr "发行版存档" #: ../source/glossary.rst:86 msgid "" @@ -3079,12 +3772,11 @@ msgid "" "to distribute a :term:`Release`. The archive file is what an end-user will " "download from the internet and install." msgstr "" -"一个版本化的存档文件包含 Python :term:`packages `、:term:" -"`modules ` 和其他用于分发:term:`Release` 的资源文件的版本化存档文件。" -"存档文件是最终用户将从 Internet 下载并安装的文件。" +"版本化的压缩文件包含 Python :term:`packages `、:term:" +"`modules ` 和其他用于分发 :term:`Release` 的资源文件。这样的压缩文件" +"是最终用户将从 Internet 下载并安装的文件。" #: ../source/glossary.rst:97 -#, fuzzy msgid "" "A distribution package is more commonly referred to with the single words " "\"package\" or \"distribution\", but this guide may use the expanded term " @@ -3095,9 +3787,11 @@ msgid "" "\"distribution\". See :ref:`distribution-package-vs-import-package` for a " "breakdown of the differences." msgstr "" -"分发包更常被称为“包”或“分发”,但是当需要更清楚地防止与 :term:`Import " -"Package` 混淆时,本指南可能会使用扩展术语(通常也称为“包”)或另一种发行版(例" -"如 Linux 发行版或 Python 语言发行版),通常用单个术语“发行版”来指代。" +"分发包更常被简称为“包”或“分发”,但本指南可能会使用“分发包”而非简称,因为需要" +"防止和术语 :term:`Import Package`(通常也被叫做“包‘)或另一种分发类型(如 " +"Linux 发行版或 Python 语言发行版)混淆,这两者常用单个术语“distribution”表" +"示。有关含义差别的详细解释,见 :ref:`distribution-package-vs-import-" +"package`。" #: ../source/glossary.rst:105 msgid "Egg" @@ -3108,8 +3802,8 @@ msgid "" "A :term:`Built Distribution` format introduced by :ref:`setuptools`, which " "has been replaced by :term:`Wheel`. For details, see :ref:`egg-format`." msgstr "" -"一种 :term:`构建分发` 格式,由 :ref:`setuptools` 引入,已被 :term:`Wheel` 替" -"代。详见: :ref:`egg-format`." +"一种 :term:`Built Distribution` 格式,由 :ref:`setuptools` 引入,已被 :term:" +"`Wheel` 替代。详见: :ref:`egg-format`." #: ../source/glossary.rst:111 msgid "Extension Module" @@ -3139,7 +3833,6 @@ msgid "" msgstr "一个Python模块,可以包含其他模块或递归地包含其他包。" #: ../source/glossary.rst:127 -#, fuzzy 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 " @@ -3147,13 +3840,13 @@ msgid "" "also commonly called a \"package\". See :ref:`distribution-package-vs-import-" "package` for a breakdown of the differences." msgstr "" -"导入包通常用单个词“包”来指代,但本指南将在需要更清楚地说明时使用扩展术语,以" -"防止与通常也称为“包”的 :term:`分发包` 混淆." +"导入包通常用单个词“包”来指代,但本指南在需要更清楚地说时会使用扩展术语“导入" +"包”,以防止与通常也称为“包”的术语 :term:`Distribution Package` 混淆。这两者间" +"的差异详见 :ref:`distribution-package-vs-import-package`。" #: ../source/glossary.rst:133 -#, fuzzy msgid "Installed Project" -msgstr "安装程序" +msgstr "已安装的项目" #: ../source/glossary.rst:136 msgid "" @@ -3166,23 +3859,65 @@ msgstr "" msgid "Known Good Set (KGS)" msgstr "已知良好集 (KGS)" -#: ../source/glossary.rst:143 +#: ../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 +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 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." +"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:149 +#: ../source/glossary.rst:183 msgid "Module" msgstr "模块" -#: ../source/glossary.rst:152 +#: ../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`." @@ -3190,11 +3925,11 @@ msgstr "" "Python 中代码可重用性的基本单元,存在于以下两种类型之一::term:`Pure Module` " "或 :term:`Extension Module`。" -#: ../source/glossary.rst:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "包索引" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." @@ -3202,34 +3937,34 @@ msgstr "" "一个带有 Web 界面的发行版存储库,用于自动化 :term:`package ` 发现和消费。" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "每个项目索引(Per Project Index)" -#: ../source/glossary.rst:164 +#: ../source/glossary.rst:198 msgid "" "A private or other non-canonical :term:`Package Index` indicated by a " "specific :term:`Project` as the index preferred or required to resolve " "dependencies of that project." msgstr "" -"专用或其他非规范的:term:`Package Index`由特定的:term:`Project`表示,作为首" -"选索引或解决该项目依赖关系所需的索引。" +"由特定的 :term:`Project` 标明的私有或其他非规范的 :term:`Package Index` ,作" +"为解决该项目依赖关系的首选或必需的索引。" -#: ../source/glossary.rst:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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 "" -"数据或其他资源的库、框架、脚本、插件、应用程序或集合,或其组合,旨在打包成:" -"term:`Distribution `。" +"计划打包进 :term:`Distribution ` 的库、框架、脚本、插" +"件、应用程序、或数据或其他资源的集合、或其中某些东西的组合。" -#: ../source/glossary.rst:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -3238,11 +3973,11 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" "由于多数项目使用 :pep:`518` ``build-system``、:ref:`distutils` 或 :ref:" -"`setuptools`创建 :term:`Distributions `,目前定义项目的" -"另一个实际方式是在项目源目录下包含 :term:`pyproject.toml`、 :term:`setup.py`" -"或 :term:`setup.cfg` 文件的东西。" +"`setuptools` 创建 :term:`Distributions `,目前定义项目" +"的另一个实际办法是在项目源码目录下包含 :term:`pyproject.toml`、 :term:`setup." +"py` 或 :term:`setup.cfg` 文件的东西。" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -3254,7 +3989,7 @@ msgstr "" "` ,每个版本可能包括一个或多个 :term:`套件 ` 。" -#: ../source/glossary.rst:186 +#: ../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 " @@ -3265,35 +4000,32 @@ msgstr "" "这并不一定是真的。可以从项目“foo”安装一个发行版,并让它提供一个只能作" "为“bar”导入的包。" -#: ../source/glossary.rst:192 -#, fuzzy +#: ../source/glossary.rst:226 msgid "Project Root Directory" -msgstr "子目录中的项目" +msgstr "项目的根目录" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 -#, fuzzy +#: ../source/glossary.rst:232 msgid "Project Source Tree" -msgstr "项目摘要" +msgstr "项目源码树" -#: ../source/glossary.rst:201 +#: ../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:207 -#, fuzzy +#: ../source/glossary.rst:241 msgid "Project Source Metadata" -msgstr "项目摘要" +msgstr "项目源元数据" -#: ../source/glossary.rst:210 +#: ../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 " @@ -3303,11 +4035,11 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "纯模块 (Pure Module)" -#: ../source/glossary.rst:223 +#: ../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)." @@ -3315,12 +4047,11 @@ msgstr "" "一个 :term:`Module`,使用 Python 编写并包含在单个 ``.py`` 文件 中(可能还有相" "关的 ``.pyc`` 和/或者 ``.pyo`` 文件)。" -#: ../source/glossary.rst:226 -#, fuzzy +#: ../source/glossary.rst:260 msgid "Pyproject Metadata" -msgstr "项目名称" +msgstr "Pyproject 元数据" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -3329,32 +4060,31 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 -#, fuzzy +#: ../source/glossary.rst:271 msgid "Pyproject Metadata Key" -msgstr "pyproject.toml" +msgstr "Pyproject 元数据密钥" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "Python 包装管理局 (PyPA)" -#: ../source/glossary.rst:253 +#: ../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 " @@ -3363,18 +4093,18 @@ msgid "" "`_ and " "`the Python Discourse forum `__." msgstr "" -"PyPA 是一个工作小组,负责维护 Python 包装中的许多相关项目。他们在 :doc:`pypa." -"io `上维护站点,在`GitHub `_ 和" -"`Bitbucket `_ 上托管项目,并在 `distutils-sig 邮" -"件列表 `_ " -"和 `Python Discourse 论坛 `__ 上讨论" -"问题。" +"PyPA 是一个工作组,维护 Python 打包的许多重要项目。他们维护 :doc:`pypa.io " +"` 站点,在`GitHub `_ 和`Bitbucket " +"`_ 上托管项目,并在 `distutils-sig 邮件列表 " +"`_ 和 " +"`Python Discourse 论坛 `__ 上讨论问" +"题。" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "Python 包索引 (PyPI)" -#: ../source/glossary.rst:265 +#: ../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 " @@ -3383,11 +4113,11 @@ msgstr "" "`PyPI `_ 是 Python 社区的默认 :term:`包索引 (Package " "Index) ` 。所有 Python 开发人员都可以使用和分发他们的发行版。" -#: ../source/glossary.rst:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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." @@ -3397,26 +4127,26 @@ msgstr "" "名。它在2017年取代了旧的索引域名, ``pypi.python.org`` ,并由 :ref:" "`warehouse` 提供支持。" -#: ../source/glossary.rst:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "发行版 (Release)" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -3424,11 +4154,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "要求 (Requirement)" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -3437,11 +4167,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "需求说明符" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -3449,11 +4179,11 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "需求文件" -#: ../source/glossary.rst:311 +#: ../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 " @@ -3463,17 +4193,37 @@ msgstr "" "使用 :ref:`pip` 来安装。更多信息,请参阅 :ref:`pip` 文档的 :ref:`pip:" "Requirements Files` 。" -#: ../source/glossary.rst:315 +#: ../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 "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." @@ -3481,22 +4231,22 @@ msgstr "" ":ref:`distutils` 和 :ref:`setuptools` 的项目规范文件。另见 :term:`pyproject." "toml`。" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "源代码归档" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "源代码分发(或“sdist”)" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3505,21 +4255,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "系统包 (System Package)" -#: ../source/glossary.rst:341 +#: ../source/glossary.rst:392 msgid "" "A package provided in a format native to the operating system, e.g. an rpm " "or dpkg file." msgstr "以操作系统本地格式提供的软件包,例如 rpm 或 dpkg 文件。" -#: ../source/glossary.rst:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "版本说明符 (Version Specifier)" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3528,11 +4278,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "虚拟环境 (Virtual Environment)" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3542,15 +4292,15 @@ msgstr "" "一个隔离的 Python 环境,允许安装软件包以供特定的应用程序使用,而不是在系统中" "安装。更多信息,请参见章节 :ref:`Creating and using Virtual Environments`." -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "Wheel" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3558,22 +4308,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 -#, fuzzy +#: ../source/glossary.rst:422 msgid "Wheel Project" -msgstr "项目" +msgstr "Wheel 项目" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "工作集 (Working Set)" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3652,14 +4401,13 @@ msgstr "" "有被下载很多,也不意味着它不好!" #: ../source/guides/analyzing-pypi-package-downloads.rst:37 -#, fuzzy 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" @@ -3672,8 +4420,8 @@ msgid "" "[#]_, where they are stored as a public dataset." msgstr "" "作为替代方案,`Linehaul 项目`__ 将下载日志从 PyPI 流向 `Google BigQuery`_ [#]_ ,在那里它们被存储为一个" -"公共数据集。" +">`__ 将下载日志从 PyPI 整合到 `Google BigQuery`_ [#]_ ,在那里它们被存储为一" +"个公共数据集。" #: ../source/guides/analyzing-pypi-package-downloads.rst:49 msgid "Getting set up" @@ -3688,11 +4436,12 @@ msgid "" "`__" msgstr "" -"要使用 `Google BigQuery`_ 查询 `公共 PyPI 下载统计数据集 `_ ,你需要一个 Google 账户,并在 Google Cloud " -"Platform 上启用 BigQuery API 。无需信用卡,你可以 `使用 BigQuery 免费套餐,每" -"月运行高达 1TB 的查询`__" +"Platform 项目上启用 BigQuery API 。无需信用卡,你可以 `使用无需信用卡的 " +"BigQuery 免费套餐 `__ 每月运行高达 " +"1TB 的查询" #: ../source/guides/analyzing-pypi-package-downloads.rst:57 msgid "Navigate to the `BigQuery web UI`_." @@ -3745,7 +4494,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "例子" @@ -3821,14 +4570,13 @@ msgid "" msgstr "在 `BigQuery网页用户界面`_ 中通过点击 \"Compose query \"按钮运行查询。" #: ../source/guides/analyzing-pypi-package-downloads.rst:96 -#, fuzzy 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 "" -"请注意,行存储在分区中,这有助于限制查询的成本。这些示例查询通过过滤" -"``timestamp``列来分析最近历史记录中的下载。" +"请注意,行存储在分区表中,这有助于限制查询的成本。这些示例查询通过过滤 " +"``timestamp`` 列来分析最近历史记录中的下载。" #: ../source/guides/analyzing-pypi-package-downloads.rst:101 msgid "Counting package downloads" @@ -4115,7 +4863,7 @@ msgid "" msgstr "`pandas-gbq`_ 项目允许通过 `Pandas`_ 来访问查询结果。" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "参考" @@ -4397,9 +5145,8 @@ msgid "" msgstr "" #: ../source/guides/creating-command-line-tools.rst:117 -#, fuzzy msgid "``pyproject.toml``" -msgstr "pyproject.toml" +msgstr "``pyproject.toml``" #: ../source/guides/creating-command-line-tools.rst:119 msgid "" @@ -4425,9 +5172,8 @@ msgid "" msgstr "" #: ../source/guides/creating-command-line-tools.rst:134 -#, fuzzy msgid "Installing the package with ``pipx``" -msgstr "用 pip 安装软件包" +msgstr "用 ``pipx`` 安装包" #: ../source/guides/creating-command-line-tools.rst:136 msgid "" @@ -4476,9 +5222,8 @@ msgid "" msgstr "" #: ../source/guides/creating-command-line-tools.rst:185 -#, fuzzy msgid "Conclusion" -msgstr "版本说明符 (Version Specifier)" +msgstr "完成" #: ../source/guides/creating-command-line-tools.rst:187 msgid "" @@ -4596,10 +5341,10 @@ msgid "" "pypa/sampleproject/blob/db5806e0a3204034c51b1c00dde7d5eb3fa2532e/setup." "cfg>`_ in the `PyPA sample project `_." msgstr "" -":file:`setup.cfg`是一个 ini 文件,包含 :file:`setup.py`命令的默认选项。 例" -"如,参阅 `PyPA 样本项目 `_ 中的 " -"`setup.cfg `_ 。" +":file:`setup.cfg` 是一个 ini 文件,包含 :file:`setup.py` 命令的默认。 例如," +"参阅 `PyPA 样本项目 `_ 中的 `setup." +"cfg `_ ." #: ../source/guides/distributing-packages-using-setuptools.rst:89 msgid "README.rst / README.md" @@ -4660,14 +5405,14 @@ msgid "" "its manifest file, since all the necessary files have been included by :ref:" "`setuptools` 43.0.0 and newer." msgstr "" -"然而,你可能不需要使用 :file:`MANIFEST.in`。举个例子,`PyPA 示例项目`_ 已经删除了它的清单文件,因为所有必要的文件已" -"经被 :ref:`setuptools` 43.0.0 和更新的版本所包含。" +"然而,你可能不是必须要使用 :file:`MANIFEST.in`。举个例子,`PyPA 示例项目" +"`_ 已经删除了它的清单文件,因为所有必" +"要的文件已经被 :ref:`setuptools` 43.0.0 和更新的版本所包含。" #: ../source/guides/distributing-packages-using-setuptools.rst:123 msgid "" ":file:`MANIFEST.in` does not affect binary distributions such as wheels." -msgstr ":file:`MANIFEST.in`不影响诸如 wheels 这样的二进制发行。" +msgstr ":file:`MANIFEST.in` 不影响诸如 wheels 这样的二进制分发。" #: ../source/guides/distributing-packages-using-setuptools.rst:126 msgid "LICENSE.txt" @@ -4866,7 +5611,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5170,8 +5915,8 @@ msgid "" "To avoid having to copy and paste the token every time you upload, you can " "create a :file:`$HOME/.pypirc` file:" msgstr "" -"为了避免每次上传时都要复制和粘贴令牌,你可以创建一个 :file:`$HOME/.pypirc`文" -"件:" +"为了避免每次上传时都要复制和粘贴令牌,你可以创建一个 :file:`$HOME/.pypirc` 文" +"件:" #: ../source/guides/distributing-packages-using-setuptools.rst:558 msgid "**Be aware that this stores your token in plaintext.**" @@ -5194,7 +5939,7 @@ msgid "" "Once you have an account you can upload your distributions to :term:`PyPI " "` using :ref:`twine`." msgstr "" -"一旦你有了账户,你就可以使用 :ref:`twine`将你的发行版上传到 :term:`PyPI " +"一旦有了账户,你就可以使用 :ref:`twine` 将你的发行版上传到 :term:`PyPI " "`。" #: ../source/guides/distributing-packages-using-setuptools.rst:571 @@ -5231,8 +5976,8 @@ msgid "" "ref:`pip` is currently considering changing this by `making user installs " "the default behavior `_." msgstr "" -"根据你的平台,这可能需要 root 或管理员权限。 :ref:`pip`目前正在考虑通过`使用" -"户安装(user installs)成为默认行为`_ 来改变这一点。" #: ../source/guides/dropping-older-python-versions.rst:5 @@ -5302,9 +6047,8 @@ msgid "Defining the Python version required" msgstr "定义所需的 Python 版本" #: ../source/guides/dropping-older-python-versions.rst:48 -#, fuzzy msgid "1. Install twine" -msgstr "安装" +msgstr "1. 安装 twine" #: ../source/guides/dropping-older-python-versions.rst:50 msgid "Ensure that you have twine available at its latest version. Steps:" @@ -5387,10 +6131,9 @@ msgstr "" #: ../source/guides/dropping-older-python-versions.rst:117 msgid "Proceed as suggested in :ref:`Uploading your Project to PyPI`." -msgstr "按 :ref:`上传项目到 PyPI` 中的建议继续。" +msgstr "按 :ref:`Uploading your Project to PyPI` 中的建议继续。" #: ../source/guides/dropping-older-python-versions.rst:120 -#, fuzzy msgid "Dropping a Python version" msgstr "放弃一个 Python 版本" @@ -5603,11 +6346,12 @@ msgid "" msgstr "" #: ../source/guides/hosting-your-own-index.rst:131 -#, fuzzy msgid "" "For complete documentation of the simple repository protocol, see :ref:" "`simple repository API `." -msgstr "关于简单版本库协议的完整文档,见 :pep:`503`。" +msgstr "" +"简单存储库协议的完整文档,请查看 :ref:`simple repository API `。" #: ../source/guides/hosting-your-own-index.rst:134 msgid "" @@ -5720,9 +6464,8 @@ msgstr ":ref:`proxpi`" #: ../source/guides/index-mirrors-and-caches.rst:93 #: ../source/guides/index-mirrors-and-caches.rst:99 -#, fuzzy msgid "multiple proxied indexes" -msgstr "每个项目索引" +msgstr "多个代理的索引" #: ../source/guides/index-mirrors-and-caches.rst:95 msgid ":ref:`nginx_pypi_cache`" @@ -5934,24 +6677,15 @@ msgid "" msgstr "" #: ../source/guides/installing-scientific-packages.rst:133 -#, fuzzy -#| msgid "" -#| "`Anaconda `_ is a Python " -#| "distribution published by Anaconda, Inc. It is a stable collection of " -#| "Open Source packages for big data and scientific use. As of the 5.0 " -#| "release of Anaconda, about 200 packages are installed by default, and a " -#| "total of 400-500 can be installed and updated from the Anaconda " -#| "repository." msgid "" "Anaconda `Anaconda `_ is a Python " "distribution published by Anaconda, Inc. It is a stable collection of Open " "Source packages for big data and scientific use, and a collection of " "Graphical Interface utilities for managing conda environments." msgstr "" -"`Anaconda `_ 是由 Anaconda 公" -"司发布的 Python 发行版。它是一个稳定的开源软件包集合,用于大数据和科学用途。 " -"在 Anaconda 的5.0版本中,默认安装了大约200个包,总共有400-500个包可以从 " -"Anaconda 仓库中安装和更新。" +"Anaconda `Anaconda `_ 是 Anaconda 发布" +"的 Python 发行版。它是用于大数据和科学使用的开源包的稳定集合,以及管理 conda " +"环境图形界面工具的集合。" #: ../source/guides/installing-scientific-packages.rst:135 msgid "" @@ -5979,9 +6713,9 @@ msgid "" "are `mypy `_, `flake8 `_, `black `_, and :ref:`pipenv`." msgstr "" -"许多软件包提供命令行程序。这类软件包的例子有`mypy `_ 、`flake8 `_ 、`black `_ 和 :ref:`pipenv`。" +"许多软件包提供命令行程序。这样的软件包的例子有`mypy `_, `flake8 `_, `black `_, 和 :ref:`pipenv`。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:12 msgid "" @@ -5999,9 +6733,9 @@ msgid "" "uninstalled without causing conflicts with other packages, and allows you to " "safely run the applications from anywhere." msgstr "" -":ref:`pipx`通过为每个软件包创建一个虚拟环境来解决这个问题,同时也确保其应用程" -"序可以通过你的 ``$PATH``上的目录访问。这允许每个软件包在升级或卸载时不会与其" -"他软件包产生冲突,并允许你在任何地方安全地运行程序。" +":ref:`pipx` 解决这个问题的办法是为每个软件包创建一个虚拟环境,同时也确保其应" +"用程序可以通过你 ``$PATH``上的目录访问。这允许每个软件包在升级或卸载时不会与" +"其他软件包产生冲突,并允许你在任何地方安全地运行程序。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:23 msgid "pipx only works with Python 3.6+." @@ -6016,7 +6750,7 @@ msgid "" "``ensurepath`` ensures that the application directory is on your ``$PATH``. " "You may need to restart your terminal for this update to take effect." msgstr "" -"``ensurepath``确保程序目录在你的 ``$PATH``上。你可能需要重新启动你的终端以使" +"``ensurepath`` 确保程序目录在你的 ``$PATH``上。你可能需要重新启动你的终端以使" "这个更新生效。" #: ../source/guides/installing-stand-alone-command-line-tools.rst:46 @@ -6293,14 +7027,13 @@ msgid "" msgstr "" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:48 -#, fuzzy 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 "" -"要创建虚拟环境,转到项目目录并运行 ``venv``。这会在本地环境中创建新的虚拟环境" -"``.venv``:" +"要创建虚拟环境,转到项目目录并运行下列命令。这会在名为 ``.venv`` 的本地文件夹" +"中创建一个新的虚拟环境:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:64 msgid "" @@ -6328,15 +7061,14 @@ msgid "Activate a virtual environment" msgstr "激活一个虚拟环境" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:76 -#, fuzzy 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 "" -"在你开始安装或使用虚拟环境中的软件包之前,你需要 *激活* 它。激活虚拟环境将把" -"虚拟环境专用的 ``python`` 和 ``pip`` 可执行文件放入你的 shell 的 ``PATH`` 。" +"在你能开始在虚拟环境中安装或使用包之前,你需要 ``激活`` 它。激活虚拟环境将把" +"虚拟环境专用的 ``python`` 和 ``pip`` 可执行文件放入 shell 的 ``PATH`` 中 。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:93 msgid "" @@ -6427,20 +7159,18 @@ msgid "" "When your virtual environment is activated, you can install packages. Use " "the ``pip install`` command to install packages." msgstr "" -"激活虚拟环境后,你可以安装软件包。使用 ``pip install``命令来安装软件包。" +"虚拟环境被激活后,你可以安装软件包。使用 ``pip install`` 命令来安装软件包。" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:201 msgid "Install a package" msgstr "安装一个软件包" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:203 -#, fuzzy msgid "" "For example,let's install the `Requests`_ library from the :term:`Python " "Package Index (PyPI)`:" msgstr "" -"现在你在你的虚拟环境中,你可以安装软件包。让我们从 :term:`Python Package " -"Index (PyPI)` 中安装 `Requests`_ 库:" +"比如,让我们从 :term:`Python Package Index (PyPI)` 安装 `Requests`_ 库:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:218 msgid "" @@ -6457,8 +7187,8 @@ msgid "" "`version specifiers `. For example, to install a specific " "version of ``requests``:" msgstr "" -"pip 允许你使用 :term:`版本指定器 `来指定安装哪个版本的软件" -"包。例如,要安装一个特定版本的 ``requests``:" +"pip 允许你使用 :term:`version specifiers ` 指定安装哪个版" +"本的软件包。例如,要安装一个特定版本的 ``requests``:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:257 msgid "To install the latest ``2.x`` release of requests:" @@ -6498,9 +7228,9 @@ msgid "" "directory will immediately affect the installed package without needing to " "re-install:" msgstr "" -"此外,pip 可以在 :doc:`开发模式 `下从" -"源码安装软件包,这意味着源码目录的变化将立即影响已安装的软件包,而不需要重新" -"安装:" +"此外,pip 可以在 :doc:`development mode ` 下从源码安装软件包,这意味着源码目录的变化将立即影响已安装" +"的软件包,而不需要重新安装:" #: ../source/guides/installing-using-pip-and-virtual-environments.rst:347 msgid "Install from version control systems" @@ -6526,118 +7256,443 @@ msgstr "" msgid "Install from local archives" msgstr "从本地档案安装" -#: ../source/guides/installing-using-pip-and-virtual-environments.rst:363 +#: ../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 "" +"如果你想从非 :term:`Python Package Index (PyPI)` 索引下载软件包,你可以使用 " +"``--index-url`` 标志:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:417 +msgid "" +"If you want to allow packages from both the :term:`Python Package Index " +"(PyPI)` and a separate index, you can use the ``--extra-index-url`` flag " +"instead:" +msgstr "" + +#: ../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 "使用一个 requirements 文件" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:454 +msgid "" +"Instead of installing packages individually, pip allows you to declare all " +"dependencies in a :ref:`Requirements File `. For " +"example you could create a :file:`requirements.txt` file containing:" +msgstr "" + +#: ../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 "Pip 可以使用 ``freeze`` 命令来导出所有已安装软件包及其版本的列表:" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:495 +msgid "Which will output a list of package specifiers such as:" +msgstr "" + +#: ../source/guides/installing-using-pip-and-virtual-environments.rst:511 +msgid "" +"The ``pip freeze`` command is useful for creating :ref:`pip:Requirements " +"Files` that can re-create the exact versions of all packages installed in an " +"environment." +msgstr "" + +#: ../source/guides/installing-using-virtualenv.rst:2 +msgid "Installing packages using virtualenv" +msgstr "用 virtualenv 安装软件包" + +#: ../source/guides/installing-using-virtualenv.rst:4 +msgid "" +"This guide discusses how to install packages using :ref:`pip` and :ref:" +"`virtualenv`, a tool to create isolated Python environments." +msgstr "" + +#: ../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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +msgid "Licensing Examples" +msgstr "许可示例" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "基础示例" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "高级示例" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "表达式示例" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 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:" +"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/installing-using-pip-and-virtual-environments.rst:378 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 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:" +"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/installing-using-pip-and-virtual-environments.rst:394 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:255 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." +"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/installing-using-pip-and-virtual-environments.rst:400 -msgid "Install from other package indexes" -msgstr "从其他软件包索引中安装" +#: ../source/guides/licensing-examples-and-user-scenarios.rst:263 +msgid "I want to distribute my project under a specific license" +msgstr "" -#: ../source/guides/installing-using-pip-and-virtual-environments.rst:402 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 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:" +"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 "" -"如果你想从不同的索引下载软件包,而不是 :term:`Python 软件包索引(PyPI)` ,你" -"可以使用 ``--index-url`` 标志:" -#: ../source/guides/installing-using-pip-and-virtual-environments.rst:417 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:274 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:" +"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/installing-using-pip-and-virtual-environments.rst:434 -#: ../source/tutorials/installing-packages.rst:393 -msgid "Upgrading packages" -msgstr "升级软件包" +#: ../source/guides/licensing-examples-and-user-scenarios.rst:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" -#: ../source/guides/installing-using-pip-and-virtual-environments.rst:436 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 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:" +"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/installing-using-pip-and-virtual-environments.rst:452 -msgid "Using a requirements file" -msgstr "使用一个 requirements 文件" +#: ../source/guides/licensing-examples-and-user-scenarios.rst:285 +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/installing-using-pip-and-virtual-environments.rst:454 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:294 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:" +"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/installing-using-pip-and-virtual-environments.rst:463 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:298 msgid "" -"And tell pip to install all of the packages in this file using the ``-r`` " -"flag:" +"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/installing-using-pip-and-virtual-environments.rst:478 -msgid "Freezing dependencies" +#: ../source/guides/licensing-examples-and-user-scenarios.rst:308 +msgid "My package includes other code under different licenses" msgstr "" -#: ../source/guides/installing-using-pip-and-virtual-environments.rst:480 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 msgid "" -"Pip can export a list of all installed packages and their versions using the " -"``freeze`` command:" -msgstr "Pip 可以使用 ``freeze`` 命令来导出所有已安装软件包及其版本的列表:" - -#: ../source/guides/installing-using-pip-and-virtual-environments.rst:495 -msgid "Which will output a list of package specifiers such as:" +"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/installing-using-pip-and-virtual-environments.rst:511 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:316 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." +"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/installing-using-virtualenv.rst:2 -msgid "Installing packages using virtualenv" -msgstr "用 virtualenv 安装软件包" +#: ../source/guides/licensing-examples-and-user-scenarios.rst:324 +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/installing-using-virtualenv.rst:4 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:330 msgid "" -"This guide discusses how to install packages using :ref:`pip` and :ref:" -"`virtualenv`, a tool to create isolated Python environments." +"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/installing-using-virtualenv.rst:8 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:336 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." +"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/installing-using-virtualenv.rst:13 +#: ../source/guides/licensing-examples-and-user-scenarios.rst:347 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." +"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 @@ -6688,7 +7743,7 @@ msgid "" "Markdown (`GitHub Flavored Markdown `_ by " "default, or `CommonMark `_)" msgstr "" -"Markdown(默认情况下 `GitHub 风格的 Markdown `_ ,或`CommonMark `_ )" #: ../source/guides/making-a-pypi-friendly-readme.rst:21 @@ -7583,9 +8638,8 @@ msgid "" msgstr "" #: ../source/guides/packaging-binary-extensions.rst:236 -#, fuzzy msgid "Extension module lifecycle" -msgstr "扩展模块" +msgstr "扩展模块生命周期" #: ../source/guides/packaging-binary-extensions.rst:238 #: ../source/guides/packaging-binary-extensions.rst:244 @@ -9088,9 +10142,8 @@ msgid ":ref:`maturin` -- Rust, via Cargo." msgstr "" #: ../source/guides/tool-recommendations.rst:123 -#, fuzzy msgid "Building distributions" -msgstr "编译发行版" +msgstr "构建发行版" #: ../source/guides/tool-recommendations.rst:125 msgid "" @@ -9265,8 +10318,8 @@ msgid "" "You can tell :ref:`pip` to download packages from TestPyPI instead of PyPI " "by specifying the ``--index-url`` flag:" msgstr "" -"你可以告诉 :ref:`pip`从 TestPyPI,而非 PyPI 下载软件包,方法是指定 ``--index-" -"url``标记:" +"你可以告诉 :ref:`pip` 从 TestPyPI,而非 PyPI 下载软件包,方法是指定 ``--" +"index-url`` 标记:" #: ../source/guides/using-testpypi.rst:56 msgid "" @@ -9332,13 +10385,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -9346,11 +10400,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -9360,29 +10414,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -9390,40 +10444,39 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "``name``" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 -#, fuzzy +#: ../source/guides/writing-pyproject-toml.rst:134 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 字母、数字、下划线 \"``_``\"、连字符 \"``-``\" 和英文句" -"号 \"``.``\"组。名字开头结尾不能是下划线、连字符或句号。" +"项目名称必须由 ASCII 字母、数字、下划线 \"``_``\"、连字符 \"``-``\" 和句号 " +"\"``.``\" 组成。名字开头结尾不能是下划线、连字符或句号。" -#: ../source/guides/writing-pyproject-toml.rst:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -9436,99 +10489,98 @@ msgstr "" "方式下载它或声明对它的依赖:``Cool-Stuff``, ``cool.stuff``, ``COOL_STUFF``, " "``CoOl__-.-__sTuFF``." -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 msgid "Put the version of your project." msgstr "输入项目版本。" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 -#, fuzzy +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" -msgstr "install_requires 与 requirements files" +msgstr "依赖项和要求" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -9536,94 +10588,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "关于您的项目" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "``description``" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." -msgstr "``README.rst`` → `reStructuredText `_ (没有 Sphinx扩展)。" +msgstr "``README.rst`` → `reStructuredText `_ (没有 Sphinx扩展)." -#: ../source/guides/writing-pyproject-toml.rst:314 -#, fuzzy +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" -msgstr "你可以看到生成文件的内容是这样的:" +msgstr "你也可以像这样明确指定格式:" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "``license``" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -9632,32 +10725,94 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "``license-files``" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "``keywords``" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "``classifiers``" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -"应用到项目的 PyPI 分类器列表。查看 `可能性的完整列表 `_." +"应用到你的项目的 PyPI 分类器列表。查看 `full list of possibilities " +"`_ 。" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -9666,26 +10821,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9693,28 +10848,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9722,26 +10877,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "完整示例" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -9779,9 +10934,8 @@ msgstr "" "我们很乐意接受任何 :doc:`贡献和反馈 `。 😊" #: ../source/index.rst:36 -#, fuzzy msgid "Overview and Flow" -msgstr "总览" +msgstr "概览和流程" #: ../source/index.rst:40 msgid "" @@ -9815,7 +10969,8 @@ msgstr "" #: ../source/index.rst:62 msgid "" "A :doc:`tutorial on installing packages `" -msgstr "一个 :doc:` 安装软件包的教程 `" +msgstr "" +":doc:`tutorial on installing packages ` 文档" #: ../source/index.rst:63 msgid "" @@ -9824,12 +10979,11 @@ msgid "" msgstr "" #: ../source/index.rst:65 -#, fuzzy msgid "" "A :doc:`tutorial on packaging and distributing ` your project" msgstr "" -"要学习如何打包和发布你的项目,请参阅 :doc:`关于打包和发布的教程 `" #: ../source/index.rst:71 @@ -9865,7 +11019,6 @@ msgid ":doc:`discussions/pip-vs-easy-install`" msgstr "" #: ../source/index.rst:89 -#, fuzzy msgid "Reference" msgstr "参考" @@ -9876,13 +11029,12 @@ msgid "" msgstr "" #: ../source/index.rst:92 -#, fuzzy msgid "" "The list of :doc:`other projects ` maintained by members of " "the Python Packaging Authority." msgstr "" -"此外,还有一个 :doc:`其他项目 ` 的列表,由 Python Packaging " -"Authority 的成员维护。" +"清单,由 Python 打包管理机构成员维护的 :doc:`other projects ` " +"组成。" #: ../source/index.rst:93 msgid "The :doc:`glossary` for definitions of terms used in Python packaging." @@ -9907,15 +11059,14 @@ msgid "bandersnatch" msgstr "" #: ../source/key_projects.rst:21 -#, fuzzy msgid "" "`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" msgstr "" -"`问题 `__ | `GitHub `__ | `PyPI `__" +"`Docs `__ | `Issues `__ | `GitHub `__ | `PyPI `__" #: ../source/key_projects.rst:26 msgid "" @@ -9931,15 +11082,14 @@ msgid "build" msgstr "建造" #: ../source/key_projects.rst:39 -#, fuzzy msgid "" ":any:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" msgstr "" -"`文档 ` | `Issues `__ | " -"`GitHub `__ | `PyPI `__" +":any:`Docs ` | `Issues `__ | `GitHub `__ | `PyPI `__" #: ../source/key_projects.rst:44 msgid "" @@ -10045,7 +11195,7 @@ msgid "" "`Docs `__ | `Issues `__ | `PyPI `__" msgstr "" -"`文档`__ | `Issues `__ | `Issues `__ | `PyPI `__" #: ../source/key_projects.rst:122 @@ -10217,13 +11367,12 @@ msgid "pipx" msgstr "pipx" #: ../source/key_projects.rst:238 -#, fuzzy msgid "" "`Docs `__ | `GitHub `__ " "| `PyPI `__" msgstr "" -"`文档< `__ | `GitHub `__ | `PyPI `__" +"`文档 `__ | `GitHub `__ " +"| `PyPI `__" #: ../source/key_projects.rst:242 msgid "" @@ -10234,14 +11383,12 @@ msgstr "" "件包产生依赖性冲突。" #: ../source/key_projects.rst:249 -#, fuzzy msgid "" ":doc:`Docs ` | `Issues `__ | `GitHub `__" msgstr "" -":doc:`文档 ` | `Issues `__ | `GitHub `__" +":doc:`Docs ` | `Issues `__ | `GitHub `__" #: ../source/key_projects.rst:253 msgid "This guide!" @@ -10353,15 +11500,14 @@ msgid "virtualenv" msgstr "virtualenv" #: ../source/key_projects.rst:333 -#, fuzzy msgid "" "`Docs `__ | `Issues " "`__ | `GitHub `__ | `PyPI `__" msgstr "" -":文档:`Docs ` | `问题 `__ | `GitHub `__ | `PyPI " -"`__" +"`文档 `__ | `Issues " +"`__ | `GitHub `__ | `PyPI `__" #: ../source/key_projects.rst:338 msgid "" @@ -10527,13 +11673,12 @@ msgid "dumb-pypi" msgstr "" #: ../source/key_projects.rst:454 -#, fuzzy msgid "" "`GitHub `__ | `PyPI `__" msgstr "" -"`GitHub 和文档 `__ | `PyPI " -"`__" +"`GitHub `__ | `PyPI `__" #: ../source/key_projects.rst:457 msgid "" @@ -10572,13 +11717,12 @@ msgid "Flask-Pypi-Proxy" msgstr "" #: ../source/key_projects.rst:487 -#, fuzzy msgid "" "`Docs `__ | :gh:`GitHub ` | `PyPI `__" msgstr "" -"`文档 `__ | `GitHub `__ | `PyPI `__" +"`Docs `__ | :gh:`GitHub ` | `PyPI `__" #: ../source/key_projects.rst:491 ../source/key_projects.rst:685 #: ../source/key_projects.rst:744 @@ -10658,9 +11802,8 @@ msgid "multibuild" msgstr "multibuild" #: ../source/key_projects.rst:546 -#, fuzzy msgid "`GitHub `__" -msgstr "`GitHub `__" +msgstr "`GitHub `__" #: ../source/key_projects.rst:548 msgid "" @@ -10803,22 +11946,20 @@ msgid "" "speed users' experience of installation and dependency resolution by locally " "caching metadata about dependencies." msgstr "" -"poetry是一个命令行工具,用于处理依赖性安装和隔离,以及 Python 包的构建和打" -"包。它使用 ``pyproject.toml`` ,并且不依赖 :ref:`pip`中的解析器功能,而是提供" -"自己的依赖性解析器。它试图通过本地缓存依赖关系的元数据来加速用户的安装和依赖" -"关系的解决。" +"poetry 是一个命令行工具,用于处理依赖安装和隔离,以及 Python 包的构建和打包。" +"它使用 ``pyproject.toml`` ,并且不依赖 :ref:`pip` 中的解析器功能,而是提供自" +"己的依赖解析器。它试图通过本地缓存的依赖关系元数据来加速用户安装和依赖关系解" +"决的体验。" #: ../source/key_projects.rst:654 msgid "proxpi" msgstr "" #: ../source/key_projects.rst:656 -#, fuzzy msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" -"`GitHub 和文档 `__ | `PyPI " -"`__" +":gh:`GitHub ` | `PyPI `__" #: ../source/key_projects.rst:659 msgid "" @@ -10827,9 +11968,8 @@ msgid "" msgstr "" #: ../source/key_projects.rst:665 -#, fuzzy msgid "Pulp-python" -msgstr "python" +msgstr "Pulp-python" #: ../source/key_projects.rst:667 msgid "" @@ -10889,16 +12029,14 @@ msgid "pypiserver" msgstr "pypiserver" #: ../source/key_projects.rst:708 -#, fuzzy msgid "" "`GitHub `__ | `PyPI `__" msgstr "" -"`GitHub 和文档 `__ | `PyPI " -"`__" +"`GitHub `__ | `PyPI `__" #: ../source/key_projects.rst:711 -#, fuzzy msgid "" "pypiserver is a minimalist application that serves as a private Python :term:" "`package index ` (from a local directory) within " @@ -10908,10 +12046,11 @@ msgid "" "Organizations who use pypiserver usually download packages both from " "pypiserver and from PyPI." msgstr "" -"pypiserver 是一个简约的应用程序,作为组织内的私有 Python 包索引,实现了一个简" -"单的 API 和浏览器界面。你可以使用标准的上传工具上传私有软件包,用户可以使用 :" -"ref:`pip` 下载和安装它们,而不用公开发布。使用 pypiserver 的组织通常既从 " -"pypiserver 也从 PyPI 下载软件包。" +"pypiserver 是一个极简的应用程序,充当组织内的私有 Python :term:`包索引 " +"`(从一个本地目录),实现了一个简单的 API 和浏览器界面。你可以" +"使用标准的上传工具上传私有软件包,用户可以使用 :ref:`pip` 下载和安装它们,而" +"不用公开发布。使用 pypiserver 的组织通常既从 pypiserver 也从 PyPI 下载软件" +"包。" #: ../source/key_projects.rst:722 msgid "PyScaffold" @@ -10940,12 +12079,10 @@ msgid "pywharf" msgstr "" #: ../source/key_projects.rst:741 -#, fuzzy msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" -"`GitHub 和文档 `__ | `PyPI `__" +":gh:`GitHub ` | `PyPI `__" #: ../source/key_projects.rst:746 msgid "" @@ -10979,9 +12116,8 @@ msgid "" msgstr "" #: ../source/key_projects.rst:769 -#, fuzzy msgid "scikit-build-core" -msgstr "scikit-build" +msgstr "scikit-build-core" #: ../source/key_projects.rst:771 msgid "" @@ -11028,13 +12164,12 @@ msgid "simpleindex" msgstr "" #: ../source/key_projects.rst:801 -#, fuzzy msgid "" ":gh:`GitHub ` | `PyPI `__" msgstr "" -"`GitHub 和文档 `__ | `PyPI " -"`__" +":gh:`GitHub ` | `PyPI `__" #: ../source/key_projects.rst:804 msgid "" @@ -11117,9 +12252,8 @@ msgid "" msgstr "" #: ../source/key_projects.rst:864 -#, fuzzy msgid "http.server" -msgstr "pypiserver" +msgstr "http.server" #: ../source/key_projects.rst:866 msgid "" @@ -12810,23 +13944,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -12834,7 +13975,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -12842,64 +13983,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "Wheel 不包含 setup.py 或 setup.cfg。" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12907,28 +14048,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../source/specifications/binary-distribution-format.rst:232 #: ../source/specifications/recording-installed-packages.rst:23 msgid "The .dist-info directory" msgstr "目录 .dist-info" -#: ../source/specifications/binary-distribution-format.rst:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12937,22 +14078,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12960,29 +14101,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr ":file:`.dist-info/licenses/` 目录" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr ".data 目录" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12992,7 +14146,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -13000,7 +14154,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -13008,17 +14162,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -13026,15 +14180,15 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "见" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" @@ -13042,26 +14196,26 @@ msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -13071,11 +14225,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -13084,38 +14238,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -13123,7 +14277,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -13131,18 +14285,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -13151,7 +14305,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -13162,7 +14316,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -13180,7 +14334,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -13189,37 +14343,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -13227,11 +14381,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -13341,8 +14508,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "" @@ -13449,8 +14616,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "例子::" @@ -14070,24 +15237,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -14095,29 +15271,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 -#, fuzzy +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "要求" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -14128,33 +15303,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -14163,97 +15338,95 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "reStructuredText 标记:https://docutils.sourceforge.io/" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" #: ../source/specifications/dependency-groups.rst:5 -#, fuzzy -#| msgid "Dependency Overrides" msgid "Dependency Groups" -msgstr "依赖性覆盖" +msgstr "依赖群" #: ../source/specifications/dependency-groups.rst:7 msgid "" @@ -14329,10 +15502,8 @@ msgid "" msgstr "" #: ../source/specifications/dependency-groups.rst:59 -#, fuzzy -#| msgid "Dependency Overrides" msgid "Dependency Group Include" -msgstr "依赖性覆盖" +msgstr "依赖群包括" #: ../source/specifications/dependency-groups.rst:61 msgid "" @@ -14380,10 +15551,8 @@ msgid "" msgstr "" #: ../source/specifications/dependency-groups.rst:100 -#, fuzzy -#| msgid "Package upload" msgid "Package Building" -msgstr "上传软件包" +msgstr "软件包构建" #: ../source/specifications/dependency-groups.rst:102 msgid "" @@ -14402,10 +15571,8 @@ msgid "" msgstr "" #: ../source/specifications/dependency-groups.rst:112 -#, fuzzy -#| msgid "Installing \"Extras\"" msgid "Installing Dependency Groups & Extras" -msgstr "安装\"附加功能\"" +msgstr "安装依赖群 & 附加内容" #: ../source/specifications/dependency-groups.rst:114 msgid "" @@ -14464,9 +15631,8 @@ msgstr "" #: ../source/specifications/dependency-groups.rst:155 #: ../source/specifications/inline-script-metadata.rst:123 -#, fuzzy msgid "Reference Implementation" -msgstr "文档类型" +msgstr "参考实现" #: ../source/specifications/dependency-groups.rst:157 msgid "" @@ -14599,11 +15765,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "名称" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -14615,11 +15781,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -14627,7 +15793,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -14635,17 +15801,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "版本" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -14656,11 +15821,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -14669,13 +15834,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -14684,7 +15849,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -14697,7 +15862,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -14707,7 +15872,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -14715,20 +15880,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -14738,102 +15903,102 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 msgid "Python equivalent" msgstr "Python 同等项" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "``os_name``" -#: ../source/specifications/dependency-specifiers.rst:237 -#, fuzzy +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" -msgstr "``os.name``" +msgstr ":py:data:`os.name`" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "``posix``, ``java``" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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 " @@ -14843,93 +16008,93 @@ msgstr "" "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``" -#: ../source/specifications/dependency-specifiers.rst:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "``python_version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "``3.4``, ``2.7``" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "``python_full_version``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "``3.4.0``, ``3.5.0b1``" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "``cpython``" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14937,24 +16102,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14981,7 +16146,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -15137,17 +16302,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -15156,7 +16321,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -15164,7 +16329,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -15172,34 +16337,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -15208,13 +16373,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -15222,7 +16387,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -15230,24 +16395,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -15255,22 +16420,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "子目录中的项目" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -15281,65 +16446,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../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:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -15347,106 +16512,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15707,9 +16872,8 @@ msgid "" msgstr "" #: ../source/specifications/externally-managed-environments.rst:61 -#, fuzzy msgid "distro" -msgstr "distlib" +msgstr "发行版" #: ../source/specifications/externally-managed-environments.rst:39 msgid "" @@ -15745,7 +16909,6 @@ msgid "" msgstr "" #: ../source/specifications/externally-managed-environments.rst:79 -#, fuzzy msgid "package" msgstr "打包" @@ -15802,9 +16965,8 @@ msgid "" msgstr "" #: ../source/specifications/externally-managed-environments.rst:118 -#, fuzzy msgid "distro package manager" -msgstr "macOS 安装程序和软件包管理器" +msgstr "发行版软件包管理器" #: ../source/specifications/externally-managed-environments.rst:105 msgid "" @@ -16018,9 +17180,8 @@ msgid "" msgstr "" #: ../source/specifications/externally-managed-environments.rst:283 -#, fuzzy msgid "Guide users towards virtual environments" -msgstr "虚拟环境的 Runtime 检测" +msgstr "给用户提供虚拟环境方面的指导" #: ../source/specifications/externally-managed-environments.rst:285 msgid "" @@ -16170,9 +17331,8 @@ msgid "" msgstr "" #: ../source/specifications/externally-managed-environments.rst:410 -#, fuzzy msgid "Implementation Notes" -msgstr "文档类型" +msgstr "实现注意事项" #: ../source/specifications/externally-managed-environments.rst:412 msgid "" @@ -16673,7 +17833,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -16738,10 +17898,9 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" -msgstr "创建文档" +msgstr "建议" #: ../source/specifications/inline-script-metadata.rst:207 msgid "" @@ -16765,9 +17924,8 @@ msgid "" msgstr "" #: ../source/specifications/name-normalization.rst:3 -#, fuzzy msgid "Names and normalization" -msgstr "包名规范化" +msgstr "名称和规范化" #: ../source/specifications/name-normalization.rst:5 msgid "" @@ -16789,9 +17947,8 @@ msgid "" msgstr "" #: ../source/specifications/name-normalization.rst:26 -#, fuzzy msgid "Name normalization" -msgstr "规范化" +msgstr "名称规范化" #: ../source/specifications/name-normalization.rst:28 msgid "" @@ -17029,12 +18186,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -17141,16 +18298,15 @@ msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:150 -#, fuzzy msgid "``musllinux``" -msgstr "``manylinux``" +msgstr "``musllinux``" #: ../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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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 @@ -17168,11 +18324,212 @@ msgid "" "executable’s ELF_ header." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:194 +#: ../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 "``intel``" + +#: ../source/specifications/platform-compatibility-tags.rst:221 +msgid "``i386``, ``x86_64``" +msgstr "``i386``, ``x86_64``" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``fat``" +msgstr "" + +#: ../source/specifications/platform-compatibility-tags.rst:222 +msgid "``i386``, ``ppc``" +msgstr "``i386``, ``ppc``" + +#: ../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:196 +#: ../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 " @@ -17180,7 +18537,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -17191,14 +18548,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -17207,69 +18564,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -17280,11 +18637,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -17294,7 +18651,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -17302,11 +18659,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -17314,13 +18671,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -17331,23 +18688,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -17355,11 +18712,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -17369,33 +18726,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -17403,13 +18760,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -17418,34 +18775,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -17686,7 +19051,7 @@ msgid "``dependencies``" msgstr "``dependencies``" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -17698,81 +19063,82 @@ msgstr "``entry-points``" msgid "``gui-scripts``" msgstr "``gui-scripts``" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 msgid "``maintainers``" msgstr "``maintainers``" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -17786,7 +19152,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -17795,7 +19161,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -17807,41 +19173,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -17849,20 +19319,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17871,92 +19341,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17964,14 +19437,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17979,7 +19452,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17987,24 +19460,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -18012,7 +19485,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -18023,17 +19496,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -18041,19 +19514,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -18062,20 +19535,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -18083,18 +19556,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -18102,7 +19575,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -18110,19 +19583,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -18220,7 +19699,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -18228,7 +19717,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -18236,58 +19725,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -18295,7 +19784,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -18304,13 +19793,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -18319,7 +19808,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -18328,18 +19817,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -18347,7 +19836,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -18357,11 +19846,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -18369,15 +19858,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -18385,11 +19874,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -18397,29 +19886,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -18428,11 +19931,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -18440,14 +19943,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -18456,28 +19959,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -18492,9 +19995,8 @@ msgid "Package Distribution Metadata" msgstr "" #: ../source/specifications/section-installation-metadata.rst:3 -#, fuzzy msgid "Package Installation Metadata" -msgstr "安装格式" +msgstr "软件包安装元数据" #: ../source/specifications/section-package-indices.rst:3 msgid "Package Index Interfaces" @@ -18506,15 +20008,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -18522,23 +20032,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -18554,44 +20064,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -18599,7 +20109,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -18608,7 +20118,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -18616,22 +20160,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -18640,18 +20184,21 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:142 msgid "Normalized Names" -msgstr "规范化" +msgstr "规范化的名称" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -18661,11 +20208,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -18675,7 +20222,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -18683,7 +20230,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -18691,12 +20238,11 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:180 msgid "Installers" -msgstr "安装程序" +msgstr "安装包" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -18706,7 +20252,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -18716,14 +20262,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -18733,7 +20279,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -18741,7 +20287,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -18750,71 +20296,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -18823,7 +20369,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -18833,49 +20379,71 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 msgid "Clients" -msgstr "内容" +msgstr "客户端" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18884,7 +20452,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18896,7 +20464,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18906,18 +20474,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18925,11 +20493,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18937,7 +20505,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18947,7 +20515,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18957,7 +20525,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18965,28 +20533,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18995,38 +20563,37 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:403 msgid "JSON Serialization" -msgstr "规范化" +msgstr "JSON 序列化" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -19034,19 +20601,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 msgid "Project List" -msgstr "项目" +msgstr "项目清单" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "示例:" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -19100,7 +20672,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` 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:490 +msgid "" +"This URL must respond with a JSON encoded dictionary that has four keys:" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:492 +msgid "``name``: The normalized name of the project." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:493 +msgid "" +"``files``: A list of dictionaries, each one representing an individual file." +msgstr "" -#: ../source/specifications/simple-repository-api.rst:440 +#: ../source/specifications/simple-repository-api.rst:495 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/``." +"``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:445 +#: ../source/specifications/simple-repository-api.rst:502 msgid "" -"This URL must respond with a JSON encoded dictionary that has three keys:" +"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:447 -msgid "``name``: The normalized name of the project." +#: ../source/specifications/simple-repository-api.rst:509 +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:448 -msgid "" -"``files``: A list of dictionaries, each one representing an individual file." +#: ../source/specifications/simple-repository-api.rst:517 +msgid "The ``versions`` key was added with API version 1.1." msgstr "" -#: ../source/specifications/simple-repository-api.rst:451 +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -19158,14 +20758,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -19175,7 +20775,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -19183,44 +20783,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -19229,7 +20847,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -19240,7 +20858,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -19248,7 +20896,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -19312,12 +20963,11 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 -#, fuzzy +#: ../source/specifications/simple-repository-api.rst:692 msgid "Version + Format Selection" -msgstr "版本" +msgstr "版本+格式选择" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -19326,65 +20976,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -19392,7 +21042,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -19403,7 +21053,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -19412,33 +21062,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "``$type/$subtype``" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "``$type/*``" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "``*/*``" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -19448,7 +21098,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -19458,7 +21108,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -19466,7 +21116,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -19477,22 +21127,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -19501,25 +21151,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -19527,13 +21177,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -19543,18 +21193,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -19562,7 +21212,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -19572,7 +21222,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -19580,11 +21230,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -19595,7 +21245,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -19603,7 +21253,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -19612,7 +21262,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -19620,7 +21270,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -19630,20 +21280,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -19651,7 +21301,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -19660,18 +21310,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -19679,13 +21329,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -19694,23 +21344,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -19719,217 +21369,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -#, fuzzy -msgid "Additional file information" -msgstr "附加工具" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19962,11 +21463,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19976,11 +21477,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19989,20 +21490,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -20010,29 +21511,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -20040,22 +21550,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 -#, fuzzy +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" -msgstr "源代码分发(或“sdist”)" +msgstr "源分发归档特性" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -20063,7 +21572,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -20073,11 +21582,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -20085,113 +21594,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -20204,9 +21719,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:15 -#, fuzzy msgid "Definitions" -msgstr "规格" +msgstr "定义" #: ../source/specifications/version-specifiers.rst:17 msgid "" @@ -20252,9 +21766,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:43 -#, fuzzy msgid "Version scheme" -msgstr "版本" +msgstr "版本格式" #: ../source/specifications/version-specifiers.rst:45 msgid "" @@ -20271,9 +21784,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:57 -#, fuzzy msgid "Public version identifiers" -msgstr "本地版本标识符" +msgstr "公开版本识别符" #: ../source/specifications/version-specifiers.rst:59 msgid "" @@ -20423,9 +21935,8 @@ msgid "periods (``.``)" msgstr "" #: ../source/specifications/version-specifiers.rst:147 -#, fuzzy msgid "Local version labels MUST start and end with an ASCII letter or digit." -msgstr "以一个 ASCII 字母或数字开始和结束。" +msgstr "本地版本标签必须以 ASCII 字母或数字开头和结尾。" #: ../source/specifications/version-specifiers.rst:149 msgid "" @@ -20531,9 +22042,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:243 -#, fuzzy msgid "Pre-releases" -msgstr "zest.releaser" +msgstr "发布前" #: ../source/specifications/version-specifiers.rst:245 msgid "" @@ -20580,9 +22090,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:275 -#, fuzzy msgid "Post-releases" -msgstr "zest.releaser" +msgstr "发布后" #: ../source/specifications/version-specifiers.rst:277 msgid "" @@ -20689,9 +22198,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:361 -#, fuzzy msgid "Version epochs" -msgstr "版本" +msgstr "重要版本" #: ../source/specifications/version-specifiers.rst:363 msgid "" @@ -20745,9 +22253,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:415 -#, fuzzy msgid "Integer Normalization" -msgstr "规范化" +msgstr "整数规范化" #: ../source/specifications/version-specifiers.rst:417 msgid "" @@ -20876,9 +22383,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:512 -#, fuzzy msgid "Local version segments" -msgstr "本地版本标识符" +msgstr "本地版本部分" #: ../source/specifications/version-specifiers.rst:514 msgid "" @@ -21293,9 +22799,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:868 -#, fuzzy msgid "Version matching" -msgstr "版本" +msgstr "版本匹配" #: ../source/specifications/version-specifiers.rst:870 msgid "" @@ -21395,9 +22900,8 @@ msgid "" msgstr "" #: ../source/specifications/version-specifiers.rst:947 -#, fuzzy msgid "Version exclusion" -msgstr "版本说明符 (Version Specifier)" +msgstr "版本排除" #: ../source/specifications/version-specifiers.rst:949 msgid "" @@ -21616,9 +23120,8 @@ msgstr "" "版本。" #: ../source/specifications/version-specifiers.rst:1083 -#, fuzzy msgid "Direct references" -msgstr "参考" +msgstr "直接引用" #: ../source/specifications/version-specifiers.rst:1085 msgid "" @@ -21886,9 +23389,8 @@ msgid "May 2012: This specification was approved through :pep:`405`." msgstr "" #: ../source/specifications/well-known-project-urls.rst:5 -#, fuzzy msgid "Well-known Project URLs in Metadata" -msgstr "项目名称" +msgstr "元数据中知名项目 URL" #: ../source/specifications/well-known-project-urls.rst:9 msgid "" @@ -21933,9 +23435,8 @@ msgid "" msgstr "" #: ../source/specifications/well-known-project-urls.rst:42 -#, fuzzy msgid "Label normalization" -msgstr "规范化" +msgstr "标签规范化" #: ../source/specifications/well-known-project-urls.rst:46 msgid "" @@ -21973,9 +23474,8 @@ msgid "Raw" msgstr "" #: ../source/specifications/well-known-project-urls.rst:75 -#, fuzzy msgid "Normalized" -msgstr "规范化" +msgstr "已规范化" #: ../source/specifications/well-known-project-urls.rst:76 msgid "``Homepage``" @@ -22096,22 +23596,16 @@ msgid "The project's curated release notes" msgstr "" #: ../source/specifications/well-known-project-urls.rst:123 -#, fuzzy -#| msgid "Creating documentation" msgid "``documentation`` (Documentation)" -msgstr "创建文档" +msgstr "``documentation`` (文档)" #: ../source/specifications/well-known-project-urls.rst:124 -#, fuzzy -#| msgid "Creating documentation" msgid "The project's online documentation" -msgstr "创建文档" +msgstr "项目的线上文档" #: ../source/specifications/well-known-project-urls.rst:125 -#, fuzzy -#| msgid "``upload_docs``" msgid "``docs``" -msgstr "``upload_docs``" +msgstr "``docs``" #: ../source/specifications/well-known-project-urls.rst:126 msgid "``issues`` (Issue Tracker)" @@ -22130,9 +23624,8 @@ msgid "``funding`` (Funding)" msgstr "" #: ../source/specifications/well-known-project-urls.rst:130 -#, fuzzy msgid "Funding Information" -msgstr "附加工具" +msgstr "资金信息" #: ../source/specifications/well-known-project-urls.rst:131 msgid "``sponsor``, ``donate``, ``donation``" @@ -22145,10 +23638,8 @@ msgid "" msgstr "" #: ../source/specifications/well-known-project-urls.rst:137 -#, fuzzy -#| msgid "Example" msgid "Example behavior" -msgstr "例子" +msgstr "示例行为" #: ../source/specifications/well-known-project-urls.rst:139 msgid "" @@ -22869,7 +24360,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -23126,7 +24617,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -23135,24 +24626,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -23161,31 +24652,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -23193,21 +24696,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -23216,58 +24719,61 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "确保你安装了最新版本的 PyPA 的 :ref:`build`:" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -"如果你在安装这些东西时遇到困难,请查看 :doc:`installing-packages`教程。" +"如果你在安装这些东西时遇到困难,请查看 :doc:`installing-packages` 教程。" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "请确保在软件包名称中指定你的用户名!" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "pip应该会安装 TestPyPI 的软件包,输出结果应该是这样的:" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -23368,23 +24874,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "并导入该软件包:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -23392,28 +24898,28 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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:519 +#: ../source/tutorials/packaging-projects.rst:553 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:521 +#: ../source/tutorials/packaging-projects.rst:555 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:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -23421,44 +24927,44 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 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:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages , 2022. # hugoalh , 2024. # Ricky From Hong Kong , 2024. +# nonepork <59335048+nonepork@users.noreply.github.com>, 2025. +# toto6038 , 2025. msgid "" msgstr "" "Project-Id-Version: Python Packaging User Guide\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-07 04:23+0000\n" -"PO-Revision-Date: 2024-07-03 11:26+0000\n" -"Last-Translator: Ricky From Hong Kong \n" -"Language-Team: Chinese (Traditional) \n" +"POT-Creation-Date: 2025-02-26 11:55+0000\n" +"PO-Revision-Date: 2025-02-24 15:37+0000\n" +"Last-Translator: toto6038 \n" +"Language-Team: Chinese (Traditional Han script) \n" "Language: zh_Hant\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.10.1-dev\n" #: ../source/contribute.rst:5 msgid "Contribute to this guide" @@ -155,21 +157,23 @@ msgid "" "We use `Weblate`_ to manage translations of this project. Please visit the " "`packaging.python.org`_ project on Weblate to contribute." msgstr "" +"我們使用了 `Weblate`_ 平台來管理專案的翻譯。請在 Weblate 瀏覽 `packaging." +"python.org`_ 來貢獻翻譯。" #: ../source/contribute.rst:80 msgid "" "If you are experiencing issues while you are working on translations, please " "open an issue on `GitHub`_." -msgstr "" +msgstr "如果你在翻譯上遇到了問題,請在`Github`_ 上建立一項 Issue。" #: ../source/contribute.rst:85 msgid "" "Any translations of this project should follow `reStructuredText syntax`_." -msgstr "" +msgstr "所有關於此專案的翻譯應該遵守 `reStructuredText syntax`_ 。" #: ../source/contribute.rst:93 msgid "Adding a language" -msgstr "" +msgstr "新增一個語言" #: ../source/contribute.rst:95 msgid "" @@ -190,7 +194,7 @@ msgstr "" #: ../source/contribute.rst:105 msgid "**Do not translate the text in reference directly**" -msgstr "" +msgstr "**請勿直接在參照裡翻譯文字**" #: ../source/contribute.rst:107 msgid "" @@ -508,6 +512,7 @@ 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 @@ -528,6 +533,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 @@ -612,6 +618,7 @@ msgid "" msgstr "" #: ../source/discussions/deploying-python-applications.rst:103 +#: ../source/specifications/platform-compatibility-tags.rst:195 msgid "macOS" msgstr "" @@ -787,6 +794,701 @@ msgid "" "library/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 " @@ -1928,7 +2630,7 @@ msgid "" msgstr "" #: ../source/discussions/versioning.rst:6 -#: ../source/specifications/simple-repository-api.rst:319 +#: ../source/specifications/simple-repository-api.rst:362 #, fuzzy msgid "Versioning" msgstr "翻譯" @@ -2726,49 +3428,91 @@ msgid "" 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 +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:152 +#: ../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:155 +#: ../source/glossary.rst:189 msgid "Package Index" msgstr "套件索引" -#: ../source/glossary.rst:158 +#: ../source/glossary.rst:192 msgid "" "A repository of distributions with a web interface to automate :term:" "`package ` discovery and consumption." msgstr "" -#: ../source/glossary.rst:161 +#: ../source/glossary.rst:195 msgid "Per Project Index" msgstr "" -#: ../source/glossary.rst:164 +#: ../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:168 ../source/guides/hosting-your-own-index.rst:62 +#: ../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:171 +#: ../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:175 +#: ../source/glossary.rst:209 msgid "" "Since most projects create :term:`Distributions ` " "using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:" @@ -2777,7 +3521,7 @@ msgid "" "`setup.cfg` file at the root of the project source directory." msgstr "" -#: ../source/glossary.rst:181 +#: ../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 :" @@ -2785,7 +3529,7 @@ msgid "" "`distributions `." msgstr "" -#: ../source/glossary.rst:186 +#: ../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 " @@ -2793,34 +3537,34 @@ msgid "" "and have it provide a package importable only as 'bar'." msgstr "" -#: ../source/glossary.rst:192 +#: ../source/glossary.rst:226 #, fuzzy #| msgid "Project name" msgid "Project Root Directory" msgstr "專案名稱" -#: ../source/glossary.rst:195 +#: ../source/glossary.rst:229 msgid "" "The filesystem directory in which a :term:`Project`'s :term:`source tree " "` is located." msgstr "" -#: ../source/glossary.rst:198 +#: ../source/glossary.rst:232 msgid "Project Source Tree" msgstr "" -#: ../source/glossary.rst:201 +#: ../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:207 +#: ../source/glossary.rst:241 msgid "Project Source Metadata" msgstr "" -#: ../source/glossary.rst:210 +#: ../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 " @@ -2830,23 +3574,23 @@ msgid "" "or in a tool's own configuration file)." msgstr "" -#: ../source/glossary.rst:220 +#: ../source/glossary.rst:254 msgid "Pure Module" msgstr "" -#: ../source/glossary.rst:223 +#: ../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:226 +#: ../source/glossary.rst:260 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata" msgstr "專案名稱" -#: ../source/glossary.rst:229 +#: ../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`, " @@ -2855,33 +3599,33 @@ msgid "" "metadata format under the ``[tool]`` table in ``pyproject.toml``." msgstr "" -#: ../source/glossary.rst:237 +#: ../source/glossary.rst:271 #, fuzzy #| msgid "Project name" msgid "Pyproject Metadata Key" msgstr "專案名稱" -#: ../source/glossary.rst:240 +#: ../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:244 +#: ../source/glossary.rst:278 msgid "Pyproject Metadata Subkey" msgstr "" -#: ../source/glossary.rst:247 +#: ../source/glossary.rst:281 msgid "" "A second-level TOML key under a table-valued :term:`Pyproject Metadata Key`." msgstr "" -#: ../source/glossary.rst:250 +#: ../source/glossary.rst:284 msgid "Python Packaging Authority (PyPA)" msgstr "" -#: ../source/glossary.rst:253 +#: ../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 " @@ -2891,48 +3635,48 @@ msgid "" "`the Python Discourse forum `__." msgstr "" -#: ../source/glossary.rst:262 +#: ../source/glossary.rst:296 msgid "Python Package Index (PyPI)" msgstr "" -#: ../source/glossary.rst:265 +#: ../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:268 +#: ../source/glossary.rst:302 msgid "pypi.org" msgstr "pypi.org" -#: ../source/glossary.rst:271 +#: ../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:275 +#: ../source/glossary.rst:309 msgid "pyproject.toml" msgstr "pyproject.toml" -#: ../source/glossary.rst:278 +#: ../source/glossary.rst:312 msgid "" "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`." msgstr "" -#: ../source/glossary.rst:280 +#: ../source/glossary.rst:314 msgid "Release" msgstr "發行版本" -#: ../source/glossary.rst:283 +#: ../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:286 +#: ../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 " @@ -2940,11 +3684,11 @@ msgid "" "Windows installer distribution format." msgstr "" -#: ../source/glossary.rst:291 +#: ../source/glossary.rst:325 msgid "Requirement" msgstr "要求" -#: ../source/glossary.rst:294 +#: ../source/glossary.rst:328 msgid "" "A specification for a :term:`package ` to be " "installed. :ref:`pip`, the :term:`PYPA ` " @@ -2953,11 +3697,11 @@ msgid "" "install` reference." msgstr "" -#: ../source/glossary.rst:300 +#: ../source/glossary.rst:334 msgid "Requirement Specifier" msgstr "" -#: ../source/glossary.rst:303 +#: ../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`. " @@ -2965,49 +3709,71 @@ msgid "" "project name, and the \">=1.3\" portion is the :term:`Version Specifier`" msgstr "" -#: ../source/glossary.rst:308 +#: ../source/glossary.rst:342 msgid "Requirements File" msgstr "" -#: ../source/glossary.rst:311 +#: ../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:315 +#: ../source/glossary.rst:349 +#, fuzzy +#| msgid "Project name" +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 "setup.py" -#: ../source/glossary.rst:316 +#: ../source/glossary.rst:367 #: ../source/guides/distributing-packages-using-setuptools.rst:80 msgid "setup.cfg" msgstr "setup.cfg" -#: ../source/glossary.rst:319 +#: ../source/glossary.rst:370 msgid "" "The project specification files for :ref:`distutils` and :ref:`setuptools`. " "See also :term:`pyproject.toml`." msgstr "" -#: ../source/glossary.rst:322 +#: ../source/glossary.rst:373 msgid "Source Archive" msgstr "" -#: ../source/glossary.rst:325 +#: ../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:329 +#: ../source/glossary.rst:380 msgid "Source Distribution (or \"sdist\")" msgstr "" -#: ../source/glossary.rst:332 +#: ../source/glossary.rst:383 msgid "" "A :term:`distribution ` format (usually generated " "using ``python -m build --sdist``) that provides metadata and the essential " @@ -3016,21 +3782,21 @@ msgid "" "information." msgstr "" -#: ../source/glossary.rst:338 +#: ../source/glossary.rst:389 msgid "System Package" msgstr "" -#: ../source/glossary.rst:341 +#: ../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:344 +#: ../source/glossary.rst:395 msgid "Version Specifier" msgstr "" -#: ../source/glossary.rst:347 +#: ../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 " @@ -3039,11 +3805,11 @@ msgid "" "was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0." msgstr "" -#: ../source/glossary.rst:352 +#: ../source/glossary.rst:403 msgid "Virtual Environment" msgstr "" -#: ../source/glossary.rst:355 +#: ../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 " @@ -3051,15 +3817,15 @@ msgid "" "Environments`." msgstr "" -#: ../source/glossary.rst:360 +#: ../source/glossary.rst:411 msgid "Wheel Format" msgstr "" -#: ../source/glossary.rst:361 +#: ../source/glossary.rst:412 msgid "Wheel" msgstr "" -#: ../source/glossary.rst:364 +#: ../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. " @@ -3067,21 +3833,21 @@ msgid "" "reference implementation, the :term:`Wheel Project`." msgstr "" -#: ../source/glossary.rst:371 +#: ../source/glossary.rst:422 msgid "Wheel Project" msgstr "" -#: ../source/glossary.rst:374 +#: ../source/glossary.rst:425 msgid "" "The PyPA reference implementation of the :term:`Wheel Format`; see :ref:" "`wheel`." msgstr "" -#: ../source/glossary.rst:376 +#: ../source/glossary.rst:427 msgid "Working Set" msgstr "" -#: ../source/glossary.rst:379 +#: ../source/glossary.rst:430 msgid "" "A collection of :term:`distributions ` available for " "importing. These are the distributions that are on the `sys.path` variable. " @@ -3233,7 +3999,7 @@ 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:347 +#: ../source/specifications/direct-url-data-structure.rst:357 #: ../source/specifications/version-specifiers.rst:1069 msgid "Examples" msgstr "例子" @@ -3590,7 +4356,7 @@ msgid "" msgstr "" #: ../source/guides/analyzing-pypi-package-downloads.rst:337 -#: ../source/specifications/dependency-specifiers.rst:491 +#: ../source/specifications/dependency-specifiers.rst:501 msgid "References" msgstr "參考" @@ -4287,7 +5053,7 @@ msgid "" msgstr "" #: ../source/guides/distributing-packages-using-setuptools.rst:281 -#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:147 msgid "``scripts``" msgstr "" @@ -5994,6 +6760,333 @@ msgid "" "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. As of February 2025, :" +"doc:`setuptools ` and :ref:`flit " +"` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:20 +#, fuzzy +#| msgid "Examples" +msgid "Licensing Examples" +msgstr "例子" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:25 +msgid "Basic example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:27 +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:34 +msgid "" +"It includes the following license-related metadata in its :file:`pyproject." +"toml`:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:44 +msgid "The simplest migration to PEP 639 would consist of using this instead:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:51 +msgid "Or, if the project used :file:`setup.cfg`, in its ``[metadata]`` table:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:58 +msgid "The output Core Metadata for the distribution packages would then be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:65 +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:75 +msgid "Advanced example" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:77 +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:88 +msgid "The license expressions for these projects are:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:97 +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:105 +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:113 +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:124 +msgid "Putting it all together, our :file:`pyproject.toml` would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:135 +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:149 +msgid "If our project used :file:`setup.cfg`, we could define this in :" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:161 +msgid "" +"With either approach, the output Core Metadata in the distribution would be:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:172 +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:183 +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:193 +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:205 +msgid "Expression examples" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:207 +msgid "Some additional examples of valid ``License-Expression`` values:" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:222 +msgid "User Scenarios" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:224 +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:232 +msgid "I have a private package that won't be distributed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:234 +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:238 +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:246 +msgid "I just want to share my own work without legal restrictions" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:248 +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:255 +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:263 +msgid "I want to distribute my project under a specific license" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:265 +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:274 +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:279 +msgid "I maintain an existing package that's already licensed" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:281 +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:285 +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:294 +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:298 +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:308 +msgid "My package includes other code under different licenses" +msgstr "" + +#: ../source/guides/licensing-examples-and-user-scenarios.rst:310 +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:316 +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:324 +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:330 +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:336 +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:347 +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 "" @@ -8654,13 +9747,14 @@ msgstr "" #: ../source/guides/writing-pyproject-toml.rst:32 msgid "" -"As of August 2024, Poetry_ is a notable build backend that does not use the " -"``[project]`` table, it uses the ``[tool.poetry]`` table instead. Also, the " -"setuptools_ build backend supports both the ``[project]`` table, and the " -"older format in ``setup.cfg`` or ``setup.py``." +"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:37 +#: ../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), " @@ -8668,11 +9762,11 @@ msgid "" "`setup-py-deprecated`." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:46 +#: ../source/guides/writing-pyproject-toml.rst:47 msgid "Declaring the build backend" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:48 +#: ../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, " @@ -8682,29 +9776,29 @@ msgid "" "[\"setuptools >= 61.0\"]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:54 +#: ../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:93 +#: ../source/guides/writing-pyproject-toml.rst:94 msgid "Static vs. dynamic metadata" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:95 +#: ../source/guides/writing-pyproject-toml.rst:96 msgid "The rest of this guide is devoted to the ``[project]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:97 +#: ../source/guides/writing-pyproject-toml.rst:98 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:101 +#: ../source/guides/writing-pyproject-toml.rst:102 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 " @@ -8712,37 +9806,37 @@ msgid "" "cases, you should mark the field as dynamic using, e.g.," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:112 +#: ../source/guides/writing-pyproject-toml.rst:113 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:118 +#: ../source/guides/writing-pyproject-toml.rst:119 msgid "Basic information" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:123 +#: ../source/guides/writing-pyproject-toml.rst:124 #: ../source/specifications/pyproject-toml.rst:120 -#: ../source/specifications/pyproject-toml.rst:142 -#: ../source/specifications/pyproject-toml.rst:152 +#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:153 msgid "``name``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:125 +#: ../source/guides/writing-pyproject-toml.rst:126 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:133 +#: ../source/guides/writing-pyproject-toml.rst:134 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:137 +#: ../source/guides/writing-pyproject-toml.rst:138 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 " @@ -8751,100 +9845,100 @@ msgid "" "Stuff``, ``cool.stuff``, ``COOL_STUFF``, ``CoOl__-.-__sTuFF``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:145 +#: ../source/guides/writing-pyproject-toml.rst:146 #: ../source/specifications/pyproject-toml.rst:125 -#: ../source/specifications/pyproject-toml.rst:148 -#: ../source/specifications/pyproject-toml.rst:164 +#: ../source/specifications/pyproject-toml.rst:149 +#: ../source/specifications/pyproject-toml.rst:165 msgid "``version``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:147 +#: ../source/guides/writing-pyproject-toml.rst:148 #, fuzzy #| msgid "List keywords that describe your project." msgid "Put the version of your project." msgstr "列出描述您的項目的關鍵字。" -#: ../source/guides/writing-pyproject-toml.rst:154 +#: ../source/guides/writing-pyproject-toml.rst:155 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:158 +#: ../source/guides/writing-pyproject-toml.rst:159 msgid "This field is required, although it is often marked as dynamic using" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:165 +#: ../source/guides/writing-pyproject-toml.rst:166 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:171 +#: ../source/guides/writing-pyproject-toml.rst:172 msgid "Dependencies and requirements" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:174 -#: ../source/specifications/pyproject-toml.rst:356 +#: ../source/guides/writing-pyproject-toml.rst:175 +#: ../source/specifications/pyproject-toml.rst:420 msgid "``dependencies``/``optional-dependencies``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:176 +#: ../source/guides/writing-pyproject-toml.rst:177 msgid "If your project has dependencies, list them like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:189 msgid "" "See :ref:`Dependency specifiers ` for the full syntax " "you can use to constrain versions." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:191 +#: ../source/guides/writing-pyproject-toml.rst:192 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:204 +#: ../source/guides/writing-pyproject-toml.rst:205 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:213 -#: ../source/specifications/pyproject-toml.rst:145 -#: ../source/specifications/pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:214 +#: ../source/specifications/pyproject-toml.rst:146 +#: ../source/specifications/pyproject-toml.rst:228 msgid "``requires-python``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:215 +#: ../source/guides/writing-pyproject-toml.rst:216 msgid "" "This lets you declare the minimum version of Python that you support " "[#requires-python-upper-bounds]_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:227 +#: ../source/guides/writing-pyproject-toml.rst:228 msgid "Creating executable scripts" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:229 +#: ../source/guides/writing-pyproject-toml.rst:230 msgid "" "To install a command as part of your package, declare it in the ``[project." "scripts]`` table." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:237 +#: ../source/guides/writing-pyproject-toml.rst:238 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()``." +"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:241 +#: ../source/guides/writing-pyproject-toml.rst:242 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 " @@ -8852,93 +9946,135 @@ msgid "" "of ``[project.scripts]``." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:251 +#: ../source/guides/writing-pyproject-toml.rst:252 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:254 +#: ../source/guides/writing-pyproject-toml.rst:255 msgid "" "The difference between ``[project.scripts]`` and ``[project.gui-scripts]`` " "is only relevant on Windows." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:260 +#: ../source/guides/writing-pyproject-toml.rst:261 msgid "About your project" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:263 -#: ../source/specifications/pyproject-toml.rst:252 +#: ../source/guides/writing-pyproject-toml.rst:264 +#: ../source/specifications/pyproject-toml.rst:310 msgid "``authors``/``maintainers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:265 +#: ../source/guides/writing-pyproject-toml.rst:266 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:285 +#: ../source/guides/writing-pyproject-toml.rst:286 #: ../source/specifications/pyproject-toml.rst:135 -#: ../source/specifications/pyproject-toml.rst:177 +#: ../source/specifications/pyproject-toml.rst:178 msgid "``description``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:287 +#: ../source/guides/writing-pyproject-toml.rst:288 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:298 -#: ../source/specifications/pyproject-toml.rst:144 -#: ../source/specifications/pyproject-toml.rst:188 +#: ../source/guides/writing-pyproject-toml.rst:299 +#: ../source/specifications/pyproject-toml.rst:145 +#: ../source/specifications/pyproject-toml.rst:189 msgid "``readme``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:300 +#: ../source/guides/writing-pyproject-toml.rst:301 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:309 +#: ../source/guides/writing-pyproject-toml.rst:310 msgid "The README's format is auto-detected from the extension:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:311 +#: ../source/guides/writing-pyproject-toml.rst:312 msgid "``README.md`` → `GitHub-flavored Markdown `_," msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:312 +#: ../source/guides/writing-pyproject-toml.rst:313 msgid "" "``README.rst`` → `reStructuredText `_ (without Sphinx extensions)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:315 msgid "You can also specify the format explicitly, like this:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:325 +#: ../source/guides/writing-pyproject-toml.rst:328 #: ../source/specifications/pyproject-toml.rst:140 -#: ../source/specifications/pyproject-toml.rst:237 +#: ../source/specifications/pyproject-toml.rst:238 msgid "``license``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:327 +#: ../source/guides/writing-pyproject-toml.rst:330 +msgid "" +":pep:`639` (accepted in August 2024) has changed the way the ``license`` " +"field is declared. Make sure your preferred build backend supports :pep:" +"`639` before trying to apply the newer guidelines. As of February 2025, :doc:" +"`setuptools ` and :ref:`flit ` don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:337 +msgid ":pep:`639` license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:339 +msgid "" +"This 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:352 +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:356 +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 +msgid "Legacy license declaration" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:369 msgid "" -"This can take two forms. You can put your license in a file, typically " -"``LICENSE`` or ``LICENSE.txt``, and link that file here:" +"This can take two forms. You can put your license in a file, typically :file:" +"`LICENSE` or :file:`LICENSE.txt`, and link that file here:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:335 +#: ../source/guides/writing-pyproject-toml.rst:377 msgid "or you can write the name of the license:" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:342 +#: ../source/guides/writing-pyproject-toml.rst:384 msgid "" "If you are using a standard, well-known license, it is not necessary to use " "this field. Instead, you should use one of the :ref:`classifiers` starting " @@ -8947,31 +10083,92 @@ msgid "" "organizations avoid software whose license is unapproved.)" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:350 +#: ../source/guides/writing-pyproject-toml.rst:394 +#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:251 +msgid "``license-files``" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:396 +msgid "" +":pep:`639` (accepted in August 2024) has introduced the ``license-files`` " +"field. Make sure your preferred build backend supports :pep:`639` before " +"declaring the field. As of February 2025, :doc:`setuptools ` and :ref:`flit ` " +"don't support :pep:`639` yet." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:402 +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:410 +msgid "The glob patterns must follow the specification:" +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:412 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) will be matched verbatim." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:414 +msgid "" +"Special characters: ``*``, ``?``, ``**`` and character ranges: [] are " +"supported." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:415 +msgid "Path delimiters must be the forward slash character (``/``)." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:416 +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:418 +msgid "Parent directory indicators (``..``) must not be used." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:419 +msgid "Each glob must match at least one file." +msgstr "" + +#: ../source/guides/writing-pyproject-toml.rst:421 +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:427 #: ../source/specifications/pyproject-toml.rst:139 -#: ../source/specifications/pyproject-toml.rst:294 +#: ../source/specifications/pyproject-toml.rst:352 msgid "``keywords``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:352 +#: ../source/guides/writing-pyproject-toml.rst:429 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:364 +#: ../source/guides/writing-pyproject-toml.rst:441 #: ../source/specifications/pyproject-toml.rst:133 -#: ../source/specifications/pyproject-toml.rst:304 +#: ../source/specifications/pyproject-toml.rst:362 msgid "``classifiers``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:366 +#: ../source/guides/writing-pyproject-toml.rst:443 msgid "" "A list of PyPI classifiers that apply to your project. Check the `full list " "of possibilities `_." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:393 +#: ../source/guides/writing-pyproject-toml.rst:467 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 " @@ -8980,26 +10177,26 @@ msgid "" "python` argument." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:398 +#: ../source/guides/writing-pyproject-toml.rst:472 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:405 -#: ../source/specifications/pyproject-toml.rst:147 -#: ../source/specifications/pyproject-toml.rst:314 +#: ../source/guides/writing-pyproject-toml.rst:479 +#: ../source/specifications/pyproject-toml.rst:148 +#: ../source/specifications/pyproject-toml.rst:378 msgid "``urls``" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:407 +#: ../source/guides/writing-pyproject-toml.rst:481 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:412 +#: ../source/guides/writing-pyproject-toml.rst:486 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 " @@ -9007,28 +10204,28 @@ msgid "" "URL processing." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:426 +#: ../source/guides/writing-pyproject-toml.rst:500 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:430 +#: ../source/guides/writing-pyproject-toml.rst:504 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:434 +#: ../source/guides/writing-pyproject-toml.rst:508 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:444 +#: ../source/guides/writing-pyproject-toml.rst:518 msgid "" "Whereas in this metadata ``HomePage`` and ``DOWNLOAD`` both have well-known " "equivalents (``homepage`` and ``download``), and can be presented with those " @@ -9036,26 +10233,26 @@ msgid "" "location, respectively)." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:456 +#: ../source/guides/writing-pyproject-toml.rst:530 msgid "Advanced plugins" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:458 +#: ../source/guides/writing-pyproject-toml.rst:532 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:467 +#: ../source/guides/writing-pyproject-toml.rst:541 msgid "See the :ref:`Plugin guide ` for more information." msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:472 +#: ../source/guides/writing-pyproject-toml.rst:546 msgid "A full example" msgstr "" -#: ../source/guides/writing-pyproject-toml.rst:534 +#: ../source/guides/writing-pyproject-toml.rst:609 msgid "" "Think twice before applying an upper bound like ``requires-python = \"<= " "3.10\"`` here. `This blog post `_ contains some " @@ -9228,7 +10425,7 @@ msgstr "" #: ../source/key_projects.rst:37 msgid "build" -msgstr "構建" +msgstr "建置" #: ../source/key_projects.rst:39 msgid "" @@ -11972,23 +13169,30 @@ msgstr "" #: ../source/specifications/binary-distribution-format.rst:177 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:" +"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:181 +#: ../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:184 +#: ../source/specifications/binary-distribution-format.rst:187 msgid "``{distribution}-{version}.dist-info/`` contains metadata." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:185 +#: ../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 " @@ -11996,7 +13200,7 @@ msgid "" "``headers``, ``purelib``, ``platlib``)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:189 +#: ../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`` " @@ -12004,64 +13208,64 @@ msgid "" "``scripts`` directory may only contain regular files." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:193 +#: ../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:195 +#: ../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:205 +#: ../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:206 +#: ../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:208 +#: ../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:211 +#: ../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:213 +#: ../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:214 +#: ../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:217 +#: ../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:219 +#: ../source/specifications/binary-distribution-format.rst:223 msgid "Wheel does not contain setup.py or setup.cfg." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:221 +#: ../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 " @@ -12069,28 +13273,28 @@ msgid "" "wininst and egg binary formats." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:228 +#: ../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:230 +#: ../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:232 +#: ../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:234 +#: ../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:235 +#: ../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 " @@ -12099,22 +13303,22 @@ msgid "" "rely on the strong hashes in RECORD to validate the integrity of the archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:241 +#: ../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:242 +#: ../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:244 +#: ../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:247 +#: ../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 " @@ -12122,29 +13326,42 @@ msgid "" "in RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:254 +#: ../source/specifications/binary-distribution-format.rst:258 +msgid "The :file:`.dist-info/licenses/` directory" +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:260 +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:268 msgid "The .data directory" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:256 +#: ../source/specifications/binary-distribution-format.rst:270 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:264 +#: ../source/specifications/binary-distribution-format.rst:278 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:270 +#: ../source/specifications/binary-distribution-format.rst:284 msgid "Signed wheel files" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:272 +#: ../source/specifications/binary-distribution-format.rst:286 msgid "" "Wheel files include an extended RECORD that enables digital signatures. PEP " "376's RECORD is altered to include a secure hash " @@ -12154,7 +13371,7 @@ msgid "" "files, but not RECORD which cannot contain its own hash. For example::" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:283 +#: ../source/specifications/binary-distribution-format.rst:297 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 " @@ -12162,7 +13379,7 @@ msgid "" "will fail." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:288 +#: ../source/specifications/binary-distribution-format.rst:302 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 " @@ -12170,17 +13387,17 @@ msgid "" "as the signature's JSON payload:" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:297 +#: ../source/specifications/binary-distribution-format.rst:311 msgid "(The hash value is the same format used in RECORD.)" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:299 +#: ../source/specifications/binary-distribution-format.rst:313 msgid "" "If RECORD.p7s is used, it must contain a detached S/MIME format signature of " "RECORD." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:302 +#: ../source/specifications/binary-distribution-format.rst:316 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 " @@ -12188,41 +13405,41 @@ msgid "" "only needs to establish that RECORD matches the signature." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:307 +#: ../source/specifications/binary-distribution-format.rst:321 msgid "See" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:309 +#: ../source/specifications/binary-distribution-format.rst:323 msgid "https://datatracker.ietf.org/doc/html/rfc7515" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:310 +#: ../source/specifications/binary-distribution-format.rst:324 #, fuzzy msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-json-web-signature-json-" "serialization-01" msgstr "http://self-issued.info/docs/draft-jones-jose-json-private-key.html" -#: ../source/specifications/binary-distribution-format.rst:311 +#: ../source/specifications/binary-distribution-format.rst:325 msgid "https://datatracker.ietf.org/doc/html/rfc7517" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:312 +#: ../source/specifications/binary-distribution-format.rst:326 #, fuzzy msgid "" "https://datatracker.ietf.org/doc/html/draft-jones-jose-json-private-key-01" msgstr "http://self-issued.info/docs/draft-jones-jose-json-private-key.html" -#: ../source/specifications/binary-distribution-format.rst:316 -#: ../source/specifications/platform-compatibility-tags.rst:268 +#: ../source/specifications/binary-distribution-format.rst:330 +#: ../source/specifications/platform-compatibility-tags.rst:370 msgid "FAQ" msgstr "常見問題" -#: ../source/specifications/binary-distribution-format.rst:320 +#: ../source/specifications/binary-distribution-format.rst:334 msgid "Wheel defines a .data directory. Should I put all my data there?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:322 +#: ../source/specifications/binary-distribution-format.rst:336 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 " @@ -12232,11 +13449,11 @@ msgid "" "directory." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:331 +#: ../source/specifications/binary-distribution-format.rst:345 msgid "Why does wheel include attached signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:333 +#: ../source/specifications/binary-distribution-format.rst:347 msgid "" "Attached signatures are more convenient than detached signatures because " "they travel with the archive. Since only the individual files are signed, " @@ -12245,38 +13462,38 @@ msgid "" "archive." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:341 +#: ../source/specifications/binary-distribution-format.rst:355 msgid "Why does wheel allow JWS signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:343 +#: ../source/specifications/binary-distribution-format.rst:357 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:349 +#: ../source/specifications/binary-distribution-format.rst:363 msgid "Why does wheel also allow S/MIME signatures?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:351 +#: ../source/specifications/binary-distribution-format.rst:365 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:354 +#: ../source/specifications/binary-distribution-format.rst:368 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:359 +#: ../source/specifications/binary-distribution-format.rst:373 msgid "What's the deal with \"purelib\" vs. \"platlib\"?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:361 +#: ../source/specifications/binary-distribution-format.rst:375 msgid "" "Wheel preserves the \"purelib\" vs. \"platlib\" distinction, which is " "significant on some platforms. For example, Fedora installs pure Python " @@ -12284,7 +13501,7 @@ msgid "" "packages to '/usr/lib64/pythonX.Y/site-packages'." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:366 +#: ../source/specifications/binary-distribution-format.rst:380 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: " @@ -12292,18 +13509,18 @@ msgid "" "both the \"purelib\" and \"platlib\" categories." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:371 +#: ../source/specifications/binary-distribution-format.rst:385 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:379 +#: ../source/specifications/binary-distribution-format.rst:393 msgid "Is it possible to import Python code directly from a wheel file?" msgstr "" -#: ../source/specifications/binary-distribution-format.rst:381 +#: ../source/specifications/binary-distribution-format.rst:395 msgid "" "Technically, due to the combination of supporting installation via simple " "extraction and using an archive format that is compatible with " @@ -12312,7 +13529,7 @@ msgid "" "format design, actually relying on it is generally discouraged." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:387 +#: ../source/specifications/binary-distribution-format.rst:401 msgid "" "Firstly, wheel *is* designed primarily as a distribution format, so skipping " "the installation step also means deliberately avoiding any reliance on " @@ -12323,7 +13540,7 @@ msgid "" "extensions by publishing header files in the appropriate place)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:396 +#: ../source/specifications/binary-distribution-format.rst:410 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 " @@ -12341,7 +13558,7 @@ msgid "" "components may still require the availability of an actual on-disk file." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:413 +#: ../source/specifications/binary-distribution-format.rst:427 msgid "" "Like metaclasses, monkeypatching and metapath importers, if you're not " "already sure you need to take advantage of this feature, you almost " @@ -12350,37 +13567,37 @@ msgid "" "package before accepting it as a genuine bug." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:421 -#: ../source/specifications/core-metadata.rst:917 +#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/core-metadata.rst:922 #: ../source/specifications/dependency-groups.rst:248 -#: ../source/specifications/dependency-specifiers.rst:477 -#: ../source/specifications/direct-url-data-structure.rst:397 +#: ../source/specifications/dependency-specifiers.rst:487 +#: ../source/specifications/direct-url-data-structure.rst:407 #: ../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:332 -#: ../source/specifications/pyproject-toml.rst:444 -#: ../source/specifications/recording-installed-packages.rst:252 -#: ../source/specifications/simple-repository-api.rst:988 -#: ../source/specifications/source-distribution-format.rst:144 +#: ../source/specifications/platform-compatibility-tags.rst:434 +#: ../source/specifications/pyproject-toml.rst:508 +#: ../source/specifications/recording-installed-packages.rst:268 +#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/source-distribution-format.rst:153 #: ../source/specifications/version-specifiers.rst:1266 #: ../source/specifications/virtual-environments.rst:54 msgid "History" msgstr "歷史" -#: ../source/specifications/binary-distribution-format.rst:423 +#: ../source/specifications/binary-distribution-format.rst:437 msgid "February 2013: This specification was approved through :pep:`427`." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:424 +#: ../source/specifications/binary-distribution-format.rst:438 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:426 +#: ../source/specifications/binary-distribution-format.rst:440 msgid "" "December 2024: Clarified that the ``scripts`` folder should only contain " "regular files (the expected behaviour of consuming tools when encountering " @@ -12388,11 +13605,24 @@ msgid "" "may vary between tools)." msgstr "" -#: ../source/specifications/binary-distribution-format.rst:433 +#: ../source/specifications/binary-distribution-format.rst:444 +#: ../source/specifications/recording-installed-packages.rst:278 +msgid "" +"December 2024: The :file:`.dist-info/licenses/` directory was specified " +"through :pep:`639`." +msgstr "" + +#: ../source/specifications/binary-distribution-format.rst:446 +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:451 msgid "Appendix" msgstr "附錄" -#: ../source/specifications/binary-distribution-format.rst:435 +#: ../source/specifications/binary-distribution-format.rst:453 msgid "Example urlsafe-base64-nopad implementation::" msgstr "" @@ -12502,8 +13732,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:640 #: ../source/specifications/core-metadata.rst:675 #: ../source/specifications/core-metadata.rst:685 -#: ../source/specifications/core-metadata.rst:814 -#: ../source/specifications/core-metadata.rst:911 +#: ../source/specifications/core-metadata.rst:819 +#: ../source/specifications/core-metadata.rst:916 msgid "Example::" msgstr "例子::" @@ -12610,8 +13840,8 @@ msgstr "" #: ../source/specifications/core-metadata.rst:623 #: ../source/specifications/core-metadata.rst:760 #: ../source/specifications/core-metadata.rst:790 -#: ../source/specifications/core-metadata.rst:865 -#: ../source/specifications/core-metadata.rst:887 +#: ../source/specifications/core-metadata.rst:870 +#: ../source/specifications/core-metadata.rst:892 msgid "Examples::" msgstr "例子::" @@ -13231,24 +14461,33 @@ msgstr "" msgid "Deprecated Fields" msgstr "" -#: ../source/specifications/core-metadata.rst:804 +#: ../source/specifications/core-metadata.rst:800 +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:809 msgid "Home-page" msgstr "" -#: ../source/specifications/core-metadata.rst:810 -#: ../source/specifications/core-metadata.rst:827 +#: ../source/specifications/core-metadata.rst:815 +#: ../source/specifications/core-metadata.rst:832 msgid "Per :pep:`753`, use :ref:`core-metadata-project-url` instead." msgstr "" -#: ../source/specifications/core-metadata.rst:812 +#: ../source/specifications/core-metadata.rst:817 msgid "A string containing the URL for the distribution's home page." msgstr "" -#: ../source/specifications/core-metadata.rst:821 +#: ../source/specifications/core-metadata.rst:826 msgid "Download-URL" msgstr "" -#: ../source/specifications/core-metadata.rst:829 +#: ../source/specifications/core-metadata.rst:834 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 \"``.../" @@ -13256,28 +14495,28 @@ msgid "" "tgz``\".)" msgstr "" -#: ../source/specifications/core-metadata.rst:835 +#: ../source/specifications/core-metadata.rst:840 msgid "Requires" msgstr "需要" -#: ../source/specifications/core-metadata.rst:838 +#: ../source/specifications/core-metadata.rst:843 msgid "in favour of ``Requires-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:841 +#: ../source/specifications/core-metadata.rst:846 msgid "" "Each entry contains a string describing some other module or package " "required by this package." msgstr "" -#: ../source/specifications/core-metadata.rst:844 +#: ../source/specifications/core-metadata.rst:849 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:848 +#: ../source/specifications/core-metadata.rst:853 msgid "" "A version declaration is a series of conditional operators and version " "numbers, separated by commas. Conditional operators must be one of \"<\", " @@ -13288,33 +14527,33 @@ msgid "" "version numbers are \"1.0\", \"2.3a2\", \"1.3.99\"," msgstr "" -#: ../source/specifications/core-metadata.rst:856 +#: ../source/specifications/core-metadata.rst:861 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:859 +#: ../source/specifications/core-metadata.rst:864 msgid "" "All of the following are possible requirement strings: \"rfc822\", \"zlib " "(>=1.1.4)\", \"zope\"." msgstr "" -#: ../source/specifications/core-metadata.rst:862 +#: ../source/specifications/core-metadata.rst:867 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:875 +#: ../source/specifications/core-metadata.rst:880 msgid "Provides" msgstr "提供" -#: ../source/specifications/core-metadata.rst:878 +#: ../source/specifications/core-metadata.rst:883 msgid "in favour of ``Provides-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:881 +#: ../source/specifications/core-metadata.rst:886 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 " @@ -13323,89 +14562,89 @@ msgid "" "implied if none is specified." msgstr "" -#: ../source/specifications/core-metadata.rst:897 +#: ../source/specifications/core-metadata.rst:902 msgid "Obsoletes" msgstr "" -#: ../source/specifications/core-metadata.rst:900 +#: ../source/specifications/core-metadata.rst:905 msgid "in favour of ``Obsoletes-Dist``" msgstr "" -#: ../source/specifications/core-metadata.rst:903 +#: ../source/specifications/core-metadata.rst:908 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:907 +#: ../source/specifications/core-metadata.rst:912 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:919 +#: ../source/specifications/core-metadata.rst:924 msgid "March 2001: Core metadata 1.0 was approved through :pep:`241`." msgstr "" -#: ../source/specifications/core-metadata.rst:920 +#: ../source/specifications/core-metadata.rst:925 msgid "April 2003: Core metadata 1.1 was approved through :pep:`314`:" msgstr "" -#: ../source/specifications/core-metadata.rst:921 +#: ../source/specifications/core-metadata.rst:926 msgid "February 2010: Core metadata 1.2 was approved through :pep:`345`." msgstr "" -#: ../source/specifications/core-metadata.rst:922 +#: ../source/specifications/core-metadata.rst:927 msgid "February 2018: Core metadata 2.1 was approved through :pep:`566`." msgstr "" -#: ../source/specifications/core-metadata.rst:924 +#: ../source/specifications/core-metadata.rst:929 msgid "Added ``Description-Content-Type`` and ``Provides-Extra``." msgstr "" -#: ../source/specifications/core-metadata.rst:925 +#: ../source/specifications/core-metadata.rst:930 msgid "Added canonical method for transforming metadata to JSON." msgstr "" -#: ../source/specifications/core-metadata.rst:926 +#: ../source/specifications/core-metadata.rst:931 msgid "Restricted the grammar of the ``Name`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:928 +#: ../source/specifications/core-metadata.rst:933 msgid "October 2020: Core metadata 2.2 was approved through :pep:`643`." msgstr "" -#: ../source/specifications/core-metadata.rst:930 +#: ../source/specifications/core-metadata.rst:935 msgid "Added the ``Dynamic`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:932 +#: ../source/specifications/core-metadata.rst:937 msgid "March 2022: Core metadata 2.3 was approved through :pep:`685`." msgstr "" -#: ../source/specifications/core-metadata.rst:934 +#: ../source/specifications/core-metadata.rst:939 msgid "Restricted extra names to be normalized." msgstr "" -#: ../source/specifications/core-metadata.rst:936 +#: ../source/specifications/core-metadata.rst:941 msgid "August 2024: Core metadata 2.4 was approved through :pep:`639`." msgstr "" -#: ../source/specifications/core-metadata.rst:938 +#: ../source/specifications/core-metadata.rst:943 msgid "Added the ``License-Expression`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:939 +#: ../source/specifications/core-metadata.rst:944 msgid "Added the ``License-File`` field." msgstr "" -#: ../source/specifications/core-metadata.rst:943 +#: ../source/specifications/core-metadata.rst:948 msgid "reStructuredText markup: https://docutils.sourceforge.io/" msgstr "" -#: ../source/specifications/core-metadata.rst:948 +#: ../source/specifications/core-metadata.rst:953 msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" msgstr "" @@ -13755,11 +14994,11 @@ msgid "" "The sole exception is detecting the end of a URL requirement." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:132 +#: ../source/specifications/dependency-specifiers.rst:134 msgid "Names" msgstr "名稱" -#: ../source/specifications/dependency-specifiers.rst:134 +#: ../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 " @@ -13771,11 +15010,11 @@ msgid "" "with re.IGNORECASE) is::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:146 +#: ../source/specifications/dependency-specifiers.rst:150 msgid "Extras" msgstr "額外" -#: ../source/specifications/dependency-specifiers.rst:148 +#: ../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 " @@ -13783,7 +15022,7 @@ msgid "" "dependency specification. For instance::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:155 +#: ../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 " @@ -13791,17 +15030,16 @@ msgid "" "dependencies that are listed in the \"security\" extra of requests." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:160 +#: ../source/specifications/dependency-specifiers.rst:164 msgid "" "If multiple extras are listed, all the dependencies are unioned together." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:163 -#: ../source/specifications/simple-repository-api.rst:902 +#: ../source/specifications/dependency-specifiers.rst:169 msgid "Versions" msgstr "版本" -#: ../source/specifications/dependency-specifiers.rst:165 +#: ../source/specifications/dependency-specifiers.rst:171 msgid "" "See the :ref:`Version specifier specification ` for more " "detail on both version numbers and version comparisons. Version " @@ -13812,11 +15050,11 @@ msgid "" "should not be generated, only accepted." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:174 +#: ../source/specifications/dependency-specifiers.rst:182 msgid "Environment Markers" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:176 +#: ../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 " @@ -13825,13 +15063,13 @@ msgid "" "expressed as so::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:183 +#: ../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:186 +#: ../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 " @@ -13840,7 +15078,7 @@ msgid "" "pep:`426`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:191 +#: ../source/specifications/dependency-specifiers.rst:199 msgid "" "Comparisons in marker expressions are typed by the comparison operator. The " " operators that are not in perform the same as they " @@ -13853,7 +15091,7 @@ msgid "" "will result in errors::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:204 +#: ../source/specifications/dependency-specifiers.rst:212 msgid "" "User supplied constants are always encoded as strings with either ``'`` or " "``\"`` quote marks. Note that backslash escapes are not defined, but " @@ -13863,7 +15101,7 @@ msgid "" "the runtime variables we are referencing are expected to be ASCII-only." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:211 +#: ../source/specifications/dependency-specifiers.rst:219 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 " @@ -13871,20 +15109,20 @@ msgid "" "implementation of markers if a value is not defined." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:216 +#: ../source/specifications/dependency-specifiers.rst:224 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:219 +#: ../source/specifications/dependency-specifiers.rst:227 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:223 +#: ../source/specifications/dependency-specifiers.rst:231 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 " @@ -13894,195 +15132,196 @@ msgid "" "in an error like all other unknown variables." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:233 +#: ../source/specifications/dependency-specifiers.rst:241 msgid "Marker" msgstr "標記" -#: ../source/specifications/dependency-specifiers.rst:234 +#: ../source/specifications/dependency-specifiers.rst:242 #, fuzzy msgid "Python equivalent" msgstr "Python 版本" -#: ../source/specifications/dependency-specifiers.rst:235 +#: ../source/specifications/dependency-specifiers.rst:243 msgid "Sample values" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:236 +#: ../source/specifications/dependency-specifiers.rst:244 msgid "``os_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:237 +#: ../source/specifications/dependency-specifiers.rst:245 msgid ":py:data:`os.name`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:238 +#: ../source/specifications/dependency-specifiers.rst:246 msgid "``posix``, ``java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:239 +#: ../source/specifications/dependency-specifiers.rst:247 msgid "``sys_platform``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:240 +#: ../source/specifications/dependency-specifiers.rst:248 msgid ":py:data:`sys.platform`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:241 +#: ../source/specifications/dependency-specifiers.rst:249 msgid "" "``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" is " "from Python3 and \"linux2\" from Python2)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:243 +#: ../source/specifications/dependency-specifiers.rst:251 msgid "``platform_machine``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:244 +#: ../source/specifications/dependency-specifiers.rst:252 msgid ":py:func:`platform.machine()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:245 +#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/platform-compatibility-tags.rst:256 msgid "``x86_64``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:246 +#: ../source/specifications/dependency-specifiers.rst:254 msgid "``platform_python_implementation``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:247 +#: ../source/specifications/dependency-specifiers.rst:255 msgid ":py:func:`platform.python_implementation()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:248 +#: ../source/specifications/dependency-specifiers.rst:256 msgid "``CPython``, ``Jython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:249 +#: ../source/specifications/dependency-specifiers.rst:257 msgid "``platform_release``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:250 +#: ../source/specifications/dependency-specifiers.rst:258 msgid ":py:func:`platform.release()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:251 +#: ../source/specifications/dependency-specifiers.rst:259 msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:252 +#: ../source/specifications/dependency-specifiers.rst:260 msgid "``platform_system``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:253 +#: ../source/specifications/dependency-specifiers.rst:261 msgid ":py:func:`platform.system()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:254 +#: ../source/specifications/dependency-specifiers.rst:262 msgid "``Linux``, ``Windows``, ``Java``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:255 +#: ../source/specifications/dependency-specifiers.rst:263 msgid "``platform_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:256 +#: ../source/specifications/dependency-specifiers.rst:264 msgid ":py:func:`platform.version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:257 +#: ../source/specifications/dependency-specifiers.rst:265 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:260 +#: ../source/specifications/dependency-specifiers.rst:268 msgid "``python_version``" msgstr "``python_version``" -#: ../source/specifications/dependency-specifiers.rst:261 +#: ../source/specifications/dependency-specifiers.rst:269 msgid "``'.'.join(platform.python_version_tuple()[:2])``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:262 +#: ../source/specifications/dependency-specifiers.rst:270 msgid "``3.4``, ``2.7``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:263 +#: ../source/specifications/dependency-specifiers.rst:271 msgid "``python_full_version``" msgstr "``python_full_version``" -#: ../source/specifications/dependency-specifiers.rst:264 +#: ../source/specifications/dependency-specifiers.rst:272 msgid ":py:func:`platform.python_version()`" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:265 -#: ../source/specifications/dependency-specifiers.rst:271 +#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:279 msgid "``3.4.0``, ``3.5.0b1``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:266 +#: ../source/specifications/dependency-specifiers.rst:274 msgid "``implementation_name``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:267 +#: ../source/specifications/dependency-specifiers.rst:275 msgid ":py:data:`sys.implementation.name `" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:268 +#: ../source/specifications/dependency-specifiers.rst:276 msgid "``cpython``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:269 +#: ../source/specifications/dependency-specifiers.rst:277 msgid "``implementation_version``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:270 +#: ../source/specifications/dependency-specifiers.rst:278 msgid "see definition below" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:272 +#: ../source/specifications/dependency-specifiers.rst:280 msgid "``extra``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:273 +#: ../source/specifications/dependency-specifiers.rst:281 msgid "" "An error except when defined by the context interpreting the specification." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:275 +#: ../source/specifications/dependency-specifiers.rst:283 msgid "``test``" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:277 +#: ../source/specifications/dependency-specifiers.rst:285 msgid "" "The ``implementation_version`` marker variable is derived from :py:data:`sys." "implementation.version `:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:294 +#: ../source/specifications/dependency-specifiers.rst:302 msgid "" "This environment markers section, initially defined through :pep:`508`, " "supersedes the environment markers section in :pep:`345`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:298 +#: ../source/specifications/dependency-specifiers.rst:308 msgid "Complete Grammar" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:300 +#: ../source/specifications/dependency-specifiers.rst:310 msgid "The complete parsley grammar::" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:407 +#: ../source/specifications/dependency-specifiers.rst:417 msgid "A test program - if the grammar is in a string ``grammar``:" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:479 +#: ../source/specifications/dependency-specifiers.rst:489 msgid "November 2015: This specification was approved through :pep:`508`." msgstr "" -#: ../source/specifications/dependency-specifiers.rst:480 +#: ../source/specifications/dependency-specifiers.rst:490 msgid "" "July 2019: The definition of ``python_version`` was `changed `_ from ``platform.python_version()[:3]`` to ``'.'.join(platform." @@ -14090,24 +15329,24 @@ msgid "" "Python with 2-digit major and minor versions (e.g. 3.10). [#future_versions]_" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:485 +#: ../source/specifications/dependency-specifiers.rst:495 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:493 +#: ../source/specifications/dependency-specifiers.rst:503 msgid "" "pip, the recommended installer for Python packages (http://pip.readthedocs." "org/en/stable/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:496 +#: ../source/specifications/dependency-specifiers.rst:506 msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" msgstr "" -#: ../source/specifications/dependency-specifiers.rst:499 +#: ../source/specifications/dependency-specifiers.rst:509 msgid "" "Future Python versions might be problematic with the definition of " "Environment Marker Variable ``python_version`` (https://github.com/python/" @@ -14134,7 +15373,7 @@ msgid "" msgstr "" #: ../source/specifications/direct-url.rst:21 -#: ../source/specifications/recording-installed-packages.rst:216 +#: ../source/specifications/recording-installed-packages.rst:221 msgid "" "This file MUST NOT be created when installing a distribution from an other " "type of requirement (i.e. name plus version specifier)." @@ -14287,17 +15526,17 @@ msgid "" "such as ``ssh://git@gitlab.com/user/repo``." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:53 +#: ../source/specifications/direct-url-data-structure.rst:55 msgid "VCS URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:55 +#: ../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:58 +#: ../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 " @@ -14306,7 +15545,7 @@ msgid "" "off without transformation to a checkout/download command of the VCS." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:64 +#: ../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). " @@ -14314,7 +15553,7 @@ msgid "" "when the user did not select a specific revision." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:68 +#: ../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 " @@ -14322,34 +15561,34 @@ msgid "" "``commit_id`` in order to reference an immutable version of the source code." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:76 +#: ../source/specifications/direct-url-data-structure.rst:80 msgid "Archive URLs" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:78 +#: ../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:81 +#: ../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:84 +#: ../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:88 +#: ../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:90 +#: ../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 " @@ -14358,13 +15597,13 @@ msgid "" "be included. At time of writing, ``sha256`` specifically is recommended." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:96 +#: ../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:99 +#: ../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 " @@ -14372,7 +15611,7 @@ msgid "" "compatibility for existing clients." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:103 +#: ../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 " @@ -14380,24 +15619,24 @@ msgid "" "back to ``hash`` otherwise." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:108 +#: ../source/specifications/direct-url-data-structure.rst:114 msgid "Local directories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:110 +#: ../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:113 +#: ../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:116 +#: ../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 " @@ -14405,22 +15644,22 @@ msgid "" "absolute." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:122 +#: ../source/specifications/direct-url-data-structure.rst:130 msgid "Projects in subdirectories" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:124 +#: ../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:129 +#: ../source/specifications/direct-url-data-structure.rst:139 msgid "Registered VCS" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:131 +#: ../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 " @@ -14431,65 +15670,65 @@ msgid "" "VCS SHOULD be prefixed with the VCS command name." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:141 +#: ../source/specifications/direct-url-data-structure.rst:151 msgid "Git" msgstr "Git" -#: ../source/specifications/direct-url-data-structure.rst:144 -#: ../source/specifications/direct-url-data-structure.rst:171 -#: ../source/specifications/direct-url-data-structure.rst:189 -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../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:144 +#: ../source/specifications/direct-url-data-structure.rst:154 msgid "https://git-scm.com/" msgstr "https://git-scm.com/" -#: ../source/specifications/direct-url-data-structure.rst:147 -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:210 +#: ../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:147 -#: ../source/specifications/direct-url-data-structure.rst:150 +#: ../source/specifications/direct-url-data-structure.rst:157 +#: ../source/specifications/direct-url-data-structure.rst:160 msgid "git" msgstr "git" -#: ../source/specifications/direct-url-data-structure.rst:150 -#: ../source/specifications/direct-url-data-structure.rst:177 -#: ../source/specifications/direct-url-data-structure.rst:195 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:154 -#: ../source/specifications/direct-url-data-structure.rst:180 -#: ../source/specifications/direct-url-data-structure.rst:198 -#: ../source/specifications/direct-url-data-structure.rst:217 +#: ../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:153 +#: ../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:157 -#: ../source/specifications/direct-url-data-structure.rst:183 -#: ../source/specifications/direct-url-data-structure.rst:201 -#: ../source/specifications/direct-url-data-structure.rst:222 +#: ../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:157 +#: ../source/specifications/direct-url-data-structure.rst:167 msgid "A commit hash (40 hexadecimal characters sha1)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:161 +#: ../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 " @@ -14497,106 +15736,106 @@ msgid "" "with ``refs/remotes/origin/`` after cloning corresponds to a branch." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:168 +#: ../source/specifications/direct-url-data-structure.rst:178 msgid "Mercurial" msgstr "Mercurial" -#: ../source/specifications/direct-url-data-structure.rst:171 +#: ../source/specifications/direct-url-data-structure.rst:181 msgid "https://www.mercurial-scm.org/" msgstr "https://www.mercurial-scm.org/" -#: ../source/specifications/direct-url-data-structure.rst:174 -#: ../source/specifications/direct-url-data-structure.rst:177 +#: ../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:180 +#: ../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:183 +#: ../source/specifications/direct-url-data-structure.rst:193 msgid "A changeset ID (40 hexadecimal characters)." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:186 +#: ../source/specifications/direct-url-data-structure.rst:196 msgid "Bazaar" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:189 +#: ../source/specifications/direct-url-data-structure.rst:199 msgid "https://www.breezy-vcs.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:192 -#: ../source/specifications/direct-url-data-structure.rst:195 +#: ../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:198 +#: ../source/specifications/direct-url-data-structure.rst:208 msgid "A tag name, branch name, revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:201 +#: ../source/specifications/direct-url-data-structure.rst:211 msgid "A revision id." msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:204 +#: ../source/specifications/direct-url-data-structure.rst:214 msgid "Subversion" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:207 +#: ../source/specifications/direct-url-data-structure.rst:217 msgid "https://subversion.apache.org/" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:210 -#: ../source/specifications/direct-url-data-structure.rst:213 +#: ../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:216 +#: ../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:220 +#: ../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:225 +#: ../source/specifications/direct-url-data-structure.rst:235 msgid "JSON Schema" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:227 +#: ../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:349 +#: ../source/specifications/direct-url-data-structure.rst:359 msgid "Source archive:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:362 +#: ../source/specifications/direct-url-data-structure.rst:372 msgid "Git URL with tag and commit-hash:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:375 +#: ../source/specifications/direct-url-data-structure.rst:385 msgid "Local directory:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:384 +#: ../source/specifications/direct-url-data-structure.rst:394 msgid "Local directory in editable mode:" msgstr "" -#: ../source/specifications/direct-url-data-structure.rst:399 +#: ../source/specifications/direct-url-data-structure.rst:409 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:401 +#: ../source/specifications/direct-url-data-structure.rst:411 msgid "" "January 2023: Added the ``archive_info.hashes`` key (`discussion `_)." @@ -15822,7 +17061,7 @@ msgstr "" #: ../source/specifications/inline-script-metadata.rst:82 msgid "" -"The ``[tool]`` MAY be used by any tool, script runner or otherwise, to " +"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 "" @@ -15887,7 +17126,7 @@ msgid "" msgstr "" #: ../source/specifications/inline-script-metadata.rst:205 -#: ../source/specifications/simple-repository-api.rst:829 +#: ../source/specifications/simple-repository-api.rst:935 msgid "Recommendations" msgstr "" @@ -16177,12 +17416,12 @@ msgstr "" #: ../source/specifications/platform-compatibility-tags.rst:112 msgid "" -"The current standard is the future-proof ``manylinux_x_y`` standard. It " -"defines tags of the form ``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." +"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 @@ -16240,87 +17479,288 @@ msgstr "" msgid "``manylinux2010``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:140 -msgid "``manylinux2014``" +#: ../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 +#, fuzzy +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:140 -msgid "``manylinux_x_y``" +#: ../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:142 -msgid "``>=8.1.0``" +#: ../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:142 -msgid "``>=19.0``" +#: ../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:142 -msgid "``>=19.3``" +#: ../source/specifications/platform-compatibility-tags.rst:253 +msgid "``armeabi_v7a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:142 -msgid "``>=20.3``" +#: ../source/specifications/platform-compatibility-tags.rst:254 +msgid "``arm64_v8a``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "auditwheel" +#: ../source/specifications/platform-compatibility-tags.rst:255 +msgid "``x86``" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=1.0.0``" +#: ../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:143 -msgid "``>=2.0.0``" +#: ../source/specifications/platform-compatibility-tags.rst:266 +msgid "iOS" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:143 -msgid "``>=3.0.0``" +#: ../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:143 -msgid "``>=3.3.0`` [#]_" +#: ../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:146 -msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +#: ../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:150 -#, fuzzy -msgid "``musllinux``" -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:152 +#: ../source/specifications/platform-compatibility-tags.rst:286 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 ``musllinux_x_y_arch``, supporting musl ``x.y`` " -"and higher on the architecture ``arch``." +"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:157 +#: ../source/specifications/platform-compatibility-tags.rst:289 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:" +"``arm64_iphoneos``, for physical iPhone/iPad devices. This includes every " +"iOS device manufactured since ~2015;" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:188 +#: ../source/specifications/platform-compatibility-tags.rst:291 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." +"``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:194 +#: ../source/specifications/platform-compatibility-tags.rst:296 msgid "Use" msgstr "使用" -#: ../source/specifications/platform-compatibility-tags.rst:196 +#: ../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 " @@ -16328,7 +17768,7 @@ msgid "" "built distribution's tag is ``in`` the list, then it can be installed." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:202 +#: ../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 " @@ -16339,14 +17779,14 @@ msgid "" "download built packages that advertise themselves as being pure Python." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:210 +#: ../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:214 +#: ../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 " @@ -16355,69 +17795,69 @@ msgid "" "Python):" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:220 +#: ../source/specifications/platform-compatibility-tags.rst:322 msgid "cp33-cp33m-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:221 +#: ../source/specifications/platform-compatibility-tags.rst:323 msgid "cp33-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:222 +#: ../source/specifications/platform-compatibility-tags.rst:324 msgid "cp3-abi3-linux_x86_64" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:223 +#: ../source/specifications/platform-compatibility-tags.rst:325 msgid "cp33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:224 +#: ../source/specifications/platform-compatibility-tags.rst:326 msgid "cp3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:225 +#: ../source/specifications/platform-compatibility-tags.rst:327 msgid "py33-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:226 +#: ../source/specifications/platform-compatibility-tags.rst:328 msgid "py3-none-linux_x86_64*" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:227 +#: ../source/specifications/platform-compatibility-tags.rst:329 msgid "cp33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:228 +#: ../source/specifications/platform-compatibility-tags.rst:330 msgid "cp3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:229 +#: ../source/specifications/platform-compatibility-tags.rst:331 msgid "py33-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:230 +#: ../source/specifications/platform-compatibility-tags.rst:332 msgid "py3-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:231 +#: ../source/specifications/platform-compatibility-tags.rst:333 msgid "py32-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:232 +#: ../source/specifications/platform-compatibility-tags.rst:334 msgid "py31-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:233 +#: ../source/specifications/platform-compatibility-tags.rst:335 msgid "py30-none-any" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:235 +#: ../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:239 +#: ../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 " @@ -16428,11 +17868,11 @@ msgid "" "without because that tag appears first in the list." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:248 +#: ../source/specifications/platform-compatibility-tags.rst:350 msgid "Compressed Tag Sets" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:250 +#: ../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 '.'-" @@ -16442,7 +17882,7 @@ msgid "" "simple tags is::" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:262 +#: ../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 " @@ -16450,11 +17890,11 @@ msgid "" "Python implementation e.g. \"cp33-cp31u-win64\", so use it sparingly." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:275 +#: ../source/specifications/platform-compatibility-tags.rst:377 msgid "What tags are used by default?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:271 +#: ../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`` " @@ -16462,13 +17902,13 @@ msgid "" "intended to provide cross-Python compatibility." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:285 +#: ../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:278 +#: ../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 " @@ -16479,23 +17919,23 @@ msgid "" "use the new feature, to get a compatible build." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:290 +#: ../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:288 +#: ../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:296 +#: ../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:293 +#: ../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 " @@ -16503,11 +17943,11 @@ msgid "" "paths without quoting)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:305 +#: ../source/specifications/platform-compatibility-tags.rst:407 msgid "Why not use special character rather than ``.`` or ``-``?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:299 +#: ../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 " @@ -16517,33 +17957,33 @@ msgid "" "using ``,`` rather than ``.`` to separate components in a compressed tag)." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:310 +#: ../source/specifications/platform-compatibility-tags.rst:412 msgid "Who will maintain the registry of abbreviated implementations?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:308 +#: ../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:315 +#: ../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:313 +#: ../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:321 +#: ../source/specifications/platform-compatibility-tags.rst:423 msgid "Why didn't you mention my favorite Python implementation?" msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:318 +#: ../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 " @@ -16551,13 +17991,13 @@ msgid "" "``py``." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:329 +#: ../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:324 +#: ../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 " @@ -16566,34 +18006,42 @@ msgid "" "good enough way to say \"don't know\"." msgstr "" -#: ../source/specifications/platform-compatibility-tags.rst:334 +#: ../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:336 +#: ../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:337 +#: ../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:338 +#: ../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:339 +#: ../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:341 +#: ../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/pypirc.rst:6 msgid "The :file:`.pypirc` file" msgstr "" @@ -16834,7 +18282,7 @@ msgid "``dependencies``" msgstr "" #: ../source/specifications/pyproject-toml.rst:136 -#: ../source/specifications/pyproject-toml.rst:386 +#: ../source/specifications/pyproject-toml.rst:450 msgid "``dynamic``" msgstr "" @@ -16846,82 +18294,83 @@ msgstr "" msgid "``gui-scripts``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:141 +#: ../source/specifications/pyproject-toml.rst:142 #, fuzzy msgid "``maintainers``" msgstr "維護者" -#: ../source/specifications/pyproject-toml.rst:143 +#: ../source/specifications/pyproject-toml.rst:144 msgid "``optional-dependencies``" msgstr "" -#: ../source/specifications/pyproject-toml.rst:154 -#: ../source/specifications/pyproject-toml.rst:166 -#: ../source/specifications/pyproject-toml.rst:179 -#: ../source/specifications/pyproject-toml.rst:229 +#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:240 msgid "TOML_ type: string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:155 +#: ../source/specifications/pyproject-toml.rst:156 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Name `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:158 +#: ../source/specifications/pyproject-toml.rst:159 msgid "The name of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:160 +#: ../source/specifications/pyproject-toml.rst:161 msgid "" "Tools SHOULD :ref:`normalize ` this name, as soon as it " "is read for internal consistency." msgstr "" -#: ../source/specifications/pyproject-toml.rst:167 +#: ../source/specifications/pyproject-toml.rst:168 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Version " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:170 +#: ../source/specifications/pyproject-toml.rst:171 msgid "" "The version of the project, as defined in the :ref:`Version specifier " "specification `." msgstr "" -#: ../source/specifications/pyproject-toml.rst:173 +#: ../source/specifications/pyproject-toml.rst:174 msgid "Users SHOULD prefer to specify already-normalized versions." msgstr "" -#: ../source/specifications/pyproject-toml.rst:180 +#: ../source/specifications/pyproject-toml.rst:181 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Summary " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:183 +#: ../source/specifications/pyproject-toml.rst:184 msgid "" "The summary description of the project in one line. Tools MAY error if this " "includes multiple lines." msgstr "" -#: ../source/specifications/pyproject-toml.rst:190 +#: ../source/specifications/pyproject-toml.rst:191 msgid "TOML_ type: string or table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:191 +#: ../source/specifications/pyproject-toml.rst:192 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Description " "` and :ref:`Description-Content-Type `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:195 +#: ../source/specifications/pyproject-toml.rst:196 msgid "The full description of the project (i.e. the README)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:197 +#: ../source/specifications/pyproject-toml.rst:198 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 " @@ -16935,7 +18384,7 @@ msgid "" "MUST raise an error." msgstr "" -#: ../source/specifications/pyproject-toml.rst:208 +#: ../source/specifications/pyproject-toml.rst:209 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 " @@ -16944,7 +18393,7 @@ msgid "" "raise an error if the metadata specifies both keys." msgstr "" -#: ../source/specifications/pyproject-toml.rst:215 +#: ../source/specifications/pyproject-toml.rst:216 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 " @@ -16956,41 +18405,145 @@ msgid "" "Otherwise tools MUST raise an error for unsupported content-types." msgstr "" -#: ../source/specifications/pyproject-toml.rst:230 +#: ../source/specifications/pyproject-toml.rst:231 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Python `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:233 +#: ../source/specifications/pyproject-toml.rst:234 msgid "The Python version requirements of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:239 -msgid "TOML_ type: table" +#: ../source/specifications/pyproject-toml.rst:241 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-" +"Expression `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:240 +#: ../source/specifications/pyproject-toml.rst:244 msgid "" -"Corresponding :ref:`core metadata ` field: :ref:`License " -"`" +"Text string that is a valid SPDX license expression as defined in :pep:" +"`639`. Tools SHOULD validate and perform case normalization of the " +"expression." msgstr "" -#: ../source/specifications/pyproject-toml.rst:243 -msgid "" -"The table may have one of two keys. The ``file`` key has a string value that " -"is a file path relative to ``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." +#: ../source/specifications/pyproject-toml.rst:247 +msgid "The table subkeys of the ``license`` key are deprecated." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:253 +#: ../source/specifications/pyproject-toml.rst:354 +#: ../source/specifications/pyproject-toml.rst:364 +msgid "TOML_ type: array of strings" msgstr "" #: ../source/specifications/pyproject-toml.rst:254 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License-File " +"`" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:257 +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:263 +msgid "The strings MUST contain valid glob patterns, as specified below:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:265 +msgid "" +"Alphanumeric characters, underscores (``_``), hyphens (``-``) and dots (``." +"``) MUST be matched verbatim." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:268 +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/pyproject-toml.rst:274 +msgid "" +"Path delimiters MUST be the forward slash character (``/``). Patterns are " +"relative to the directory containing :file:`pyproject.toml`, therefore the " +"leading slash character MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:278 +msgid "Parent directory indicators (``..``) MUST NOT be used." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:280 +msgid "" +"Any characters or character sequences not covered by this specification are " +"invalid. Projects MUST NOT use such values. Tools consuming this field " +"SHOULD reject invalid values with an error." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:284 +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:287 +msgid "" +"Literal paths (e.g. :file:`LICENSE`) are valid globs which means they can " +"also be defined." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:290 +msgid "Build tools:" +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:292 +msgid "" +"MUST treat each value as a glob pattern, and MUST raise an error if the " +"pattern contains invalid glob syntax." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:294 +msgid "" +"MUST include all files matched by a listed pattern in all distribution " +"archives." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:296 +msgid "" +"MUST list each matched file path under a License-File field in the Core " +"Metadata." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:298 +msgid "" +"MUST raise an error if any individual user-specified pattern does not match " +"at least one file." +msgstr "" + +#: ../source/specifications/pyproject-toml.rst:301 +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:312 msgid "TOML_ type: Array of inline tables with string keys and values" msgstr "" -#: ../source/specifications/pyproject-toml.rst:255 +#: ../source/specifications/pyproject-toml.rst:313 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Author `, :ref:`Author-email `, :ref:" @@ -16998,20 +18551,20 @@ msgid "" "metadata-maintainer-email>`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:261 +#: ../source/specifications/pyproject-toml.rst:319 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:266 +#: ../source/specifications/pyproject-toml.rst:324 msgid "" "The \"maintainers\" key is similar to \"authors\" in that its exact meaning " "is open to interpretation." msgstr "" -#: ../source/specifications/pyproject-toml.rst:269 +#: ../source/specifications/pyproject-toml.rst:327 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 " @@ -17020,92 +18573,95 @@ msgid "" "are optional, but at least one of the keys must be specified in the table." msgstr "" -#: ../source/specifications/pyproject-toml.rst:276 +#: ../source/specifications/pyproject-toml.rst:334 msgid "" "Using the data to fill in :ref:`core metadata ` is as follows:" msgstr "" -#: ../source/specifications/pyproject-toml.rst:279 +#: ../source/specifications/pyproject-toml.rst:337 msgid "" "If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as appropriate." msgstr "" -#: ../source/specifications/pyproject-toml.rst:282 +#: ../source/specifications/pyproject-toml.rst:340 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:286 +#: ../source/specifications/pyproject-toml.rst:344 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:290 +#: ../source/specifications/pyproject-toml.rst:348 msgid "Multiple values should be separated by commas." msgstr "" -#: ../source/specifications/pyproject-toml.rst:296 -#: ../source/specifications/pyproject-toml.rst:306 -msgid "TOML_ type: array of strings" -msgstr "" - -#: ../source/specifications/pyproject-toml.rst:297 +#: ../source/specifications/pyproject-toml.rst:355 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Keywords " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:300 +#: ../source/specifications/pyproject-toml.rst:358 msgid "The keywords for the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:307 +#: ../source/specifications/pyproject-toml.rst:365 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Classifier " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:310 +#: ../source/specifications/pyproject-toml.rst:368 msgid "Trove classifiers which apply to the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:316 +#: ../source/specifications/pyproject-toml.rst:370 +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:380 msgid "TOML_ type: table with keys and values of strings" msgstr "" -#: ../source/specifications/pyproject-toml.rst:317 +#: ../source/specifications/pyproject-toml.rst:381 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Project-URL " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:320 +#: ../source/specifications/pyproject-toml.rst:384 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:326 +#: ../source/specifications/pyproject-toml.rst:390 msgid "Entry points" msgstr "" -#: ../source/specifications/pyproject-toml.rst:328 +#: ../source/specifications/pyproject-toml.rst:392 msgid "" "TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " "``[project.entry-points]``)" msgstr "" -#: ../source/specifications/pyproject-toml.rst:330 +#: ../source/specifications/pyproject-toml.rst:394 msgid ":ref:`Entry points specification `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:332 +#: ../source/specifications/pyproject-toml.rst:396 msgid "" "There are three tables related to entry points. The ``[project.scripts]`` " "table corresponds to the ``console_scripts`` group in the :ref:`entry points " @@ -17113,14 +18669,14 @@ msgid "" "point and the value is the object reference." msgstr "" -#: ../source/specifications/pyproject-toml.rst:338 +#: ../source/specifications/pyproject-toml.rst:402 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:342 +#: ../source/specifications/pyproject-toml.rst:406 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 " @@ -17128,7 +18684,7 @@ msgid "" "instead keep the entry point groups to only one level deep." msgstr "" -#: ../source/specifications/pyproject-toml.rst:348 +#: ../source/specifications/pyproject-toml.rst:412 msgid "" "Build back-ends MUST raise an error if the metadata defines a ``[project." "entry-points.console_scripts]`` or ``[project.entry-points.gui_scripts]`` " @@ -17136,24 +18692,24 @@ msgid "" "``[project.gui-scripts]``, respectively." msgstr "" -#: ../source/specifications/pyproject-toml.rst:358 +#: ../source/specifications/pyproject-toml.rst:422 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:361 +#: ../source/specifications/pyproject-toml.rst:425 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Requires-" "Dist ` and :ref:`Provides-Extra `" msgstr "" -#: ../source/specifications/pyproject-toml.rst:365 +#: ../source/specifications/pyproject-toml.rst:429 msgid "The (optional) dependencies of the project." msgstr "" -#: ../source/specifications/pyproject-toml.rst:367 +#: ../source/specifications/pyproject-toml.rst:431 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 " @@ -17161,7 +18717,7 @@ msgid "" "` entry." msgstr "" -#: ../source/specifications/pyproject-toml.rst:372 +#: ../source/specifications/pyproject-toml.rst:436 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 " @@ -17172,17 +18728,17 @@ msgid "" "extra>` metadata." msgstr "" -#: ../source/specifications/pyproject-toml.rst:388 +#: ../source/specifications/pyproject-toml.rst:452 msgid "TOML_ type: array of string" msgstr "" -#: ../source/specifications/pyproject-toml.rst:389 +#: ../source/specifications/pyproject-toml.rst:453 msgid "" "Corresponding :ref:`core metadata ` field: :ref:`Dynamic " "`" msgstr "" -#: ../source/specifications/pyproject-toml.rst:392 +#: ../source/specifications/pyproject-toml.rst:456 msgid "" "Specifies which keys listed by this PEP were intentionally unspecified so " "another tool can/will provide such metadata dynamically. This clearly " @@ -17190,19 +18746,19 @@ msgid "" "unspecified compared to being provided via tooling later on." msgstr "" -#: ../source/specifications/pyproject-toml.rst:398 +#: ../source/specifications/pyproject-toml.rst:462 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:400 +#: ../source/specifications/pyproject-toml.rst:464 msgid "" "A build back-end MUST raise an error if the metadata specifies ``name`` in " "``dynamic``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:402 +#: ../source/specifications/pyproject-toml.rst:466 msgid "" "If the :ref:`core metadata ` specification lists a field as " "\"Required\", then the metadata MUST specify the key statically or list it " @@ -17211,20 +18767,20 @@ msgid "" "``[project]`` table)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:407 +#: ../source/specifications/pyproject-toml.rst:471 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:411 +#: ../source/specifications/pyproject-toml.rst:475 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:413 +#: ../source/specifications/pyproject-toml.rst:477 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. " @@ -17232,18 +18788,18 @@ msgid "" "must opt into the filling in)." msgstr "" -#: ../source/specifications/pyproject-toml.rst:417 +#: ../source/specifications/pyproject-toml.rst:481 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:427 +#: ../source/specifications/pyproject-toml.rst:491 msgid "Arbitrary tool configuration: the ``[tool]`` table" msgstr "" -#: ../source/specifications/pyproject-toml.rst:429 +#: ../source/specifications/pyproject-toml.rst:493 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 " @@ -17251,7 +18807,7 @@ msgid "" "pypi/flit>`_ tool would store its configuration in ``[tool.flit]``." msgstr "" -#: ../source/specifications/pyproject-toml.rst:435 +#: ../source/specifications/pyproject-toml.rst:499 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 " @@ -17259,19 +18815,25 @@ msgid "" "if, and only if, they own the entry for ``$NAME`` in the Cheeseshop/PyPI." msgstr "" -#: ../source/specifications/pyproject-toml.rst:446 +#: ../source/specifications/pyproject-toml.rst:510 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:450 +#: ../source/specifications/pyproject-toml.rst:514 msgid "" "November 2020: The specification of the ``[project]`` table was approved " "through :pep:`621`." msgstr "" +#: ../source/specifications/pyproject-toml.rst:517 +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/recording-installed-packages.rst:7 msgid "Recording installed projects" msgstr "" @@ -17369,7 +18931,17 @@ msgid "" "present." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:71 +#: ../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This :file:`.dist-info/` directory may contain the following directory, " +"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:76 msgid "" "The :ref:`binary-distribution-format` specification describes additional " "files that may appear in the ``.dist-info`` directory of a :term:`Wheel`. " @@ -17377,7 +18949,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:76 +#: ../source/specifications/recording-installed-packages.rst:81 msgid "" "The previous versions of this specification also specified a ``REQUESTED`` " "file. This file is now considered a tool-specific extension, but may be " @@ -17385,58 +18957,58 @@ msgid "" "peps/pep-0376/#requested>`_ for its original meaning." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:83 +#: ../source/specifications/recording-installed-packages.rst:88 msgid "The METADATA file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:85 +#: ../source/specifications/recording-installed-packages.rst:90 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:88 +#: ../source/specifications/recording-installed-packages.rst:93 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:94 +#: ../source/specifications/recording-installed-packages.rst:99 msgid "The RECORD file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:96 +#: ../source/specifications/recording-installed-packages.rst:101 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:99 +#: ../source/specifications/recording-installed-packages.rst:104 msgid "" "The CSV dialect must be readable with the default ``reader`` of Python's " "``csv`` module:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:102 +#: ../source/specifications/recording-installed-packages.rst:107 msgid "field delimiter: ``,`` (comma)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:103 +#: ../source/specifications/recording-installed-packages.rst:108 msgid "quoting char: ``\"`` (straight double quote)," msgstr "" -#: ../source/specifications/recording-installed-packages.rst:104 +#: ../source/specifications/recording-installed-packages.rst:109 msgid "line terminator: either ``\\r\\n`` or ``\\n``." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:106 +#: ../source/specifications/recording-installed-packages.rst:111 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:109 +#: ../source/specifications/recording-installed-packages.rst:114 msgid "" "The *path* may be either absolute, or relative to the directory containing " "the ``.dist-info`` directory (commonly, the ``site-packages`` directory). On " @@ -17444,7 +19016,7 @@ msgid "" "`` or ``\\``)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:114 +#: ../source/specifications/recording-installed-packages.rst:119 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 " @@ -17453,13 +19025,13 @@ msgid "" "urlsafe_b64encode()>` with trailing ``=`` removed)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:119 +#: ../source/specifications/recording-installed-packages.rst:124 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:122 +#: ../source/specifications/recording-installed-packages.rst:127 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 " @@ -17468,7 +19040,7 @@ msgid "" "project." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:128 +#: ../source/specifications/recording-installed-packages.rst:133 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 " @@ -17477,18 +19049,18 @@ msgid "" "should not be listed." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:135 +#: ../source/specifications/recording-installed-packages.rst:140 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:140 +#: ../source/specifications/recording-installed-packages.rst:145 msgid "Here is an example snippet of a possible ``RECORD`` file::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:159 +#: ../source/specifications/recording-installed-packages.rst:164 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 " @@ -17496,7 +19068,7 @@ msgid "" "package managers in Linux distros.)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:166 +#: ../source/specifications/recording-installed-packages.rst:171 msgid "" "It is *strongly discouraged* for an installed package to modify itself (e." "g., store cache files under its namespace in ``site-packages``). Changes " @@ -17506,11 +19078,11 @@ msgid "" "unlisted files in place (possibly resulting in a zombie namespace package)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:175 +#: ../source/specifications/recording-installed-packages.rst:180 msgid "The INSTALLER file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:177 +#: ../source/specifications/recording-installed-packages.rst:182 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, " @@ -17518,15 +19090,15 @@ msgid "" "a printable ASCII string." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:183 +#: ../source/specifications/recording-installed-packages.rst:188 msgid "The file can be terminated by zero or more ASCII whitespace characters." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:185 +#: ../source/specifications/recording-installed-packages.rst:190 msgid "Here are examples of two possible ``INSTALLER`` files::" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:193 +#: ../source/specifications/recording-installed-packages.rst:198 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 " @@ -17534,11 +19106,11 @@ msgid "" "uninstallation." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:200 +#: ../source/specifications/recording-installed-packages.rst:205 msgid "The entry_points.txt file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:202 +#: ../source/specifications/recording-installed-packages.rst:207 msgid "" "This file MAY be created by installers to indicate when packages contain " "components intended for discovery and use by other code, including console " @@ -17546,29 +19118,43 @@ msgid "" "execution." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:207 +#: ../source/specifications/recording-installed-packages.rst:212 msgid "Its detailed specification is at :ref:`entry-points`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:211 +#: ../source/specifications/recording-installed-packages.rst:216 msgid "The direct_url.json file" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:213 +#: ../source/specifications/recording-installed-packages.rst:218 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:219 +#: ../source/specifications/recording-installed-packages.rst:224 msgid "Its detailed specification is at :ref:`direct-url`." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:223 +#: ../source/specifications/recording-installed-packages.rst:228 +msgid "The :file:`licenses/` subdirectory" +msgstr "" + +#: ../source/specifications/recording-installed-packages.rst:230 +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:239 msgid "Intentionally preventing changes to installed packages" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:225 +#: ../source/specifications/recording-installed-packages.rst:241 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 " @@ -17577,11 +19163,11 @@ msgid "" "so may cause compatibility problems with the wider environment." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:231 +#: ../source/specifications/recording-installed-packages.rst:247 msgid "To achieve this, affected tools should take the following steps:" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:233 +#: ../source/specifications/recording-installed-packages.rst:249 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 " @@ -17589,14 +19175,14 @@ msgid "" "package contents are tracked and managed via other means)" msgstr "" -#: ../source/specifications/recording-installed-packages.rst:237 +#: ../source/specifications/recording-installed-packages.rst:253 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:241 +#: ../source/specifications/recording-installed-packages.rst:257 msgid "" "Python runtime providers may also prevent inadvertent modification of " "platform provided packages by modifying the default Python package " @@ -17605,28 +19191,28 @@ msgid "" "Python import path)." msgstr "" -#: ../source/specifications/recording-installed-packages.rst:246 +#: ../source/specifications/recording-installed-packages.rst:262 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:254 +#: ../source/specifications/recording-installed-packages.rst:270 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:257 +#: ../source/specifications/recording-installed-packages.rst:273 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:260 +#: ../source/specifications/recording-installed-packages.rst:276 msgid "" "September 2020: Various amendments and clarifications were approved through :" "pep:`627`." @@ -17654,15 +19240,23 @@ 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: HTML and JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:15 +#: ../source/specifications/simple-repository-api.rst:20 msgid "Base HTML API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:17 +#: ../source/specifications/simple-repository-api.rst:22 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 " @@ -17670,23 +19264,23 @@ msgid "" "pypi.org/simple/``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:22 +#: ../source/specifications/simple-repository-api.rst:27 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:27 +#: ../source/specifications/simple-repository-api.rst:32 msgid "" "Within a repository, the root URL (``/`` for this spec which represents the " "base URL) **MUST** be a valid HTML5 page with a single anchor element per " "project in the repository. The text of the anchor tag **MUST** be the name " "of the project and the href attribute **MUST** link to the URL for that " -"particular project. As an example::" +"particular project. As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:41 +#: ../source/specifications/simple-repository-api.rst:48 msgid "" "Below the root URL is another URL for each individual project contained " "within a repository. The format of this URL is ``//`` where the " @@ -17702,44 +19296,44 @@ msgid "" "encoded digest." msgstr "" -#: ../source/specifications/simple-repository-api.rst:53 +#: ../source/specifications/simple-repository-api.rst:60 msgid "" "In addition to the above, the following constraints are placed on the API:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:55 +#: ../source/specifications/simple-repository-api.rst:62 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:59 +#: ../source/specifications/simple-repository-api.rst:66 msgid "" "URLs may be either absolute or relative as long as they point to the correct " "location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:62 +#: ../source/specifications/simple-repository-api.rst:69 msgid "" "There are no constraints on where the files must be hosted relative to the " "repository." msgstr "" -#: ../source/specifications/simple-repository-api.rst:65 +#: ../source/specifications/simple-repository-api.rst:72 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:68 +#: ../source/specifications/simple-repository-api.rst:75 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:73 +#: ../source/specifications/simple-repository-api.rst:80 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 " @@ -17747,7 +19341,7 @@ msgid "" "``sha384``, ``sha512``). The current recommendation is to use ``sha256``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:78 +#: ../source/specifications/simple-repository-api.rst:85 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. " @@ -17756,7 +19350,41 @@ msgid "" "HolyGrail-1.0.tar.gz.asc``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:84 +#: ../source/specifications/simple-repository-api.rst:91 +msgid "" +"A repository **MAY** include a ``data-core-metadata`` attribute on a file " +"link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:94 +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:100 +msgid "" +"A repository **MAY** include a ``data-dist-info-metadata`` attribute on a " +"file link." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:103 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``data-core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:108 +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:111 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 " @@ -17764,22 +19392,22 @@ msgid "" "every link." msgstr "" -#: ../source/specifications/simple-repository-api.rst:88 +#: ../source/specifications/simple-repository-api.rst:115 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::" +"doesn't satisfy the requirement. For example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:96 +#: ../source/specifications/simple-repository-api.rst:125 msgid "" "In the attribute value, < and > have to be HTML encoded as ``<`` and " "``>``, respectively." msgstr "" -#: ../source/specifications/simple-repository-api.rst:99 +#: ../source/specifications/simple-repository-api.rst:128 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 " @@ -17788,18 +19416,22 @@ msgid "" "prefer-secure-origins-for-powerful-new-features/>`_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:106 +#: ../source/specifications/simple-repository-api.rst:135 +msgid "The ``data-provenance`` attribute was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:139 msgid "" "The format of the linked provenance is defined in :ref:`index-hosted-" "attestations`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:109 +#: ../source/specifications/simple-repository-api.rst:142 #, fuzzy msgid "Normalized Names" msgstr "翻譯" -#: ../source/specifications/simple-repository-api.rst:111 +#: ../source/specifications/simple-repository-api.rst:144 msgid "" "This spec references the concept of a \"normalized\" project name. As per :" "ref:`the name normalization specification ` the only " @@ -17809,11 +19441,11 @@ msgid "" "implemented in Python with the ``re`` module::" msgstr "" -#: ../source/specifications/simple-repository-api.rst:126 +#: ../source/specifications/simple-repository-api.rst:159 msgid "Adding \"Yank\" Support to the Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:128 +#: ../source/specifications/simple-repository-api.rst:161 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 " @@ -17823,7 +19455,7 @@ msgid "" "under specific scenarios." msgstr "" -#: ../source/specifications/simple-repository-api.rst:135 +#: ../source/specifications/simple-repository-api.rst:168 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 " @@ -17831,7 +19463,7 @@ msgid "" "users." msgstr "" -#: ../source/specifications/simple-repository-api.rst:140 +#: ../source/specifications/simple-repository-api.rst:173 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** " @@ -17839,12 +19471,12 @@ msgid "" "again)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:147 +#: ../source/specifications/simple-repository-api.rst:180 #, fuzzy msgid "Installers" msgstr "安裝軟體套件" -#: ../source/specifications/simple-repository-api.rst:149 +#: ../source/specifications/simple-repository-api.rst:182 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 " @@ -17854,7 +19486,7 @@ msgid "" "been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:156 +#: ../source/specifications/simple-repository-api.rst:189 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 " @@ -17864,14 +19496,14 @@ msgid "" "files." msgstr "" -#: ../source/specifications/simple-repository-api.rst:163 +#: ../source/specifications/simple-repository-api.rst:196 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/simple-repository-api.rst:167 +#: ../source/specifications/simple-repository-api.rst:200 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 ``==`` " @@ -17881,7 +19513,7 @@ msgid "" "versions, zero padding, etc." msgstr "" -#: ../source/specifications/simple-repository-api.rst:174 +#: ../source/specifications/simple-repository-api.rst:207 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 " @@ -17889,7 +19521,7 @@ msgid "" "creating or updating a lock file from some input file or command." msgstr "" -#: ../source/specifications/simple-repository-api.rst:180 +#: ../source/specifications/simple-repository-api.rst:213 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 " @@ -17898,71 +19530,71 @@ msgid "" "specific feedback to the user about why that file had been yanked." msgstr "" -#: ../source/specifications/simple-repository-api.rst:188 +#: ../source/specifications/simple-repository-api.rst:221 msgid "Mirrors" msgstr "" -#: ../source/specifications/simple-repository-api.rst:190 +#: ../source/specifications/simple-repository-api.rst:223 msgid "Mirrors can generally treat yanked files one of two ways:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:192 +#: ../source/specifications/simple-repository-api.rst:225 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/simple-repository-api.rst:195 +#: ../source/specifications/simple-repository-api.rst:228 msgid "" "They may choose to include yanked files, and additionally mirror the ``data-" "yanked`` attribute as well." msgstr "" -#: ../source/specifications/simple-repository-api.rst:198 +#: ../source/specifications/simple-repository-api.rst:231 msgid "" "Mirrors **MUST NOT** mirror a yanked file without also mirroring the ``data-" "yanked`` attribute for it." msgstr "" -#: ../source/specifications/simple-repository-api.rst:204 +#: ../source/specifications/simple-repository-api.rst:237 msgid "Versioning PyPI's Simple API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:206 +#: ../source/specifications/simple-repository-api.rst:239 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 " +"``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:214 -msgid "This would end up looking like::" +#: ../source/specifications/simple-repository-api.rst:247 +msgid "This would end up looking like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:218 +#: ../source/specifications/simple-repository-api.rst:253 msgid "When interpreting the repository version:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:220 +#: ../source/specifications/simple-repository-api.rst:255 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:223 +#: ../source/specifications/simple-repository-api.rst:258 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:227 +#: ../source/specifications/simple-repository-api.rst:262 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 " @@ -17971,7 +19603,7 @@ msgid "" "features." msgstr "" -#: ../source/specifications/simple-repository-api.rst:233 +#: ../source/specifications/simple-repository-api.rst:268 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 " @@ -17981,50 +19613,73 @@ msgid "" "set to a version >= 2)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:240 +#: ../source/specifications/simple-repository-api.rst:276 +msgid "API Version History" +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:278 msgid "" -"This spec sets the current API version to \"1.0\", and expects that future " -"specs that further evolve the simple API will increment the minor version " -"number." +"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:246 -#: ../source/specifications/simple-repository-api.rst:971 +#: ../source/specifications/simple-repository-api.rst:282 +msgid "API version 1.0: Initial version of the API, declared with :pep:`629`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:283 +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:285 +msgid "" +"API version 1.2: Added repository \"tracks\" metadata, declared with :pep:" +"`708`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:286 +msgid "API version 1.3: Added provenance metadata, declared with :pep:`740`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:289 #, fuzzy #| msgid "Contents" msgid "Clients" msgstr "内容" -#: ../source/specifications/simple-repository-api.rst:248 +#: ../source/specifications/simple-repository-api.rst:291 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:252 +#: ../source/specifications/simple-repository-api.rst:295 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:255 +#: ../source/specifications/simple-repository-api.rst:298 msgid "" "When encountering a minor version greater than expected, clients **SHOULD** " "warn users with an appropriate message." msgstr "" -#: ../source/specifications/simple-repository-api.rst:258 +#: ../source/specifications/simple-repository-api.rst:301 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:264 +#: ../source/specifications/simple-repository-api.rst:307 msgid "Serve Distribution Metadata in the Simple Repository API" msgstr "" -#: ../source/specifications/simple-repository-api.rst:266 +#: ../source/specifications/simple-repository-api.rst:309 msgid "" "In a simple repository's project page, each anchor tag pointing to a " "distribution **MAY** have a ``data-dist-info-metadata`` attribute. The " @@ -18033,7 +19688,7 @@ msgid "" "when the distribution is processed and/or installed." msgstr "" -#: ../source/specifications/simple-repository-api.rst:272 +#: ../source/specifications/simple-repository-api.rst:315 msgid "" "If a ``data-dist-info-metadata`` attribute is present, the repository " "**MUST** serve the distribution's Core Metadata file alongside the " @@ -18045,7 +19700,7 @@ msgid "" "GPG signature file's location." msgstr "" -#: ../source/specifications/simple-repository-api.rst:281 +#: ../source/specifications/simple-repository-api.rst:324 msgid "" "The repository **SHOULD** provide the hash of the Core Metadata file as the " "``data-dist-info-metadata`` attribute's value using the syntax " @@ -18055,18 +19710,18 @@ msgid "" "unavailable." msgstr "" -#: ../source/specifications/simple-repository-api.rst:289 +#: ../source/specifications/simple-repository-api.rst:332 msgid "Backwards Compatibility" msgstr "" -#: ../source/specifications/simple-repository-api.rst:291 +#: ../source/specifications/simple-repository-api.rst:334 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:295 +#: ../source/specifications/simple-repository-api.rst:338 msgid "" "Older tools not supporting the new ``data-dist-info-metadata`` attribute are " "expected to ignore the attribute and maintain their current behaviour of " @@ -18074,11 +19729,11 @@ msgid "" "prior ``data-`` attribute additions expect existing tools to operate." msgstr "" -#: ../source/specifications/simple-repository-api.rst:304 +#: ../source/specifications/simple-repository-api.rst:347 msgid "JSON-based Simple API for Python Package Indexes" msgstr "" -#: ../source/specifications/simple-repository-api.rst:306 +#: ../source/specifications/simple-repository-api.rst:349 msgid "" "To enable response parsing with only the standard library, this spec " "specifies that all responses (besides the files themselves, and the HTML " @@ -18086,7 +19741,7 @@ msgid "" "base>`) should be serialized using `JSON `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:311 +#: ../source/specifications/simple-repository-api.rst:354 msgid "" "To enable zero configuration discovery and to minimize the amount of " "additional HTTP requests, this spec extends :ref:`the base HTML API " @@ -18096,7 +19751,7 @@ msgid "" "format to serve, i.e. either HTML or JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:321 +#: ../source/specifications/simple-repository-api.rst:364 msgid "" "Versioning will adhere to :ref:`the API versioning specification ` format (``Major.Minor``), which has defined the " @@ -18106,7 +19761,7 @@ msgid "" "``1.0`` version, and instead just describes how to serialize that into JSON." msgstr "" -#: ../source/specifications/simple-repository-api.rst:328 +#: ../source/specifications/simple-repository-api.rst:371 msgid "" "Similar to :ref:`the API versioning specification `, the major version number **MUST** be incremented if any " @@ -18114,28 +19769,28 @@ msgid "" "existing clients to meaningfully understand the format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:334 +#: ../source/specifications/simple-repository-api.rst:377 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:338 +#: ../source/specifications/simple-repository-api.rst:381 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:342 +#: ../source/specifications/simple-repository-api.rst:385 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:346 +#: ../source/specifications/simple-repository-api.rst:389 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 " @@ -18144,38 +19799,38 @@ msgid "" "whether or not that feature is present at all." msgstr "" -#: ../source/specifications/simple-repository-api.rst:352 +#: ../source/specifications/simple-repository-api.rst:395 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:360 +#: ../source/specifications/simple-repository-api.rst:403 #, fuzzy msgid "JSON Serialization" msgstr "翻譯" -#: ../source/specifications/simple-repository-api.rst:362 +#: ../source/specifications/simple-repository-api.rst:405 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:366 +#: ../source/specifications/simple-repository-api.rst:409 msgid "" "The following constraints apply to all JSON serialized responses described " "in this spec:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:369 +#: ../source/specifications/simple-repository-api.rst:412 msgid "" "All JSON responses will *always* be a JSON object rather than an array or " "other type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:372 +#: ../source/specifications/simple-repository-api.rst:415 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 " @@ -18183,19 +19838,19 @@ msgid "" "if it were HTML." msgstr "" -#: ../source/specifications/simple-repository-api.rst:377 +#: ../source/specifications/simple-repository-api.rst:420 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:380 +#: ../source/specifications/simple-repository-api.rst:423 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:383 +#: ../source/specifications/simple-repository-api.rst:426 msgid "" "All JSON responses will have a ``meta.api-version`` key, which will be a " "string that contains the :ref:`API versioning specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:389 +#: ../source/specifications/simple-repository-api.rst:432 msgid "" "All requirements of :ref:`the base HTML API specification ` that are not HTML specific still apply." msgstr "" -#: ../source/specifications/simple-repository-api.rst:394 +#: ../source/specifications/simple-repository-api.rst:435 +msgid "" +"Keys (at any level) with a leading underscore are reserved as private for " +"index server use. No future standard will assign a meaning to any such key." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:439 #, fuzzy #| msgid "Project name" msgid "Project List" msgstr "專案名稱" -#: ../source/specifications/simple-repository-api.rst:396 +#: ../source/specifications/simple-repository-api.rst:441 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:399 +#: ../source/specifications/simple-repository-api.rst:444 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:400 -#: ../source/specifications/simple-repository-api.rst:449 +#: ../source/specifications/simple-repository-api.rst:445 +#: ../source/specifications/simple-repository-api.rst:494 msgid "" "``meta``: The general response metadata as `described earlier `__." msgstr "" -#: ../source/specifications/simple-repository-api.rst:402 -#: ../source/specifications/simple-repository-api.rst:512 +#: ../source/specifications/simple-repository-api.rst:447 +#: ../source/specifications/simple-repository-api.rst:615 msgid "As an example:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:419 +#: ../source/specifications/simple-repository-api.rst:464 msgid "" "The ``name`` field is the same as the one from :ref:`the base HTML API " "specification `, which does not specify whether " @@ -18250,7 +19911,7 @@ msgid "" "implementation detail of the repository in question." msgstr "" -#: ../source/specifications/simple-repository-api.rst:429 +#: ../source/specifications/simple-repository-api.rst:474 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 /`` where the ```` is " "replaced by the :ref:`the base HTML API specification `, 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:517 +msgid "The ``versions`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:519 msgid "Each individual file dictionary has the following keys:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:453 +#: ../source/specifications/simple-repository-api.rst:521 msgid "``filename``: The filename that is being represented." msgstr "" -#: ../source/specifications/simple-repository-api.rst:454 +#: ../source/specifications/simple-repository-api.rst:522 msgid "``url``: The URL that the file can be fetched from." msgstr "" -#: ../source/specifications/simple-repository-api.rst:455 +#: ../source/specifications/simple-repository-api.rst:523 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 " @@ -18309,14 +19999,14 @@ msgid "" "to be lowercase." msgstr "" -#: ../source/specifications/simple-repository-api.rst:460 +#: ../source/specifications/simple-repository-api.rst:528 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:464 +#: ../source/specifications/simple-repository-api.rst:532 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 " @@ -18326,7 +20016,7 @@ msgid "" "specifically is recommended." msgstr "" -#: ../source/specifications/simple-repository-api.rst:469 +#: ../source/specifications/simple-repository-api.rst:537 msgid "" "``requires-python``: An **optional** key that exposes the :ref:`core-" "metadata-requires-python` metadata field. Where this is present, installer " @@ -18334,44 +20024,62 @@ msgid "" "that doesn't satisfy the requirement." msgstr "" -#: ../source/specifications/simple-repository-api.rst:475 +#: ../source/specifications/simple-repository-api.rst:543 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:478 +#: ../source/specifications/simple-repository-api.rst:546 msgid "" -"``dist-info-metadata``: An **optional** key that indicates that metadata for " -"this file is available, via the same location as specified in :ref:`the API " +"``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:486 +#: ../source/specifications/simple-repository-api.rst:554 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:490 +#: ../source/specifications/simple-repository-api.rst:558 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:494 +#: ../source/specifications/simple-repository-api.rst:562 msgid "" "It is recommended that servers make the hashes of the metadata file " "available if possible." msgstr "" -#: ../source/specifications/simple-repository-api.rst:496 +#: ../source/specifications/simple-repository-api.rst:565 +msgid "" +"``dist-info-metadata``: An **optional**, deprecated alias for ``core-" +"metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:567 +msgid "" +"Index clients **MAY** consume this key if present, as a legacy fallback for " +"``core-metadata``." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:572 +msgid "" +"``dist-info-metadata`` was standardized with :pep:`658` and renamed to " +"``core-metadata`` with :pep:`714`." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:575 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 " @@ -18380,7 +20088,7 @@ msgid "" "the signature may or may not exist." msgstr "" -#: ../source/specifications/simple-repository-api.rst:501 +#: ../source/specifications/simple-repository-api.rst:581 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 " @@ -18391,7 +20099,37 @@ msgid "" "api-yank>`." msgstr "" -#: ../source/specifications/simple-repository-api.rst:507 +#: ../source/specifications/simple-repository-api.rst:587 +msgid "" +"``size``: A **mandatory** key. It **MUST** contain an integer which is the " +"file size in bytes." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:591 +msgid "The ``size`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:593 +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:597 +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:604 +msgid "The ``upload-time`` key was added with API version 1.1." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:606 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 " @@ -18399,7 +20137,11 @@ msgid "" "ref:`base HTML API specification `." msgstr "" -#: ../source/specifications/simple-repository-api.rst:543 +#: ../source/specifications/simple-repository-api.rst:613 +msgid "The ``provenance`` field was added with API version 1.3." +msgstr "" + +#: ../source/specifications/simple-repository-api.rst:649 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 ` API responses to use the " @@ -18464,12 +20206,12 @@ msgid "" "alias for the ``application/vnd.pypi.simple.v1+html`` content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:586 +#: ../source/specifications/simple-repository-api.rst:692 #, fuzzy msgid "Version + Format Selection" msgstr "翻譯" -#: ../source/specifications/simple-repository-api.rst:588 +#: ../source/specifications/simple-repository-api.rst:694 msgid "" "Now that there is multiple possible serializations, we need a mechanism to " "allow clients to indicate what serialization formats they're able to " @@ -18478,65 +20220,65 @@ msgid "" "expecting the previous API version." msgstr "" -#: ../source/specifications/simple-repository-api.rst:593 +#: ../source/specifications/simple-repository-api.rst:699 msgid "" "To enable this, this spec standardizes on the use of HTTP's `Server-Driven " "Content Negotiation `_." msgstr "" -#: ../source/specifications/simple-repository-api.rst:596 +#: ../source/specifications/simple-repository-api.rst:702 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:599 +#: ../source/specifications/simple-repository-api.rst:705 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:601 +#: ../source/specifications/simple-repository-api.rst:707 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:604 +#: ../source/specifications/simple-repository-api.rst:710 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:608 +#: ../source/specifications/simple-repository-api.rst:714 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:610 +#: ../source/specifications/simple-repository-api.rst:716 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:613 +#: ../source/specifications/simple-repository-api.rst:719 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:615 +#: ../source/specifications/simple-repository-api.rst:721 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:618 +#: ../source/specifications/simple-repository-api.rst:724 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** " @@ -18544,7 +20286,7 @@ msgid "" "the most sense for that client." msgstr "" -#: ../source/specifications/simple-repository-api.rst:623 +#: ../source/specifications/simple-repository-api.rst:729 msgid "" "However, as there is no standard format for how a ``300 Multiple Choices`` " "response can be interpreted, this spec highly discourages servers from " @@ -18555,7 +20297,7 @@ msgid "" "error." msgstr "" -#: ../source/specifications/simple-repository-api.rst:630 +#: ../source/specifications/simple-repository-api.rst:736 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 " @@ -18564,33 +20306,33 @@ msgid "" "have a ``Content-Type`` of ``application/vnd.pypi.simple.v1+json``)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:637 +#: ../source/specifications/simple-repository-api.rst:743 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:641 +#: ../source/specifications/simple-repository-api.rst:747 msgid "``$type/$subtype``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:642 +#: ../source/specifications/simple-repository-api.rst:748 msgid "``$type/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:643 +#: ../source/specifications/simple-repository-api.rst:749 msgid "``*/*``" msgstr "" -#: ../source/specifications/simple-repository-api.rst:645 +#: ../source/specifications/simple-repository-api.rst:751 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:649 +#: ../source/specifications/simple-repository-api.rst:755 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 " @@ -18600,7 +20342,7 @@ msgid "" "Quality_values>`_ syntax." msgstr "" -#: ../source/specifications/simple-repository-api.rst:656 +#: ../source/specifications/simple-repository-api.rst:762 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`` " @@ -18610,7 +20352,7 @@ msgid "" "quality of ``1``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:662 +#: ../source/specifications/simple-repository-api.rst:768 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 " @@ -18618,7 +20360,7 @@ msgid "" "for." msgstr "" -#: ../source/specifications/simple-repository-api.rst:666 +#: ../source/specifications/simple-repository-api.rst:772 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 " @@ -18629,22 +20371,22 @@ msgid "" "collector.py#L123-L150>`_ so the risks for actual breakages is low." msgstr "" -#: ../source/specifications/simple-repository-api.rst:673 +#: ../source/specifications/simple-repository-api.rst:779 msgid "An example of how a client can operate would look like:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:724 +#: ../source/specifications/simple-repository-api.rst:830 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:730 +#: ../source/specifications/simple-repository-api.rst:836 msgid "Alternative Negotiation Mechanisms" msgstr "" -#: ../source/specifications/simple-repository-api.rst:732 +#: ../source/specifications/simple-repository-api.rst:838 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 " @@ -18653,25 +20395,25 @@ msgid "" "negotiation mechanisms that may *optionally* be used instead." msgstr "" -#: ../source/specifications/simple-repository-api.rst:740 +#: ../source/specifications/simple-repository-api.rst:846 msgid "URL Parameter" msgstr "" -#: ../source/specifications/simple-repository-api.rst:742 +#: ../source/specifications/simple-repository-api.rst:848 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:745 +#: ../source/specifications/simple-repository-api.rst:851 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:749 +#: ../source/specifications/simple-repository-api.rst:855 msgid "" "Supporting this parameter is optional, and clients **SHOULD NOT** rely on it " "for interacting with the API. This negotiation mechanism is intended to " @@ -18679,13 +20421,13 @@ msgid "" "allow documentation or notes to link to a specific version+format." msgstr "" -#: ../source/specifications/simple-repository-api.rst:754 +#: ../source/specifications/simple-repository-api.rst:860 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:757 +#: ../source/specifications/simple-repository-api.rst:863 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 " @@ -18695,18 +20437,18 @@ msgid "" "``303 Multiple Choices``, or selecting a default type to return)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:766 +#: ../source/specifications/simple-repository-api.rst:872 msgid "Endpoint Configuration" msgstr "" -#: ../source/specifications/simple-repository-api.rst:768 +#: ../source/specifications/simple-repository-api.rst:874 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:772 +#: ../source/specifications/simple-repository-api.rst:878 msgid "" "If a server is unwilling or unable to implement the server-driven content " "negotiation, and would instead rather require users to explicitly configure " @@ -18714,7 +20456,7 @@ msgid "" "configuration." msgstr "" -#: ../source/specifications/simple-repository-api.rst:776 +#: ../source/specifications/simple-repository-api.rst:882 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 " @@ -18724,7 +20466,7 @@ msgid "" "and return the content type that corresponds to that endpoint." msgstr "" -#: ../source/specifications/simple-repository-api.rst:783 +#: ../source/specifications/simple-repository-api.rst:889 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 " @@ -18732,11 +20474,11 @@ msgid "" "includes the correct content type." msgstr "" -#: ../source/specifications/simple-repository-api.rst:790 +#: ../source/specifications/simple-repository-api.rst:896 msgid "TUF Support - PEP 458" msgstr "" -#: ../source/specifications/simple-repository-api.rst:792 +#: ../source/specifications/simple-repository-api.rst:898 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 " @@ -18747,7 +20489,7 @@ msgid "" "that all hash differently." msgstr "" -#: ../source/specifications/simple-repository-api.rst:799 +#: ../source/specifications/simple-repository-api.rst:905 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 " @@ -18755,7 +20497,7 @@ msgid "" "technically points to a directory." msgstr "" -#: ../source/specifications/simple-repository-api.rst:804 +#: ../source/specifications/simple-repository-api.rst:910 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 " @@ -18764,7 +20506,7 @@ msgid "" "HTTP request, such as the ``Accept`` header." msgstr "" -#: ../source/specifications/simple-repository-api.rst:810 +#: ../source/specifications/simple-repository-api.rst:916 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 " @@ -18772,7 +20514,7 @@ msgid "" "`458` metadata." msgstr "" -#: ../source/specifications/simple-repository-api.rst:814 +#: ../source/specifications/simple-repository-api.rst:920 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." @@ -18782,20 +20524,20 @@ msgid "" "the v1 JSON format would be ``simple/PROJECT/vnd.pypi.simple.v1.json``." msgstr "" -#: ../source/specifications/simple-repository-api.rst:821 +#: ../source/specifications/simple-repository-api.rst:927 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:825 +#: ../source/specifications/simple-repository-api.rst:931 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:831 +#: ../source/specifications/simple-repository-api.rst:937 msgid "" "This section is non-normative, and represents what the spec authors believe " "to be the best default implementation decisions for something implementing " @@ -18803,7 +20545,7 @@ msgid "" "these decisions." msgstr "" -#: ../source/specifications/simple-repository-api.rst:835 +#: ../source/specifications/simple-repository-api.rst:941 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 " @@ -18812,18 +20554,18 @@ msgid "" "choices it can." msgstr "" -#: ../source/specifications/simple-repository-api.rst:840 +#: ../source/specifications/simple-repository-api.rst:946 msgid "It is recommended that servers:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:842 +#: ../source/specifications/simple-repository-api.rst:948 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:846 +#: ../source/specifications/simple-repository-api.rst:952 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 " @@ -18831,13 +20573,13 @@ msgid "" "Acceptable`` response." msgstr "" -#: ../source/specifications/simple-repository-api.rst:851 +#: ../source/specifications/simple-repository-api.rst:957 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:854 +#: ../source/specifications/simple-repository-api.rst:960 msgid "" "When selecting an acceptable version, the server should choose the highest " "version that the client supports, with the most expressive/featureful " @@ -18846,23 +20588,23 @@ msgid "" "should only use the ``text/html`` content type as a last resort." msgstr "" -#: ../source/specifications/simple-repository-api.rst:860 +#: ../source/specifications/simple-repository-api.rst:966 msgid "It is recommended that clients:" msgstr "" -#: ../source/specifications/simple-repository-api.rst:862 +#: ../source/specifications/simple-repository-api.rst:968 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:865 +#: ../source/specifications/simple-repository-api.rst:971 msgid "" "When constructing an ``Accept`` header, include all of the content types " "that you support." msgstr "" -#: ../source/specifications/simple-repository-api.rst:868 +#: ../source/specifications/simple-repository-api.rst:974 msgid "" "You should generally *not* include a quality priority value for your content " "types, unless you have implementation specific reasons that you want the " @@ -18871,216 +20613,68 @@ msgid "" "responses that you're unable to parse in some edge cases)." msgstr "" -#: ../source/specifications/simple-repository-api.rst:874 +#: ../source/specifications/simple-repository-api.rst:980 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:878 +#: ../source/specifications/simple-repository-api.rst:984 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:881 +#: ../source/specifications/simple-repository-api.rst:987 msgid "" "Check the ``Content-Type`` of the response and ensure it matches something " "that you were expecting." msgstr "" -#: ../source/specifications/simple-repository-api.rst:885 -msgid "Additional Fields for the Simple API for Package Indexes" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:887 -msgid "" -"This specification defines version 1.1 of the simple repository API. For the " -"HTML version of the API, there is no change from version 1.0. For the JSON " -"version of the API, the following changes are made:" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:891 -msgid "The ``api-version`` must specify version 1.1 or later." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:892 -msgid "A new ``versions`` key is added at the top level." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:893 -msgid "" -"Two new \"file information\" keys, ``size`` and ``upload-time``, are added " -"to the ``files`` data." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:895 -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:898 -msgid "" -"The ``versions`` and ``size`` keys are mandatory. The ``upload-time`` key is " -"optional." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:904 -msgid "" -"An additional key, ``versions`` MUST be present at the top level, in " -"addition to the keys ``name``, ``files`` and ``meta`` defined in :ref:`the " -"JSON API specification `. This key MUST contain " -"a list of version strings specifying all of the project versions uploaded " -"for this project. The value is logically a set, and as such may not contain " -"duplicates, and the order of the values is not significant." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:911 -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:916 -msgid "" -"Note that 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 normalised VSS versions where possible." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:925 -msgid "Additional file information" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:927 -msgid "Two new keys are added to the ``files`` key." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:929 -msgid "" -"``size``: This field is mandatory. It MUST contain an integer which is the " -"file size in bytes." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:931 -msgid "" -"``upload-time``: This field is optional. If present, it 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. 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:940 -msgid "Rename dist-info-metadata in the Simple API" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:943 -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:`RFC 2119 <2119>`." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:950 -msgid "Servers" -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:952 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the HTML representation of the Simple " -"API, **MUST** be emitted using the attribute name ``data-core-metadata``, " -"with the supported values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:958 -msgid "" -"The :ref:`the API metadata file specification ` metadata, when used in the :ref:`the JSON API specification " -"` JSON representation of the Simple API, " -"**MUST** be emitted using the key ``core-metadata``, with the supported " -"values remaining the same." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:964 -msgid "" -"To support clients that used the previous key names, the HTML representation " -"**MAY** also be emitted using the ``data-dist-info-metadata``, and if it " -"does so it **MUST** match the value of ``data-core-metadata``." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:973 -msgid "" -"Clients consuming any of the HTML representations of the Simple API **MUST** " -"read the :ref:`the API metadata file specification ` metadata from the key ``data-core-metadata`` if it is " -"present. They **MAY** optionally use the legacy ``data-dist-info-metadata`` " -"if it is present but ``data-core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:980 -msgid "" -"Clients consuming the JSON representation of the Simple API **MUST** read " -"the :ref:`the API metadata file specification ` metadata from the key ``core-metadata`` if it is present. " -"They **MAY** optionally use the legacy ``dist-info-metadata`` key if it is " -"present but ``core-metadata`` is not." -msgstr "" - -#: ../source/specifications/simple-repository-api.rst:990 +#: ../source/specifications/simple-repository-api.rst:995 msgid "September 2015: initial form of the HTML format, in :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:991 +#: ../source/specifications/simple-repository-api.rst:996 msgid "July 2016: Requires-Python metadata, in an update to :pep:`503`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:992 +#: ../source/specifications/simple-repository-api.rst:997 msgid "May 2019: \"yank\" support, in :pep:`592`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:993 +#: ../source/specifications/simple-repository-api.rst:998 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:995 +#: ../source/specifications/simple-repository-api.rst:1000 msgid "" "May 2021: providing package metadata independently from a package, in :pep:" "`658`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:997 +#: ../source/specifications/simple-repository-api.rst:1002 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:999 +#: ../source/specifications/simple-repository-api.rst:1004 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:1001 +#: ../source/specifications/simple-repository-api.rst:1006 msgid "" "June 2023: renaming the field which provides package metadata independently " "from a package, in :pep:`714`" msgstr "" -#: ../source/specifications/simple-repository-api.rst:1003 +#: ../source/specifications/simple-repository-api.rst:1008 msgid "" "November 2024: provenance metadata in the HTML and JSON formats, in :pep:" "`740`" @@ -19113,11 +20707,11 @@ msgstr "" msgid "Source distributions are also known as *sdists* for short." msgstr "" -#: ../source/specifications/source-distribution-format.rst:24 +#: ../source/specifications/source-distribution-format.rst:26 msgid "Source trees" msgstr "" -#: ../source/specifications/source-distribution-format.rst:26 +#: ../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 " @@ -19127,11 +20721,11 @@ msgid "" "deemed a source tree." msgstr "" -#: ../source/specifications/source-distribution-format.rst:34 +#: ../source/specifications/source-distribution-format.rst:38 msgid "Source distribution file name" msgstr "" -#: ../source/specifications/source-distribution-format.rst:36 +#: ../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 " @@ -19140,20 +20734,20 @@ msgid "" "project version (see :ref:`version-specifiers`)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:42 +#: ../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:45 +#: ../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:49 +#: ../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 " @@ -19161,29 +20755,38 @@ msgid "" "distribution name and version from the filename without further verification." msgstr "" -#: ../source/specifications/source-distribution-format.rst:55 +#: ../source/specifications/source-distribution-format.rst:59 msgid "Source distribution file format" msgstr "" -#: ../source/specifications/source-distribution-format.rst:57 +#: ../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 ``PKG-" -"INFO`` file containing metadata in the format described in the :ref:`core-" +"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:65 +#: ../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:68 +#: ../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 " @@ -19191,21 +20794,21 @@ msgid "" "flag 'r:gz'." msgstr "" -#: ../source/specifications/source-distribution-format.rst:76 +#: ../source/specifications/source-distribution-format.rst:85 msgid "Source distribution archive features" msgstr "" -#: ../source/specifications/source-distribution-format.rst:78 +#: ../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:82 +#: ../source/specifications/source-distribution-format.rst:91 msgid "Unpacking with the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:84 +#: ../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') " @@ -19213,7 +20816,7 @@ msgid "" "filter* section below." msgstr "" -#: ../source/specifications/source-distribution-format.rst:88 +#: ../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 " @@ -19223,11 +20826,11 @@ msgid "" "this case." msgstr "" -#: ../source/specifications/source-distribution-format.rst:96 +#: ../source/specifications/source-distribution-format.rst:105 msgid "Unpacking without the data filter" msgstr "" -#: ../source/specifications/source-distribution-format.rst:98 +#: ../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 " @@ -19235,113 +20838,119 @@ msgid "" "follows this section, but it may get out of sync in the future.)" msgstr "" -#: ../source/specifications/source-distribution-format.rst:104 +#: ../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:108 +#: ../source/specifications/source-distribution-format.rst:117 msgid "Files that would be placed outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:109 +#: ../source/specifications/source-distribution-format.rst:118 msgid "Links (symbolic or hard) pointing outside the destination directory." msgstr "" -#: ../source/specifications/source-distribution-format.rst:110 +#: ../source/specifications/source-distribution-format.rst:119 msgid "Device files (including pipes)." msgstr "" -#: ../source/specifications/source-distribution-format.rst:112 +#: ../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:115 +#: ../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:116 +#: ../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:118 +#: ../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:121 +#: ../source/specifications/source-distribution-format.rst:130 msgid "When extracting *sdist* archives:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:123 +#: ../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:125 +#: ../source/specifications/source-distribution-format.rst:134 msgid "For each ``mode`` (Unix permission) bit, tools MUST either:" msgstr "" -#: ../source/specifications/source-distribution-format.rst:127 +#: ../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:128 +#: ../source/specifications/source-distribution-format.rst:137 msgid "set the bit according to the archive, or" msgstr "" -#: ../source/specifications/source-distribution-format.rst:129 +#: ../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:132 +#: ../source/specifications/source-distribution-format.rst:141 msgid "High ``mode`` bits (setuid, setgid, sticky) MUST be cleared." msgstr "" -#: ../source/specifications/source-distribution-format.rst:133 +#: ../source/specifications/source-distribution-format.rst:142 msgid "It is RECOMMENDED to preserve the user *executable* bit." msgstr "" -#: ../source/specifications/source-distribution-format.rst:137 +#: ../source/specifications/source-distribution-format.rst:146 msgid "Further hints" msgstr "" -#: ../source/specifications/source-distribution-format.rst:139 +#: ../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:146 +#: ../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:148 +#: ../source/specifications/source-distribution-format.rst:157 msgid "July 2021: Defined what a source tree is." msgstr "" -#: ../source/specifications/source-distribution-format.rst:149 +#: ../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:151 +#: ../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:782 msgid "Version specifiers" @@ -21998,7 +23607,7 @@ msgid "" msgstr "" #: ../source/tutorials/managing-dependencies.rst:140 -#: ../source/tutorials/packaging-projects.rst:505 +#: ../source/tutorials/packaging-projects.rst:539 msgid "Next steps" msgstr "" @@ -22255,7 +23864,7 @@ msgid "" "following this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:224 +#: ../source/tutorials/packaging-projects.rst:250 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 " @@ -22264,24 +23873,24 @@ msgid "" "package with the same name as one which already exists." msgstr "" -#: ../source/tutorials/packaging-projects.rst:229 +#: ../source/tutorials/packaging-projects.rst:255 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:231 +#: ../source/tutorials/packaging-projects.rst:257 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:234 +#: ../source/tutorials/packaging-projects.rst:260 msgid "``description`` is a short, one-sentence summary of the package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:235 +#: ../source/tutorials/packaging-projects.rst:261 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 " @@ -22290,31 +23899,43 @@ msgid "" "toml guide `." msgstr "" -#: ../source/tutorials/packaging-projects.rst:240 +#: ../source/tutorials/packaging-projects.rst:266 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:243 +#: ../source/tutorials/packaging-projects.rst:269 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, is licensed under the MIT license, and is OS-independent. You should " -"always include at least which version(s) of Python your package works on, " -"which license your package is available under, and which operating systems " -"your package will work on. For a complete list of classifiers, see https://" -"pypi.org/classifiers/." +"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:250 +#: ../source/tutorials/packaging-projects.rst:276 +msgid "" +"``license`` is the :term:`SPDX license expression ` of " +"your package. Not supported by all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:278 +msgid "" +"``license-files`` is the list of glob paths to the license files, relative " +"to the directory where :file:`pyproject.toml` is located. Not supported by " +"all the build backends yet." +msgstr "" + +#: ../source/tutorials/packaging-projects.rst:281 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:253 +#: ../source/tutorials/packaging-projects.rst:284 msgid "" "See the :ref:`pyproject.toml guide ` for details on " "these and other fields that can be defined in the ``[project]`` table. Other " @@ -22322,21 +23943,21 @@ msgid "" "``dependencies`` that are required to install your package." msgstr "" -#: ../source/tutorials/packaging-projects.rst:260 +#: ../source/tutorials/packaging-projects.rst:291 msgid "Creating README.md" msgstr "" -#: ../source/tutorials/packaging-projects.rst:262 +#: ../source/tutorials/packaging-projects.rst:293 msgid "" "Open :file:`README.md` and enter the following content. You can customize " "this if you'd like." msgstr "" -#: ../source/tutorials/packaging-projects.rst:275 +#: ../source/tutorials/packaging-projects.rst:306 msgid "Creating a LICENSE" msgstr "" -#: ../source/tutorials/packaging-projects.rst:277 +#: ../source/tutorials/packaging-projects.rst:308 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 " @@ -22345,57 +23966,60 @@ msgid "" "and enter the license text. For example, if you had chosen the MIT license:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:306 +#: ../source/tutorials/packaging-projects.rst:337 msgid "" "Most build backends automatically include license files in packages. See " -"your backend's documentation for more details." +"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:311 +#: ../source/tutorials/packaging-projects.rst:345 msgid "Including other files" msgstr "" -#: ../source/tutorials/packaging-projects.rst:313 +#: ../source/tutorials/packaging-projects.rst:347 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:320 +#: ../source/tutorials/packaging-projects.rst:354 msgid "Generating distribution archives" msgstr "" -#: ../source/tutorials/packaging-projects.rst:322 +#: ../source/tutorials/packaging-projects.rst:356 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:326 +#: ../source/tutorials/packaging-projects.rst:360 msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:340 +#: ../source/tutorials/packaging-projects.rst:374 msgid "" "If you have trouble installing these, see the :doc:`installing-packages` " "tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:343 +#: ../source/tutorials/packaging-projects.rst:377 msgid "" "Now run this command from the same directory where :file:`pyproject.toml` is " "located:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:357 +#: ../source/tutorials/packaging-projects.rst:391 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:367 +#: ../source/tutorials/packaging-projects.rst:401 msgid "" "The ``tar.gz`` file is a :term:`source distribution ` whereas the ``.whl`` file is a :term:`built distribution ` and install your package from TestPyPI:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:461 +#: ../source/tutorials/packaging-projects.rst:495 msgid "Make sure to specify your username in the package name!" msgstr "碓保指明你的帳戶名稱於那個套件名稱裏!" -#: ../source/tutorials/packaging-projects.rst:463 +#: ../source/tutorials/packaging-projects.rst:497 msgid "" "pip should install the package from TestPyPI and the output should look " "something like this:" msgstr "" -#: ../source/tutorials/packaging-projects.rst:473 +#: ../source/tutorials/packaging-projects.rst:507 msgid "" "This example uses ``--index-url`` flag to specify TestPyPI instead of live " "PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI doesn't have " @@ -22493,23 +24117,23 @@ msgid "" "installing dependencies when using TestPyPI." msgstr "" -#: ../source/tutorials/packaging-projects.rst:480 +#: ../source/tutorials/packaging-projects.rst:514 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:495 +#: ../source/tutorials/packaging-projects.rst:529 msgid "and import the package:" msgstr "然後載入那個套件:" -#: ../source/tutorials/packaging-projects.rst:507 +#: ../source/tutorials/packaging-projects.rst:541 msgid "" "**Congratulations, you've packaged and distributed a Python project!** ✨ 🍰 " "✨" msgstr "**恭喜,你已經做好套件而且發佈為一個Python頂目出去!**✨ 🍰 ✨" -#: ../source/tutorials/packaging-projects.rst:510 +#: ../source/tutorials/packaging-projects.rst:544 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 " @@ -22517,14 +24141,14 @@ msgid "" "experiments like this tutorial." msgstr "" -#: ../source/tutorials/packaging-projects.rst:515 +#: ../source/tutorials/packaging-projects.rst:549 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 "當你真正準備上載一個套件到Python套件索引,你往後可以重複幾次這動作" -#: ../source/tutorials/packaging-projects.rst:519 +#: ../source/tutorials/packaging-projects.rst:553 #, fuzzy msgid "" "Choose a memorable and unique name for your package. You don't have to " @@ -22534,14 +24158,14 @@ msgstr "" "為你的套件選擇一個稔熟且獨特的名字。由於你已經在教學中做了一次,所以你不用在" "此再加上你的用戶名稱。" -#: ../source/tutorials/packaging-projects.rst:521 +#: ../source/tutorials/packaging-projects.rst:555 msgid "" "Register an account on https://pypi.org - note that these are two separate " "servers and the login details from the test server are not shared with the " "main server." msgstr "於https://pypi.org網址內登記一個帳戶-謹記這是兩個截然不同的伺服器和" -#: ../source/tutorials/packaging-projects.rst:524 +#: ../source/tutorials/packaging-projects.rst:558 msgid "" "Use ``twine upload dist/*`` to upload your package and enter your " "credentials for the account you registered on the real PyPI. Now that " @@ -22549,45 +24173,45 @@ msgid "" "repository``; the package will upload to https://pypi.org/ by default." msgstr "" -#: ../source/tutorials/packaging-projects.rst:528 +#: ../source/tutorials/packaging-projects.rst:562 msgid "" "Install your package from the real PyPI using ``python3 -m pip install [your-" "package]``." msgstr "" "使用 ``python3 -m pip install [your-package]`` 以從真正的PyPI安裝您的套件。" -#: ../source/tutorials/packaging-projects.rst:530 +#: ../source/tutorials/packaging-projects.rst:564 msgid "" "At this point if you want to read more on packaging Python libraries here " "are some things you can do:" msgstr "此時,如果您想閱讀有關打包 Python 庫的更多信息,您可以執行以下操作:" -#: ../source/tutorials/packaging-projects.rst:533 +#: ../source/tutorials/packaging-projects.rst:567 msgid "" "Read about advanced configuration for your chosen build backend: `Hatchling " "`_, :doc:`setuptools `, :doc:`Flit `, `PDM `_." msgstr "" -#: ../source/tutorials/packaging-projects.rst:537 +#: ../source/tutorials/packaging-projects.rst:571 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:540 +#: ../source/tutorials/packaging-projects.rst:574 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:548 +#: ../source/tutorials/packaging-projects.rst:582 msgid "Notes" msgstr "" -#: ../source/tutorials/packaging-projects.rst:550 +#: ../source/tutorials/packaging-projects.rst:584 msgid "" "Technically, you can also create Python packages without an ``__init__.py`` " "file, but those are called :doc:`namespace packages