diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 000000000..129a77eaf --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,52 @@ +name: deploy +on: + push: + branches: + - xin + +jobs: + # 这个工作流程包含一个名为 "build" 的 job + build: + # job 将运行的运行器的类型 + runs-on: ubuntu-latest + + # steps 将作为工作的一部分而执行的任务序列 + steps: + # 这个动作在 $GITHUB_WORKSPACE 下签出你的版本库,以便工作流就可以访问它 + - uses: actions/checkout@v2 + # 设定 Python 环境 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.9 + # 设定 conda 环境 + - uses: s-weigand/setup-conda@v1 + - run: conda --version + - run: which python + + # 安装依赖包 + - name: Install dependencies + run: | + pip install -r requirements.txt + pip install sphinx-intl + + # # 安装 HTML 主题 & 国际化 + # - name: Install theme + # run: | + # git clone https://github.com/sphinx-locales/packaging.python.org.git draft + + # 构建 Sphinx 文档 + - name: Build the book + run: | + sphinx-build -b gettext source build/gettext + sphinx-intl update -p build/gettext -l zh_CN + sphinx-build -D language=zh_CN -b html source build/html + + # 部署 HTML 到 gh-pages 分支 + - name: GitHub Pages action + uses: peaceiris/actions-gh-pages@v3.6.1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: build/html + user_name: "github-actions[bot]" + user_email: "github-actions[bot]@users.noreply.github.com" \ No newline at end of file diff --git a/locales/zh_CN/LC_MESSAGES/messages.po b/locales/zh_CN/LC_MESSAGES/messages.po new file mode 100644 index 000000000..9028f0ece --- /dev/null +++ b/locales/zh_CN/LC_MESSAGES/messages.po @@ -0,0 +1,15506 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2013–2020, PyPA +# This file is distributed under the same license as the Python Packaging +# User Guide package. +# meowmeowmeowcat , 2021. +# Zuorong Zhang , 2021. +# bluewindde <13548563428@139.com>, 2021. +# Cube Kassaki <2524737581@qq.com>, 2021. +# xlivevil , 2021. +# Eric , 2021. +# xinetzone , 2021. +msgid "" +msgstr "" +"Project-Id-Version: Python Packaging User Guide\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-31 11:40+0800\n" +"PO-Revision-Date: 2021-10-02 03:36+0000\n" +"Last-Translator: Eric \n" +"Language: zh_Hans\n" +"Language-Team: Chinese (Simplified) " +"" +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../source/contribute.rst:5 +msgid "Contribute to this guide" +msgstr "为本指南做出贡献" + +#: ../../source/contribute.rst:7 +msgid "" +"The |PyPUG| welcomes contributors! There are lots of ways to help out, " +"including:" +msgstr "|PyPUG| 欢迎贡献者!有很多方法可以帮助我们,包括:" + +#: ../../source/contribute.rst:10 +msgid "Reading the guide and giving feedback" +msgstr "阅读指南并提供反馈" + +#: ../../source/contribute.rst:11 +msgid "Reviewing new contributions" +msgstr "审查新的贡献" + +#: ../../source/contribute.rst:12 +msgid "Revising existing content" +msgstr "修改现有内容" + +#: ../../source/contribute.rst:13 +msgid "Writing new content" +msgstr "撰写新内容" + +#: ../../source/contribute.rst:14 +msgid "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 "" +"大部分关于 |PyPUG| 的工作都是在 `项目的 GitHub 存储库`__ 进行的。要开始工作,请查看 `打开议题`__ 和 `拉取请求`__" +" 的列表。如果你打算编写或编辑指南,请阅读 :ref:`风格指南 `。" + +#: ../../source/contribute.rst:25 +msgid "" +"By contributing to the |PyPUG|, you're expected to follow the PSF's `Code" +" of Conduct`__." +msgstr "如果您想为 |PyPUG| 作出贡献,您应该遵守 PSF 的 `行为准则`__ 。" + +#: ../../source/contribute.rst:32 +msgid "Documentation types" +msgstr "文档类型" + +#: ../../source/contribute.rst:34 +msgid "" +"This project consists of four distinct documentation types with specific " +"purposes. When proposing new additions to the project please pick the " +"appropriate documentation type." +msgstr "本项目由具有特定目的的四种不同的文档类型组成。当提议对项目进行新的补充时,请选择适当的文档类型。" + +#: ../../source/contribute.rst:39 ../../source/tutorials/index.rst:2 +msgid "Tutorials" +msgstr "教程" + +#: ../../source/contribute.rst:41 +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:48 ../../source/guides/index.rst:2 +msgid "Guides" +msgstr "指南" + +#: ../../source/contribute.rst:50 +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 "" +"指南的重点是完成一项具体的任务,并可以假定有一定程度的前提知识。这类似于教程,但有一个狭窄和明确的重点,并可以根据需要提供大量的注意事项和附加信息。他们还可以讨论完成任务的多种方法。" +" :doc:`示例指南式文档 `。" + +#: ../../source/contribute.rst:57 ../../source/discussions/index.rst:2 +msgid "Discussions" +msgstr "讨论" + +#: ../../source/contribute.rst:59 +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 "" +"讨论的重点是理解和信息。这些探索一个特定的主题,没有具体的目标。 :doc:`示例讨论式文档 `。" + +#: ../../source/contribute.rst:64 +msgid "Specifications" +msgstr "规格" + +#: ../../source/contribute.rst:66 +msgid "" +"Specifications are reference documention focused on comprehensively " +"documenting an agreed-upon interface for interoperability between " +"packaging tools. :doc:`example specification-style document " +"`." +msgstr "" +"规范 (Specifications) 是一种参考文件,侧重于全面记录包装工具之间互操作性的一致接口。 :doc:`范例规范式文件 " +"`。" + +#: ../../source/contribute.rst:72 +msgid "Translations" +msgstr "翻译" + +#: ../../source/contribute.rst:74 +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:77 +msgid "" +"If you are experiencing issues while you are working on translations, " +"please open an issue on `Github`_." +msgstr "如果你在进行翻译工作时遇到问题,请在 `Github`_ 上开一个议题。" + +#: ../../source/contribute.rst:82 +msgid "Any translations of this project should follow `reStructuredText syntax`_." +msgstr "本项目的任何翻译应遵循 `reStructuredText 语法`_。" + +#: ../../source/contribute.rst:90 +msgid "Adding a language" +msgstr "添加语言" + +#: ../../source/contribute.rst:92 +msgid "" +"If your language is not listed on `packaging.python.org`_, click the " +"button :guilabel:`Start new translation` at the bottom of the language " +"list and add the language you want to translate." +msgstr "" +"如果你的语言没有列在 `packaging.python.org`_ 上,请点击语言列表底部的按钮 :guilabel:`Start new " +"translation` 并添加你要翻译的语言。" + +#: ../../source/contribute.rst:97 +msgid "Following reStructuredText syntax" +msgstr "遵循 reStructuredText 语法" + +#: ../../source/contribute.rst:99 +msgid "" +"If you are not familiar with reStructuredText (RST) syntax, please read " +"`this guide`_ before translating on Weblate." +msgstr "如果你不熟悉 reStructuredText(RST)的语法,请在 Weblate 上进行翻译之前阅读 `指南`_。" + +#: ../../source/contribute.rst:102 +msgid "**Do not translate the text in reference directly**" +msgstr "**不要直接翻译参考文献中的文字**" + +#: ../../source/contribute.rst:104 +msgid "" +"When translating the text in reference, please do not translate them " +"directly." +msgstr "在翻译参考文献的时候,请不要直接翻译它们。" + +#: ../../source/contribute.rst +msgid "Wrong: Translate the following text directly:" +msgstr "错:直接翻译以下文字:" + +#: ../../source/contribute.rst +msgid "" +"Right: Translate the following text with your own language and add the " +"original reference:" +msgstr "对:用你自己的语言翻译以下文字,并添加原始参考资料:" + +#: ../../source/contribute.rst:121 +msgid "Building the guide locally" +msgstr "在本地构建指南" + +#: ../../source/contribute.rst:123 +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:127 +msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" +msgstr ":doc:`Nox ` 。你可以用 ``pip`` 来安装或升级 nox ::" + +#: ../../source/contribute.rst:134 +#, fuzzy +msgid "" +"Python 3.8. Our build scripts are usually tested with Python 3.8 only. " +"See the :doc:`Hitchhiker's Guide to Python installation instructions " +"` to install Python 3.8 on your " +"operating system." +msgstr "" +"Python 3.6。我们的构建脚本被设计为仅适用于 Python 3.6。参见 :doc:`Hitchhiker's Guide to " +"Python installation instructions `,在你的操作系统上安装 Python 3.6。" + +#: ../../source/contribute.rst:138 +#, fuzzy +msgid "" +"To build the guide, run the following shell command in the project's root" +" folder:" +msgstr "要构建指南,在 source 文件夹中运行以下 bash 命令 ::" + +#: ../../source/contribute.rst:144 +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 "" +"在该过程完成后,您可以在 ``./build/html`` 目录中找到 HTML 输出。您可以打开 ``index.html`` " +"文件,并在浏览器中查看指南,但我们建议使用 HTTP 服务器为指南服务。" + +#: ../../source/contribute.rst:149 +msgid "" +"You can build the guide and serve it via an HTTP server using the " +"following command:" +msgstr "您可以使用以下命令建立指南并通过 HTTP 服务器为其提供服务 ::" + +#: ../../source/contribute.rst:156 +msgid "The guide will be browsable via http://localhost:8000." +msgstr "该指南将可通过 http://localhost:8000 进行浏览。" + +#: ../../source/contribute.rst:160 +msgid "Where the guide is deployed" +msgstr "指南的部署地点" + +#: ../../source/contribute.rst:162 +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 "" +"该指南是通过 ReadTheDocs 部署的,配置位于 https://readthedocs.org/projects/python-" +"packaging-user-guide/ 。它由一个自定义域名提供服务,并由 Fast.ly 提供支持。" + +#: ../../source/contribute.rst:168 +msgid "Style guide" +msgstr "风格指南" + +#: ../../source/contribute.rst:170 +msgid "" +"This style guide has recommendations for how you should write the " +"|PyPUG|. Before you start writing, please review it. By following the " +"style guide, your contributions will help add to a cohesive whole and " +"make it easier for your contributions to be accepted into the project." +msgstr "" +"本风格指南提供了关于如何编写 |PyPUG| " +"的建议。在开始写作之前,请先查看它。通过遵循样式指南,您的贡献将有助于增加一个有凝聚力的整体,并使您的贡献更容易被项目接受。" + +#: ../../source/contribute.rst:177 +msgid "Purpose" +msgstr "目的" + +#: ../../source/contribute.rst:179 +msgid "" +"The purpose of the |PyPUG| is to be the authoritative resource on how to " +"package, publish, and install Python projects using current tools." +msgstr "|PyPUG| 的目的是成为关于如何使用当前工具打包、发布和安装 Python 项目的权威性资源。" + +#: ../../source/contribute.rst:184 +msgid "Scope" +msgstr "范围" + +#: ../../source/contribute.rst:186 +msgid "" +"The guide is meant to answer questions and solve problems with accurate " +"and focused recommendations." +msgstr "该指南旨在通过准确和有针对性的建议来回答问题和解决问题。" + +#: ../../source/contribute.rst:189 +msgid "" +"The guide isn't meant to be comprehensive and it's not meant to replace " +"individual projects' documentation. For example, pip has dozens of " +"commands, options, and settings. The pip documentation describes each of " +"them in detail, while this guide describes only the parts of pip that are" +" needed to complete the specific tasks described in this guide." +msgstr "" +"本指南并不意味着是全面的,也不意味着可以取代单个项目的文档。例如,pip 有几十个命令、选项和设置。pip " +"文档详细描述了它们中的每一个,而本指南只描述了完成本指南中描述的特定任务所需的 pip 部分。" + +#: ../../source/contribute.rst:197 +msgid "Audience" +msgstr "读者" + +#: ../../source/contribute.rst:199 +msgid "The audience of this guide is anyone who uses Python with packages." +msgstr "本指南的受众是任何使用 Python 包的人。" + +#: ../../source/contribute.rst:201 +msgid "" +"Don't forget that the Python community is big and welcoming. Readers may " +"not share your age, gender, education, culture, and more, but they " +"deserve to learn about packaging just as much as you do." +msgstr "不要忘记,Python 社区是很大,而且很受欢迎的。读者可能与您的年龄、性别、教育、文化等不尽相同,但他们和您一样值得学习包装知识。" + +#: ../../source/contribute.rst:205 +msgid "" +"In particular, keep in mind that not all people who use Python see " +"themselves as programmers. The audience of this guide includes " +"astronomers or painters or students as well as professional software " +"developers." +msgstr "特别是要记住,不是所有使用 Python 的人都把自己看作是程序员。本指南的受众包括天文学家,画家或学生以及专业的软件开发人员。" + +#: ../../source/contribute.rst:211 +msgid "Voice and tone" +msgstr "声音和语气" + +#: ../../source/contribute.rst:213 +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:216 +msgid "" +"Imagine you're working on a Python project with someone you know to be " +"smart and skilled. You like working with them and they like working with " +"you. That person has asked you a question and you know the answer. How do" +" you respond? *That* is how you should write this guide." +msgstr "" +"想象一下,您正在和一个您知道是聪明和熟练的人一起做 Python " +"项目。您喜欢和他们一起工作,他们也喜欢和您一起工作。那个人问了您一个问题,你知道答案。你怎么回答?*这* 就是你应该如何写这个指南的方式。" + +#: ../../source/contribute.rst:221 +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:228 +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:235 +msgid "Conventions and mechanics" +msgstr "公约和机制" + +#: ../../source/contribute.rst:243 +msgid "**Write to the reader**" +msgstr "**写给读者**" + +#: ../../source/contribute.rst:238 +msgid "" +"When giving recommendations or steps to take, address the reader as *you*" +" or use the imperative mood." +msgstr "在提出建议或采取的步骤时,您应称呼读者为 *你* 或使用命令语气。" + +#: ../../source/contribute.rst +msgid "Wrong: To install it, the user runs…" +msgstr "错误:要安装它,用户运行…" + +#: ../../source/contribute.rst +msgid "Right: You can install it by running…" +msgstr "正确:您可以通过运行...来安装它" + +#: ../../source/contribute.rst +msgid "Right: To install it, run…" +msgstr "正确:要安装它,请运行…" + +#: ../../source/contribute.rst:249 +msgid "**State assumptions**" +msgstr "**陈述假设**" + +#: ../../source/contribute.rst:246 +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:254 +msgid "**Cross-reference generously**" +msgstr "**慷慨地交叉参考**" + +#: ../../source/contribute.rst:252 +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:264 +msgid "**Respect naming practices**" +msgstr "**尊重命名的做法**" + +#: ../../source/contribute.rst:257 +msgid "" +"When naming tools, sites, people, and other proper nouns, use their " +"preferred capitalization." +msgstr "当给工具、网站、人和其他专有名词命名时,请使用它们的首选大写字母。" + +#: ../../source/contribute.rst +msgid "Wrong: Pip uses…" +msgstr "错误:Pip 使用…" + +#: ../../source/contribute.rst +msgid "Right: pip uses…" +msgstr "正确:pip 使用…" + +#: ../../source/contribute.rst +msgid "Wrong: …hosted on github." +msgstr "错误:...托管在 github 上。" + +#: ../../source/contribute.rst +msgid "Right: …hosted on GitHub." +msgstr "正确:……托管在 GitHub 上。" + +#: ../../source/contribute.rst:273 +msgid "**Use a gender-neutral style**" +msgstr "**使用中性风格**" + +#: ../../source/contribute.rst:267 +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 "" +"通常,您会用 *you*、*your* 和 *yours* 来直接称呼读者。否则,请使用性别中立的代词 *they*、*their* 和 " +"*theirs* ,或者完全避免使用代词。" + +#: ../../source/contribute.rst +msgid "Wrong: A maintainer uploads the file. Then he…" +msgstr "错误:一个维护人员上传了文件。然后他…" + +#: ../../source/contribute.rst +msgid "Right: A maintainer uploads the file. Then they…" +msgstr "正确:一个维护人员上传了文件。然后他们…" + +#: ../../source/contribute.rst +msgid "Right: A maintainer uploads the file. Then the maintainer…" +msgstr "正确:A maintainer uploads the file. Then the maintainer…" + +#: ../../source/contribute.rst:285 +msgid "**Headings**" +msgstr "**标题**" + +#: ../../source/contribute.rst:276 +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 "" +"写标题时要使用读者正在搜索的词。一个好方法是让你的标题完成一个隐含的问题。例如,读者可能想知道 *How do I install " +"MyLibrary?*,所以一个好的标题可能是 *Install MyLibrary* 。" + +#: ../../source/contribute.rst:281 +msgid "" +"In section headings, use sentence case. In other words, write headings as" +" you would write a typical sentence." +msgstr "在章节标题中,使用句子大小写。换句话说,要像写一个典型的句子那样写标题。" + +#: ../../source/contribute.rst +msgid "Wrong: Things You Should Know About Python" +msgstr "错误:Things You Should Know About Python" + +#: ../../source/contribute.rst +msgid "Right: Things you should know about Python" +msgstr "正确:Things you should know about Python" + +#: ../../source/contribute.rst:288 +msgid "**Numbers**" +msgstr "**数字**" + +#: ../../source/contribute.rst:288 +msgid "" +"In body text, write numbers one through nine as words. For other numbers " +"or numbers in tables, use numerals." +msgstr "在正文中,将数字1到9写成单词。对于其他数字或表格中的数字,使用数字。" + +#: ../../source/discussions/deploying-python-applications.rst:4 +msgid "Deploying Python applications" +msgstr "部署 Python 应用程序" + +#: ../../source/discussions/deploying-python-applications.rst +#: ../../source/guides/index-mirrors-and-caches.rst +#: ../../source/guides/installing-using-linux-tools.rst +#: ../../source/guides/migrating-to-pypi-org.rst +#: ../../source/guides/multi-version-installs.rst +#: ../../source/guides/packaging-binary-extensions.rst +#: ../../source/guides/supporting-multiple-python-versions.rst +#: ../../source/guides/supporting-windows-using-appveyor.rst +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 +#: ../../source/guides/index-mirrors-and-caches.rst +#: ../../source/guides/installing-using-linux-tools.rst +#: ../../source/guides/packaging-binary-extensions.rst +#: ../../source/guides/supporting-multiple-python-versions.rst +#: ../../source/guides/supporting-windows-using-appveyor.rst +msgid "Last Reviewed" +msgstr "最后审查" + +#: ../../source/discussions/deploying-python-applications.rst:7 +#, fuzzy +msgid "2021-8-24" +msgstr "2014-12-24" + +#: ../../source/discussions/deploying-python-applications.rst:11 +#: ../../source/discussions/install-requires-vs-requirements.rst:9 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:12 +#: ../../source/guides/distributing-packages-using-setuptools.rst:24 +#: ../../source/guides/index-mirrors-and-caches.rst:12 +#: ../../source/guides/installing-scientific-packages.rst:9 +#: ../../source/guides/installing-using-linux-tools.rst:11 +#: ../../source/guides/packaging-binary-extensions.rst:17 +#: ../../source/guides/supporting-multiple-python-versions.rst:14 +#: ../../source/guides/supporting-windows-using-appveyor.rst:17 +#: ../../source/overview.rst:23 +#: ../../source/specifications/core-metadata.rst:41 +#: ../../source/specifications/direct-url.rst:13 +#: ../../source/tutorials/installing-packages.rst:23 +msgid "Contents" +msgstr "导航" + +#: ../../source/discussions/deploying-python-applications.rst:14 +msgid "Overview" +msgstr "总览" + +#: ../../source/discussions/deploying-python-applications.rst:18 +msgid "Supporting multiple hardware platforms" +msgstr "支持多种硬件平台" + +#: ../../source/discussions/deploying-python-applications.rst:40 +msgid "OS packaging & installers" +msgstr "操作系统包装和安装程序" + +#: ../../source/discussions/deploying-python-applications.rst:52 +#: ../../source/discussions/deploying-python-applications.rst:89 +msgid "Windows" +msgstr "Windows 系统" + +#: ../../source/discussions/deploying-python-applications.rst:61 +msgid "Pynsist" +msgstr "Pynsist" + +#: ../../source/discussions/deploying-python-applications.rst:63 +msgid "" +"`Pynsist `__ is a tool that bundles " +"Python programs together with the Python-interpreter into a single " +"installer based on NSIS. In most cases, packaging only requires the user " +"to choose a version of the Python-interpreter and declare the " +"dependencies of the program. The tool downloads the specified Python-" +"interpreter for Windows and packages it with all the dependencies in a " +"single Windows-executable installer." +msgstr "" +"`Pynsist `__ 是一个基于NSIS的单一安装程序,并将 Python" +" 程序与 Python 解释器捆绑在一起的工具。在大多数情况下,打包 (packaging) 只需要用户选择 Python " +"解释器的版本并声明程序的依赖性 (dependencies) 。该工具会下载用于 Windows 的 Python " +"解释器,并将其与所有依赖项打包成一个可在 Windows 执行的安装程序。" + +#: ../../source/discussions/deploying-python-applications.rst:70 +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 "" +"安装的程序可以从安装程序添加到开始菜单的快捷方式启动。它使用一个安装在其应用程序目录中的Python解释器,与计算机上的任何其他 Python " +"安装无关。" + +#: ../../source/discussions/deploying-python-applications.rst:74 +#, fuzzy +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 `documentation `. The tool is " +"released under the MIT-licence." +msgstr "" +"Pynsist 的一大优势是可以在 Linux 上构建 Windows 软件包。在`文档 " +"`__ 中,有几个不同类型程序(控制台、GUI)的例子。该工具是在 MIT " +"许可下发布的。" + +#: ../../source/discussions/deploying-python-applications.rst:80 +msgid "Application bundles" +msgstr "应用捆绑" + +#: ../../source/discussions/deploying-python-applications.rst:92 +#, fuzzy +msgid "py2exe" +msgstr "pex" + +#: ../../source/discussions/deploying-python-applications.rst:94 +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:106 +msgid "macOS" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:109 +msgid "py2app" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:111 +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:118 +msgid "Unix (including Linux and macOS)" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:121 +#: ../../source/key_projects.rst:497 +msgid "pex" +msgstr "pex" + +#: ../../source/discussions/deploying-python-applications.rst:123 +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:132 +msgid "Configuration management" +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 "" +"**讨论 (Discussions)** 的重点是提供关于特定主题的全面信息。如果您只是想把事情做好,请看 " +":doc:`/guides/index` 。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:5 +msgid "install_requires vs requirements files" +msgstr "install_requires 与 requirements files" + +#: ../../source/discussions/install-requires-vs-requirements.rst:12 +msgid "install_requires" +msgstr "install_requires" + +#: ../../source/discussions/install-requires-vs-requirements.rst:14 +msgid "" +"``install_requires`` is a :ref:`setuptools` :file:`setup.py` keyword that" +" should be used to specify what a project **minimally** needs to run " +"correctly. When the project is installed by :ref:`pip`, this is the " +"specification that is used to install its dependencies." +msgstr "" +"``install_requires`` 是一个 :ref:`setuptools` :file:`setup.py` " +"关键字,它应该用来指定一个项目 **最小** 需要正确运行的内容。当项目由 :ref:`pip` 安装时,这就是用来安装其依赖的规范。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:19 +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:29 +msgid "" +"Additionally, it's best practice to indicate any known lower or upper " +"bounds." +msgstr "此外,最好的做法是指出任何已知的下限或上限。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:31 +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:41 +msgid "" +"It may also be known that project A follows semantic versioning, and that" +" v2 of 'A' will indicate a break in compatibility, so it makes sense to " +"not allow v2:" +msgstr "也可能知道项目 A 遵循语义上的版本管理,而 'A' 的 v2 版将表明兼容性的中断,所以不允许v2版是有意义的:" + +#: ../../source/discussions/install-requires-vs-requirements.rst:51 +msgid "" +"It is not considered best practice to use ``install_requires`` to pin " +"dependencies to specific versions, or to specify sub-dependencies (i.e. " +"dependencies of your dependencies). This is overly-restrictive, and " +"prevents the user from gaining the benefit of dependency upgrades." +msgstr "" +"使用 ``install_requires`` 将依赖关系固定在特定的版本上,或者指定子依赖关系(即您的依赖关系的依赖关系),都不是最佳做法。 " +"这是对用户的过度限制,使用户无法获得依赖性升级的好处。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:56 +msgid "" +"Lastly, it's important to understand that ``install_requires`` is a " +"listing of \"Abstract\" requirements, i.e just names and version " +"restrictions that don't determine where the dependencies will be " +"fulfilled from (i.e. from what index or source). The where (i.e. how " +"they are to be made \"Concrete\") is to be determined at install time " +"using :ref:`pip` options. [1]_" +msgstr "" +"最后,重要的是要了解 ``install_requires`` " +"是“Abstract”要求的列表,即只是名称和版本限制,并不能确定从哪里满足依赖关系(即从什么索引或来源)。在安装时使用 :ref:`pip` " +"选项确定在哪里(即如何使它们“Concrete”)。 [1]_" + +#: ../../source/discussions/install-requires-vs-requirements.rst:64 +#: ../../source/tutorials/installing-packages.rst:468 +msgid "Requirements files" +msgstr "需求文件" + +#: ../../source/discussions/install-requires-vs-requirements.rst:66 +msgid "" +":ref:`Requirements Files ` described most simply," +" are just a list of :ref:`pip:pip install` arguments placed into a file." +msgstr "" +":ref:`Requirements Files ` 最简单的描述,只是放在文件中的 " +":ref:`pip:pip install` 参数列表。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:69 +msgid "" +"Whereas ``install_requires`` defines the dependencies for a single " +"project, :ref:`Requirements Files ` are often " +"used to define the requirements for a complete Python environment." +msgstr "" +"``install_requires`` 定义了单个项目的依赖项, :ref:`Requirements Files " +"` 通常用于定义完整 Python 环境的要求。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:73 +msgid "" +"Whereas ``install_requires`` requirements are minimal, requirements files" +" often contain an exhaustive listing of pinned versions for the purpose " +"of achieving :ref:`repeatable installations ` of a " +"complete environment." +msgstr "" +"尽管 ``install_requires`` 要求是最低限度的,但要求文件通常包含固定版本的详尽列表,目的是实现完整环境的 " +":ref:`repeatable installations `。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:78 +msgid "" +"Whereas ``install_requires`` requirements are \"Abstract\", i.e. not " +"associated with any particular index, requirements files often contain " +"pip options like ``--index-url`` or ``--find-links`` to make requirements" +" \"Concrete\", i.e. associated with a particular index or directory of " +"packages. [1]_" +msgstr "" +"而 ``install_requires`` 需求是“Abstract”的,即不与任何特定索引相关联,需求文件通常包含 pip 选项,如 " +"``--index-url`` 或 ``--find-links`` 使需求“Concrete”,即与包的特定索引或目录相关联。 [1]_" + +#: ../../source/discussions/install-requires-vs-requirements.rst:84 +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 "" +"在安装过程中,``install_requires`` 元数据会被 pip 自动分析,而需求文件则不会,而它只有在用户使用 ``python -m" +" pip install -r`` 专门安装时才会使用。" + +#: ../../source/discussions/install-requires-vs-requirements.rst:90 +#, fuzzy +msgid "" +"For more on \"Abstract\" vs \"Concrete\" requirements, see " +"https://caremad.io/posts/2013/07/setup-vs-requirement/." +msgstr "" +"关于 \"抽象 (Abstract) \"与 \"具体 (Concrete)\"要求的更多信息,请参阅 " +"https://caremad.io/2013/07/setup-vs-requirement/ 。" + +#: ../../source/discussions/pip-vs-easy-install.rst:6 +msgid "pip vs easy_install" +msgstr "pip 与 easy_install" + +#: ../../source/discussions/pip-vs-easy-install.rst:9 +msgid "" +":ref:`easy_install `, now `deprecated`_, was released in " +"2004 as part of :ref:`setuptools`. It was notable at the time for " +"installing :term:`packages ` from :term:`PyPI " +"` using requirement specifiers, and " +"automatically installing dependencies." +msgstr "" +":ref:`easy_install `,现在已被 `弃用`_,作为 :ref:`setuptools` 的一部分于 " +"2004 年发布。当时值得注意的是,使用需求说明符从 :term:`PyPI ` 安装 :term:`包 " +"<分发包>`,并自动安装依赖项。" + +#: ../../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 "" +":ref:`pip` 于 2008 年晚些时候出现,作为 :ref:`easy_install ` " +"的替代品,尽管仍然主要构建在 :ref:`setuptools` 组件之上。当时值得注意的是不将软件包安装为 :term:`Eggs `" +" 或来自 :term:`Eggs ` (而是简单地作为来自 :term:`sdists <源分发(或 \"sdist\")>`),并引入" +" :ref:`需求文件 ` 的想法,它使用户能够轻松复制环境。" + +#: ../../source/discussions/pip-vs-easy-install.rst:22 +msgid "" +"Here's a breakdown of the important differences between pip and the " +"deprecated easy_install:" +msgstr "下面是 pip 和被废弃的 easy_install 之间的重要区别的分类:" + +#: ../../source/discussions/pip-vs-easy-install.rst:25 +msgid "**pip**" +msgstr "**pip**" + +#: ../../source/discussions/pip-vs-easy-install.rst:25 +msgid "**easy_install**" +msgstr "**easy_install**" + +#: ../../source/discussions/pip-vs-easy-install.rst:27 +msgid "Installs from :term:`Wheels `" +msgstr "从 :term:`Wheels ` 安装" + +#: ../../source/discussions/pip-vs-easy-install.rst:27 +#: ../../source/discussions/pip-vs-easy-install.rst:38 +#: ../../source/discussions/pip-vs-easy-install.rst:44 +#: ../../source/discussions/pip-vs-easy-install.rst:48 +#: ../../source/discussions/pip-vs-easy-install.rst:54 +#: ../../source/discussions/pip-vs-easy-install.rst:57 +msgid "Yes" +msgstr "有" + +#: ../../source/discussions/pip-vs-easy-install.rst:27 +#: ../../source/discussions/pip-vs-easy-install.rst:30 +#: ../../source/discussions/pip-vs-easy-install.rst:32 +#: ../../source/discussions/pip-vs-easy-install.rst:35 +#: ../../source/discussions/pip-vs-easy-install.rst:38 +#: ../../source/discussions/pip-vs-easy-install.rst:44 +#: ../../source/discussions/pip-vs-easy-install.rst:48 +#: ../../source/discussions/pip-vs-easy-install.rst:51 +#: ../../source/discussions/pip-vs-easy-install.rst:54 +#: ../../source/discussions/pip-vs-easy-install.rst:57 +msgid "No" +msgstr "没有" + +#: ../../source/discussions/pip-vs-easy-install.rst:30 +msgid "Uninstall Packages" +msgstr "卸载软件包" + +#: ../../source/discussions/pip-vs-easy-install.rst:30 +msgid "Yes (``python -m pip uninstall``)" +msgstr "有(``python -m pip uninstall``)" + +#: ../../source/discussions/pip-vs-easy-install.rst:32 +msgid "Dependency Overrides" +msgstr "依赖性覆盖" + +#: ../../source/discussions/pip-vs-easy-install.rst:32 +msgid "Yes (:ref:`Requirements Files `)" +msgstr "有(:ref:`Requirements Files `)" + +#: ../../source/discussions/pip-vs-easy-install.rst:35 +msgid "List Installed Packages" +msgstr "列出已安装的软件包" + +#: ../../source/discussions/pip-vs-easy-install.rst:35 +msgid "Yes (``python -m pip list`` and ``python -m pip freeze``)" +msgstr "有(``python -m pip list`` and ``python -m pip freeze``)" + +#: ../../source/discussions/pip-vs-easy-install.rst:38 +msgid ":pep:`438` Support" +msgstr ":pep:`438` 支持" + +#: ../../source/discussions/pip-vs-easy-install.rst:41 +msgid "Installation format" +msgstr "安装格式" + +#: ../../source/discussions/pip-vs-easy-install.rst:41 +msgid "'Flat' packages with :file:`egg-info` metadata." +msgstr "带有 :file:`egg-info` 元数据的“Flat”包。" + +#: ../../source/discussions/pip-vs-easy-install.rst:41 +msgid "Encapsulated Egg format" +msgstr "封装的 Egg 格式" + +#: ../../source/discussions/pip-vs-easy-install.rst:44 +msgid "sys.path modification" +msgstr "sys.path 修改" + +#: ../../source/discussions/pip-vs-easy-install.rst:48 +msgid "Installs from :term:`Eggs `" +msgstr "从 :term:`Eggs ` 安装" + +#: ../../source/discussions/pip-vs-easy-install.rst:51 +msgid "`pylauncher support`_" +msgstr "`pylauncher 支持`_" + +#: ../../source/discussions/pip-vs-easy-install.rst:51 +msgid "Yes [1]_" +msgstr "有 [1]_" + +#: ../../source/discussions/pip-vs-easy-install.rst:54 +msgid ":ref:`Multi-version Installs`" +msgstr "" + +#: ../../source/discussions/pip-vs-easy-install.rst:57 +msgid "Exclude scripts during install" +msgstr "安装时排除脚本" + +#: ../../source/discussions/pip-vs-easy-install.rst:60 +msgid "per project index" +msgstr "每个项目索引" + +#: ../../source/discussions/pip-vs-easy-install.rst:60 +msgid "Only in virtualenv" +msgstr "仅在 virtualenv 中" + +#: ../../source/discussions/pip-vs-easy-install.rst:60 +msgid "Yes, via setup.cfg" +msgstr "有,通过 setup.cfg" + +#: ../../source/discussions/pip-vs-easy-install.rst:68 +#, fuzzy +msgid "" +"https://setuptools.readthedocs.io/en/latest/deprecated/easy_install.html" +"#natural-script-launcher" +msgstr "" +"https://setuptools.readthedocs.io/en/latest/easy_install.html#natural-" +"script-launcher" + +#: ../../source/discussions/src-layout-vs-flat-layout.rst:3 +msgid "src layout vs flat layout" +msgstr "" + +#: ../../source/discussions/src-layout-vs-flat-layout.rst:5 +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:23 +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:43 +#, fuzzy +msgid "" +"Here's a breakdown of the important behaviour differences between the src" +" layout and the flat layout:" +msgstr "下面是 pip 和被废弃的 easy_install 之间的重要区别的分类:" + +#: ../../source/discussions/src-layout-vs-flat-layout.rst:46 +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:49 +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:54 +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:57 +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:64 +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:68 +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:72 +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:76 +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/wheel-vs-egg.rst:5 +msgid "Wheel vs Egg" +msgstr "Wheel 与 Egg" + +#: ../../source/discussions/wheel-vs-egg.rst:7 +msgid "" +":term:`Wheel` and :term:`Egg` are both packaging formats that aim to " +"support the use case of needing an install artifact that doesn't require " +"building or compilation, which can be costly in testing and production " +"workflows." +msgstr "" +":term:`Wheel` 和 :term:`Egg` " +"都是打包格式,旨在支持不需要构建或编译的安装工件的使用情况,这在测试和生产工作流程中可能是昂贵的。" + +#: ../../source/discussions/wheel-vs-egg.rst:11 +msgid "" +"The :term:`Egg` format was introduced by :ref:`setuptools` in 2004, " +"whereas the :term:`Wheel` format was introduced by :pep:`427` in 2012." +msgstr "" +":term:`Egg` 格式是由 :ref:`setuptools` 在2004年引入的,而 :term:`Wheel` 格式是由 " +":pep:`427` 在 2012 年引入。" + +#: ../../source/discussions/wheel-vs-egg.rst:14 +msgid "" +":term:`Wheel` is currently considered the standard for :term:`built " +"` and :term:`binary ` packaging " +"for Python." +msgstr "" +":term:`Wheel` 目前被认为是 :term:`构建 <构建分发>` 和 :term:`二进制 <二进制分发>` 打包 Python " +"的标准。" + +#: ../../source/discussions/wheel-vs-egg.rst:17 +msgid "" +"Here's a breakdown of the important differences between :term:`Wheel` and" +" :term:`Egg`." +msgstr "下面是关于 :term:`Wheel` 和 :term:`Egg` 之间的重要区别。" + +#: ../../source/discussions/wheel-vs-egg.rst:20 +msgid ":term:`Wheel` has an :pep:`official PEP <427>`. :term:`Egg` did not." +msgstr ":term:`Wheel` 有一个 :pep:`official PEP <427>` 。 :term:`Egg` 没有。" + +#: ../../source/discussions/wheel-vs-egg.rst:22 +msgid "" +":term:`Wheel` is a :term:`distribution ` format, " +"i.e a packaging format. [1]_ :term:`Egg` was both a distribution format " +"and a runtime installation format (if left zipped), and was designed to " +"be importable." +msgstr "" +":term:`Wheel` 是一种 :term:`分发 <分发包>` 格式,也就是一种打包格式。[1]_ :term:`Egg` " +"既是一种发行格式,也是一种运行时的安装格式(如果留下压缩包),并被设计为可导入。" + +#: ../../source/discussions/wheel-vs-egg.rst:26 +msgid "" +":term:`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 "" +":term:`Wheel` 档案不包括 .pyc 文件。因此,当发行版只包含 Python 文件(即没有编译的扩展),并且与 Python 2 和" +" 3 兼容时,wheel 有可能是 \"通用\" 的,类似于 :term:`sdist <源分发(或 \"sdist\")>`。" + +#: ../../source/discussions/wheel-vs-egg.rst:31 +msgid "" +":term:`Wheel` uses :pep:`PEP376-compliant <376>` ``.dist-info`` " +"directories. Egg used ``.egg-info``." +msgstr "" +":term:`Wheel` 使用 :pep:`PEP376-compliant <376>` ``.dist-info`` 目录。Egg 使用 " +"``.egg-info`` 。" + +#: ../../source/discussions/wheel-vs-egg.rst:34 +msgid "" +":term:`Wheel` has a :pep:`richer file naming convention <425>`. A 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 以及系统架构的兼容性。" + +#: ../../source/discussions/wheel-vs-egg.rst:38 +msgid "" +":term:`Wheel` is versioned. Every wheel file contains the version of the " +"wheel specification and the implementation that packaged it." +msgstr ":term:`Wheel` 是有版本的。每个 wheel 文件都包含 wheel 规范的版本和包装它的工具。" + +#: ../../source/discussions/wheel-vs-egg.rst:41 +#, fuzzy +msgid "" +":term:`Wheel` is internally organized by `sysconfig path type " +"`_, " +"therefore making it easier to convert to other formats." +msgstr "" +":term:`Wheel` 在内部是由 `sysconfig 路径类型 " +"`_ " +"组织的,因此更容易转换为其他格式。" + +#: ../../source/discussions/wheel-vs-egg.rst:47 +msgid "" +"Circumstantially, in some cases, wheels can be used as an importable " +"runtime format, although :pep:`this is not officially supported at this " +"time <427#is-it-possible-to-import-python-code-directly-from-a-wheel-" +"file>`." +msgstr "" +"在某些情况下,控制盘可以用作可导入的运行时格式,尽管 :pep:`目前还没有正式支持这一格式 <427#is-it-mable-to-" +"import-python-code-directly-from-a-wheel-file>`。" + +#: ../../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 +#, fuzzy +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 \"frontend\" tool" +" like :ref:`build` can run your chosen build tool's \"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:91 +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:94 +msgid "" +"a ``[project]`` table containing project :doc:`Core Metadata " +"` (name, version, author and so forth); " +"see :doc:`Declaring project metadata ` for more detail" +msgstr "" + +#: ../../source/flow.rst:100 +msgid "a ``[tool]`` table containing tool-specific configuration options" +msgstr "" + +#: ../../source/flow.rst:103 +msgid "Build artifacts" +msgstr "" + +#: ../../source/flow.rst:106 +#, fuzzy +msgid "The source distribution (sdist)" +msgstr "源分发(或 \"sdist\")" + +#: ../../source/flow.rst:108 +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:114 ../../source/flow.rst:138 +msgid "" +"The :ref:`build` package knows how to invoke your build tool to create " +"one of these:" +msgstr "" + +#: ../../source/flow.rst:121 +msgid "Or, your build tool may provide its own interface for creating an sdist." +msgstr "" + +#: ../../source/flow.rst:125 +#, fuzzy +msgid "The built distributions (wheels)" +msgstr "源分发与轮子" + +#: ../../source/flow.rst:127 +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:132 +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:145 +msgid "Or, your build tool may provide its own interface for creating a wheel." +msgstr "" + +#: ../../source/flow.rst:149 +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:154 +#, fuzzy +msgid "Upload to the package distribution service" +msgstr "上传分发档案" + +#: ../../source/flow.rst:156 +msgid "" +"The :ref:`twine` tool can upload build artifacts to PyPI for " +"distribution, using a command like:" +msgstr "" + +#: ../../source/flow.rst:163 +msgid "Or, your build tool may provide its own interface for uploading." +msgstr "" + +#: ../../source/flow.rst:166 +msgid "Download and install" +msgstr "" + +#: ../../source/flow.rst:168 +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:176 +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 "一种特定的 :term:`构建分发`,它包含编译的扩展。" + +#: ../../source/glossary.rst:14 +msgid "Built Distribution" +msgstr "构建分发" + +#: ../../source/glossary.rst:17 +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 " +"distutil's :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)." +msgstr "" +"一个 :term:`分发 <分发包>` 格式包含只需要移动到目标系统上正确位置的文件和元数据,即可安装。:term:`Wheel` " +"是这样一种格式,而 distutil 的 :term:`源分发 <源分发(或 \"sdist\")>` " +"不是,因为它需要一个构建步骤才能安装。这种格式并不意味着必须预编译 Python 文件(:term:`Wheel` 故意不包括编译的 Python" +" 文件)。" + +#: ../../source/glossary.rst:26 +msgid "Distribution Package" +msgstr "分发包" + +#: ../../source/glossary.rst:29 +msgid "" +"A versioned archive file that contains Python :term:`packages `, :term:`modules `, and other resource files that are " +"used to distribute a :term:`Release`. The archive file is what an end-" +"user will download from the internet and install." +msgstr "" +"一个版本化的存档文件包含 Python :term:`包 <导入包>`、:term:`模块` 和其他用于分发 :term:`发行版` " +"的资源文件的版本化存档文件。存档文件是最终用户将从 Internet 下载并安装的文件。" + +#: ../../source/glossary.rst:34 +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\"." +msgstr "" +"分发包更常被称为“包”或“套件”,但是当需要更清楚地防止与 :term:`导入包` " +"混淆时,本指南可能会使用扩展术语(通常也称为“包”)或另一种发行版(例如 Linux 发行版或 Python 语言发行版),通常用单个术语 " +"\"发行版\" 来指代。" + +#: ../../source/glossary.rst:41 +msgid "Egg" +msgstr "" + +#: ../../source/glossary.rst:44 +#, fuzzy +msgid "" +"A :term:`Built Distribution` format introduced by :ref:`setuptools`, " +"which is being replaced by :term:`Wheel`. For details, see :doc:`The " +"Internal Structure of Python Eggs ` " +"and `Python Eggs `_" +msgstr "" +"一个由 :ref:`setuptools` 引入的 :term:`构建分发` 格式,正在被 :term:`Wheel` 取代。详情请见 " +":doc:`Python Eggs 的内部结构 ` 和 `Python " +"Eggs `_" + +#: ../../source/glossary.rst:48 +msgid "Extension Module" +msgstr "扩展模块" + +#: ../../source/glossary.rst:51 +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 "" +"一个用 Python 实现的低级语言编写的 :term:`模块`。对 Python 来说是 C/C++,对 Jython 来说是 " +"Java。通常包含在一个可动态加载的预编译文件中,例如,Unix 上的 Python 扩展是一个共享对象(.so)文件,Windows 上的 " +"Python 扩展是一个 DLL(给出了 .pyd 扩展),或者 Jython 扩展是一个 Java 类文件。" + +#: ../../source/glossary.rst:58 +msgid "Known Good Set (KGS)" +msgstr "已知良好集(KGS)" + +#: ../../source/glossary.rst:61 +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:67 +msgid "Import Package" +msgstr "导入包" + +#: ../../source/glossary.rst:70 +msgid "" +"A Python module which can contain other modules or recursively, other " +"packages." +msgstr "一个Python模块,可以包含其他模块或递归地包含其他包。" + +#: ../../source/glossary.rst:73 +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\"." +msgstr "导入包通常用单个词“包”来指代,但本指南将在需要更清楚地说明时使用扩展术语,以防止与通常也称为“包”的 :term:`分发包` 混淆." + +#: ../../source/glossary.rst:77 +msgid "Module" +msgstr "模块" + +#: ../../source/glossary.rst:80 +msgid "" +"The basic unit of code reusability in Python, existing in one of two " +"types: :term:`Pure Module`, or :term:`Extension Module`." +msgstr "Python 中代码可重用性的基本单元,存在于以下两种类型之一::term:`纯模块` 或 :term:`扩展模块`。" + +#: ../../source/glossary.rst:83 +msgid "Package Index" +msgstr "包索引" + +#: ../../source/glossary.rst:86 +msgid "" +"A repository of distributions with a web interface to automate " +":term:`package ` discovery and consumption." +msgstr "一个带有 Web 界面的发行版存储库,用于自动化 :term:`包 ` 发现和消费。" + +#: ../../source/glossary.rst:89 +msgid "Per Project Index" +msgstr "每个项目索引" + +#: ../../source/glossary.rst:92 +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:96 +msgid "Project" +msgstr "项目" + +#: ../../source/glossary.rst:99 +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:`套件 <分发包>`" + +#: ../../source/glossary.rst:103 +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 "" +"由于大多数项目使用 :pep:`518` ``build-system``、:ref:`distutils` 或 " +":ref:`setuptools` 来创建 :term:`套件 <分发包>`,目前另一种实用的项目定义方式是在项目源目录的根部包含一个 " +":term:`pyproject.toml`, :term:`setup.py`, 或 :term:`setup.cfg` 的东西。" + +#: ../../source/glossary.rst:109 +msgid "" +"Python projects must have unique names, which are registered on " +":term:`PyPI `. Each project will then " +"contain one or more :term:`Releases `, and each release may " +"comprise one or more :term:`distributions `." +msgstr "" +"Python 项目必须具有独特且唯一的名称,这些名字可以在 :term:`PyPI ` " +"上注册。然后每个项目将包含一个或多个 :term:`发行版 ` ,每个版本可能包括一个或多个 :term:`套件 " +"`。" + +#: ../../source/glossary.rst:114 +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:120 +msgid "Pure Module" +msgstr "纯模块" + +#: ../../source/glossary.rst:123 +msgid "" +"A :term:`Module` written in Python and contained in a single ``.py`` file" +" (and possibly associated ``.pyc`` and/or ``.pyo`` files)." +msgstr "" +"一个用 Python 编写的 :term:`模块`,包含在一个 ``.py`` 文件中(可能还有相关的 ``.pyc`` 和/或者 " +"``.pyo`` 文件)。" + +#: ../../source/glossary.rst:126 +msgid "Python Packaging Authority (PyPA)" +msgstr "Python 包装管理局 (PyPA)" + +#: ../../source/glossary.rst:129 +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 "" +"PyPA 是一个工作小组,负责维护 Python 包装中的许多相关项目。他们在 :doc:`pypa.io `, " +"`GitHub `_ 和 `Bitbucket " +"`_ 上托管项目,并在 `distutils-sig 邮件列表 " +"`_ 和 " +"`Python Discourse 论坛 `__ 上讨论问题。" + +#: ../../source/glossary.rst:138 +msgid "Python Package Index (PyPI)" +msgstr "Python 包索引(PyPI)" + +#: ../../source/glossary.rst:141 +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 `_ 是 Python 社区的默认 :term:`包索引` 。所有 Python " +"开发人员都可以使用和分发他们的发行版。" + +#: ../../source/glossary.rst:144 +msgid "pypi.org" +msgstr "pypi.org" + +#: ../../source/glossary.rst:147 +msgid "" +"`pypi.org `_ is the domain name for the :term:`Python " +"Package Index (PyPI)`. It replaced the legacy index domain name, " +"``pypi.python.org``, in 2017. It is powered by :ref:`warehouse`." +msgstr "" +"`pypi.org `_ 是 :term:`Python Package Index (PyPI)` " +"的域名。它在2017年取代了旧的索引域名, ``pypi.python.org`` ,并由 :ref:`warehouse` 提供支持。" + +#: ../../source/glossary.rst:151 +msgid "pyproject.toml" +msgstr "pyproject.toml" + +#: ../../source/glossary.rst:154 +msgid "" +"The tool-agnostic :term:`Project` specification file. Defined in " +":pep:`518`." +msgstr "" + +#: ../../source/glossary.rst:156 +msgid "Release" +msgstr "发行版" + +#: ../../source/glossary.rst:159 +msgid "" +"A snapshot of a :term:`Project` at a particular point in time, denoted by" +" a version identifier." +msgstr "" + +#: ../../source/glossary.rst:162 +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 "" +"发布一个版本可能需要发布多个 :term:`套件 <分发包>`。例如,如果一个项目的 1.0 版本被发布,它可能同时具有源码发布格式和 " +"Windows 安装程序发布格式。" + +#: ../../source/glossary.rst:167 +msgid "Requirement" +msgstr "需求" + +#: ../../source/glossary.rst:170 +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:176 +msgid "Requirement Specifier" +msgstr "" + +#: ../../source/glossary.rst:179 +msgid "" +"A format used by :ref:`pip` to install packages from a :term:`Package " +"Index`. For an EBNF diagram of the format, see the " +"`pkg_resources.Requirement " +"`_ entry in the :ref:`setuptools` docs. 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:186 +msgid "Requirements File" +msgstr "" + +#: ../../source/glossary.rst:189 +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:193 +#: ../../source/guides/distributing-packages-using-setuptools.rst:58 +msgid "setup.py" +msgstr "setup.py" + +#: ../../source/glossary.rst:194 +#: ../../source/guides/distributing-packages-using-setuptools.rst:79 +msgid "setup.cfg" +msgstr "setup.cfg" + +#: ../../source/glossary.rst:197 +msgid "" +"The project specification files for :ref:`distutils` and " +":ref:`setuptools`. See also :term:`pyproject.toml`." +msgstr "" + +#: ../../source/glossary.rst:200 +msgid "Source Archive" +msgstr "" + +#: ../../source/glossary.rst:203 +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:207 +msgid "Source Distribution (or \"sdist\")" +msgstr "源分发(或 \"sdist\")" + +#: ../../source/glossary.rst:210 +msgid "" +"A :term:`distribution ` format (usually generated " +"using ``python setup.py 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`." +msgstr "" +"一个 :term:`套件 <分发包>` 格式(通常使用 ``python setup.py sdist`` 生成),提供元数据和用 " +":ref:`pip` 等工具安装所需的基本源文件,或生成 :term:`构建分发`。" + +#: ../../source/glossary.rst:215 +msgid "System Package" +msgstr "系统包" + +#: ../../source/glossary.rst:218 +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:221 +msgid "Version Specifier" +msgstr "版本说明符" + +#: ../../source/glossary.rst:224 +msgid "" +"The version component of a :term:`Requirement Specifier`. For example, " +"the \">=1.3\" portion of \"foo>=1.3\". :pep:`440` contains a :pep:`full " +"specification <440#version-specifiers>` of the specifiers that Python " +"packaging currently supports. Support for PEP440 was implemented in " +":ref:`setuptools` v8.0 and :ref:`pip` v6.0." +msgstr "" + +#: ../../source/glossary.rst:230 +msgid "Virtual Environment" +msgstr "虚拟环境" + +#: ../../source/glossary.rst:233 +msgid "" +"An isolated Python environment that allows packages to be installed for " +"use by a particular application, rather than being installed system wide." +" For more information, see the section on :ref:`Creating and using " +"Virtual Environments`." +msgstr "" +"一个隔离的 Python 环境,允许安装软件包以供特定的应用程序使用,而不是在系统中安装。更多信息,请参见 :ref:`创建和使用虚拟环境 " +"` 一节。" + +#: ../../source/glossary.rst:237 +msgid "Wheel" +msgstr "Wheel" + +#: ../../source/glossary.rst:240 +msgid "" +"A :term:`Built Distribution` format introduced by :pep:`427`, which is " +"intended to replace the :term:`Egg` format. Wheel is currently supported" +" by :ref:`pip`." +msgstr "" +":term:`构建分发` 格式由 :pep:`427` 引入,旨在取代 :term:`Egg` 格式。 Wheel 目前由 :ref:`pip` " +"支持。" + +#: ../../source/glossary.rst:243 +msgid "Working Set" +msgstr "工作集" + +#: ../../source/glossary.rst:246 +msgid "" +"A collection of :term:`distributions ` available " +"for importing. These are the distributions that are on the `sys.path` " +"variable. At most, one :term:`Distribution ` for a " +"project is possible in a working set." +msgstr "" +"一组 :term:`套件 <分发包>` 的集合,可供导入。这些是在 `sys.path` 变量上的分布。在一个工作集中,一个项目最多可以有一个 " +":term:`套件 <分发包>`。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:3 +msgid "Analyzing PyPI package downloads" +msgstr "分析 PyPI 软件包的下载情况" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:5 +msgid "" +"This section covers how to use the public PyPI download statistics " +"dataset to learn more about downloads of a package (or packages) hosted " +"on PyPI. For example, you can use it to discover the distribution of " +"Python versions used to download a package." +msgstr "" +"本节介绍了如何使用公共的 PyPI 下载统计数据集来了解PyPI上托管的软件包 (packages) " +"的下载情况。例如,您可以用它来发现用于下载软件包的 Python 版本的分布。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:15 +#: ../../source/guides/supporting-windows-using-appveyor.rst:20 +msgid "Background" +msgstr "背景" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:17 +msgid "PyPI does not display download statistics for a number of reasons: [#]_" +msgstr "由于一些原因,PyPI 不显示下载统计数据。[#]_" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:19 +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:24 +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:27 +msgid "``pip``'s download cache (lowers download counts)" +msgstr "``pip`` 的下载缓存(降低下载次数)" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:28 +msgid "Internal or unofficial mirrors (can both raise or lower download counts)" +msgstr "内部或非官方的镜像(既可以提高也可以降低下载量)" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:29 +msgid "Packages not hosted on PyPI (for comparisons sake)" +msgstr "未在 PyPI 上托管的软件包(为了比较)" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:30 +msgid "" +"Unofficial scripts or attempts at download count inflation (raises " +"download counts)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:32 +msgid "Known historical data quality issues (lowers download counts)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:34 +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:38 +msgid "" +"In short, because it's 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:43 +msgid "Public dataset" +msgstr "公共数据集" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:45 +#, fuzzy +msgid "" +"As an alternative, the `Linehaul project `__ streams download logs from PyPI to `Google " +"BigQuery`_ [#]_, where they are stored as a public dataset." +msgstr "" +"作为替代方案,`Linehaul 项目 `_ 将下载日志从 PyPI 流向 " +"`Google BigQuery`_ [#]_ ,在那里它们被存储为一个公共数据集。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:50 +msgid "Getting set up" +msgstr "开始设置" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:52 +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:58 +msgid "Navigate to the `BigQuery web UI`_." +msgstr "导航到 `BigQuery web UI`_。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:59 +msgid "Create a new project." +msgstr "创建一个新的项目。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:60 +msgid "" +"Enable the `BigQuery API " +"`__." +msgstr "" +"启用`BigQuery API `__。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:63 +msgid "" +"For more detailed instructions on how to get started with BigQuery, check" +" out the `BigQuery quickstart guide " +"`__." +msgstr "" +"关于如何开始使用 BigQuery 的更多详细说明,请查看`BigQuery 快速入门指南 " +"`__" +" 。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:69 +msgid "Data schema" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:71 +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:78 +msgid "Column" +msgstr "列" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:78 +#: ../../source/guides/using-manifest-in.rst:67 +#: ../../source/specifications/core-metadata.rst:192 +msgid "Description" +msgstr "描述" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:78 +#: ../../source/specifications/dependency-specifiers.rst:27 +#: ../../source/specifications/direct-url.rst:243 +msgid "Examples" +msgstr "例子" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:80 +msgid "timestamp" +msgstr "时间戳 (timestamp)" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:80 +msgid "Date and time" +msgstr "日期和时间 (Date and time)" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:80 +msgid "``2020-03-09 00:33:03 UTC``" +msgstr "``2020-03-09 00:33:03 UTC``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:82 +msgid "file.project" +msgstr "file.project" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:82 +msgid "Project name" +msgstr "项目名称" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:82 +msgid "``pipenv``, ``nose``" +msgstr "``pipenv``, ``nose``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:84 +msgid "file.version" +msgstr "file.version" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:84 +msgid "Package version" +msgstr "包版本" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:84 +msgid "``0.1.6``, ``1.4.2``" +msgstr "``0.1.6``, ``1.4.2``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:86 +msgid "details.installer.name" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:86 +msgid "Installer" +msgstr "安装程序" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:86 +#, fuzzy +msgid "pip, :ref:`bandersnatch`" +msgstr "pip, `bandersnatch`_" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:88 +msgid "details.python" +msgstr "details.python" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:88 +msgid "Python version" +msgstr "Python 版本" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:88 +msgid "``2.7.12``, ``3.6.4``" +msgstr "``2.7.12``, ``3.6.4``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:93 +msgid "Useful queries" +msgstr "有用的查询" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:95 +msgid "" +"Run queries in the `BigQuery web UI`_ by clicking the \"Compose query\" " +"button." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:97 +msgid "" +"Note that the rows are stored in a partitioned, 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:102 +msgid "Counting package downloads" +msgstr "-计算软件包的下载量" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:104 +msgid "" +"The following query counts the total number of downloads for the project " +"\"pytest\"." +msgstr "下面的查询统计了 \"pytest \" 项目的总下载次数。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:119 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:140 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:168 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:205 +msgid "num_downloads" +msgstr "num_downloads" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:121 +msgid "26190085" +msgstr "26190085" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:124 +msgid "" +"To only count downloads from pip, filter on the " +"``details.installer.name`` column." +msgstr "要想只计算来自 pip 的下载量,可以在 ``details.installer.name`` 列上过滤。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:142 +msgid "24334215" +msgstr "24334215" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:146 +msgid "Package downloads over time" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:148 +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:168 +msgid "month" +msgstr "month" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:170 +msgid "1956741" +msgstr "1956741" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:170 +msgid "2018-01-01" +msgstr "2018-01-01" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:172 +msgid "2344692" +msgstr "2344692" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:172 +msgid "2017-12-01" +msgstr "2017-12-01" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:174 +msgid "1730398" +msgstr "1730398" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:174 +msgid "2017-11-01" +msgstr "2017-11-01" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:176 +msgid "2047310" +msgstr "2047310" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:176 +msgid "2017-10-01" +msgstr "2017-10-01" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:178 +msgid "1744443" +msgstr "1744443" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:178 +msgid "2017-09-01" +msgstr "2017-09-01" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:180 +msgid "1916952" +msgstr "1916952" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:180 +msgid "2017-08-01" +msgstr "2017-08-01" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:184 +msgid "Python versions over time" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:186 +msgid "" +"Extract the Python version from the ``details.python`` column. Warning: " +"This query processes over 500 GB of data." +msgstr "从 ``details.python`` 列中提取 Python 版本。警告:这个查询处理超过 500GB 的数据。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:205 +msgid "python" +msgstr "python" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:207 +msgid "3.7" +msgstr "3.7" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:207 +msgid "18051328726" +msgstr "18051328726" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:209 +msgid "3.6" +msgstr "3.6" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:209 +msgid "9635067203" +msgstr "9635067203" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:211 +msgid "3.8" +msgstr "3.8" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:211 +msgid "7781904681" +msgstr "7781904681" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:213 +msgid "2.7" +msgstr "2.7" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:213 +msgid "6381252241" +msgstr "6381252241" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:215 +msgid "null" +msgstr "空" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:215 +msgid "2026630299" +msgstr "2026630299" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:217 +msgid "3.5" +msgstr "3.5" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:217 +msgid "1894153540" +msgstr "1894153540" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:222 +msgid "Getting absolute links to artifacts" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:224 +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:230 +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:243 +#, fuzzy +msgid "url" +msgstr "url" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:245 +msgid "https://files.pythonhosted.org/packages/eb/45/79be82bdeafcecb9dca474cad4003e32ef8e4a0dec6abbd4145ccb02abe1/sampleproject-1.2.0.tar.gz" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:247 +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:249 +msgid "https://files.pythonhosted.org/packages/63/88/3200eeaf22571f18d2c41e288862502e33365ccbdc12b892db23f51f8e70/sampleproject_nomura-1.2.0.tar.gz" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:251 +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:253 +msgid "https://files.pythonhosted.org/packages/6f/5b/2f3fe94e1c02816fe23c7ceee5292fb186912929e1972eee7fb729fa27af/sampleproject-1.3.1.tar.gz" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:258 +msgid "Caveats" +msgstr "注意事项" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:260 +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:268 +msgid "Additional tools" +msgstr "附加工具" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:270 +msgid "" +"Besides using the BigQuery console, there are some additional tools which" +" may be useful when analyzing download statistics." +msgstr "除了使用 BigQuery 控制台,还有一些额外的工具,在分析下载统计数据时可能很有用。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:274 +msgid "``google-cloud-bigquery``" +msgstr "``google-cloud-bigquery``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:276 +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 "" +"您也可以通过 BigQuery API 和 BigQuery 的官方 Python 客户端库 `google-cloud-bigquery`_ " +"项目,以编程方式访问公共 PyPI 下载统计数据集。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:304 +msgid "``pypinfo``" +msgstr "``pypinfo``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:306 +msgid "" +"`pypinfo`_ is a command-line tool which provides access to the dataset " +"and can generate several useful queries. For example, you can query the " +"total number of download for a package with the command ``pypinfo " +"package_name``." +msgstr "" +"`pypinfo`_ 是一个命令行工具,它提供对数据集的访问,并可以生成一些有用的查询。例如,你可以用 ``pypinfo " +"package_name`` 命令来查询某个软件包的总下载次数。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:310 +msgid "Install `pypinfo`_ using pip." +msgstr "使用 pip 安装 `pypinfo`_ 。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:316 +msgid "Usage:" +msgstr "使用方法:" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:332 +msgid "``pandas-gbq``" +msgstr "``pandas-gbq``" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:334 +msgid "" +"The `pandas-gbq`_ project allows for accessing query results via " +"`Pandas`_." +msgstr "`pandas-gbq`_ 项目允许通过 `Pandas`_ 来访问查询结果。" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:338 +#: ../../source/specifications/binary-distribution-format.rst:463 +#: ../../source/specifications/dependency-specifiers.rst:480 +msgid "References" +msgstr "参考" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:340 +msgid "" +"`PyPI Download Counts deprecation email " +"`__" +msgstr "" +"`PyPI 下载计数的废弃电子邮件 `__" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:341 +msgid "" +"`PyPI BigQuery dataset announcement email " +"`__" +msgstr "" +"`PyPI BigQuery 数据集公告邮件 `__" + +#: ../../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 `simple API`_ for all packages that conform to your " +"naming convention." +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:59 +msgid "Using namespace packages" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:61 +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:89 +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:101 +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:115 +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:121 +msgid "Using package metadata" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:123 +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:127 +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:135 +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:150 +msgid "" +"In this example, ``discovered_plugins`` would be a collection of type " +":class:`importlib.metadata.EntryPoint`:" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:159 +msgid "" +"Now the module of your choice can be imported by executing " +"``discovered_plugins['a'].load()``." +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:162 +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:166 +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/distributing-packages-using-setuptools.rst:5 +msgid "Packaging and distributing projects" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:7 +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:13 +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:17 +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:27 +msgid "Requirements for packaging and distributing" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:28 +msgid "" +"First, make sure you have already fulfilled the :ref:`requirements for " +"installing packages `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:31 +msgid "Install \"twine\" [1]_:" +msgstr "安装 \"twine\" [1]_:" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:45 +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:51 +msgid "Configuring your project" +msgstr "配置您的项目" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:55 +msgid "Initial files" +msgstr "初始文件" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:60 +#, fuzzy +msgid "" +"The most important file is :file:`setup.py` which exists at the root of " +"your project directory. For an example, see the `setup.py " +"`_" +" in the `PyPA sample project `_." +msgstr "" +"最重要的文件是 :file:`setup.py` ,它存在于您项目目录的根部。如果您想有一个例子作为参考,请参阅 `PyPA 样本项目 " +"`_ 的 `setup.py " +"`_ 。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:65 +msgid ":file:`setup.py` serves two primary functions:" +msgstr ":file:`setup.py` 有主要有两个功能:" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:67 +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:73 +msgid "" +"It's the command line interface for running various commands that relate " +"to packaging tasks. To get a listing of available commands, run ``python " +"setup.py --help-commands``." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:81 +#, fuzzy +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 "" +"有关示例,请参阅 `PyPA 示例项目 `_ 中的 " +"`LICENSE.txt " +"`_ 。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:88 +msgid "README.rst / README.md" +msgstr "README.rst / README.md" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:90 +#, fuzzy +msgid "" +"All projects should contain a readme file that covers the goal of the " +"project. The most common format is `reStructuredText " +"`_ with an \"rst\" extension, " +"although this is not a requirement; multiple variants of `Markdown " +"`_ are supported as well " +"(look at ``setup()``'s :ref:`long_description_content_type `" +" argument)." +msgstr "" +"所有项目都应该包含一个涵盖项目目标的 readme 文件。最常见的格式是带有 \"rst \" 扩展名的 `reStructuredText " +"`_ ,尽管这不是必须的;同时也支持 `Markdown " +"`_ 的多种变体(请看 ``setup()`` 的 " +":ref:`long_description_content_type ` 参数)。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:97 +#, fuzzy +msgid "" +"For an example, see `README.md " +"`_ from the " +"`PyPA sample project `_." +msgstr "" +"有关示例,请参阅来自` PyPA样本项目 `_ 的 " +"`README.md " +"`_ 。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:101 +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:110 +msgid "MANIFEST.in" +msgstr "MANIFEST.in" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:112 +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:117 +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:122 +msgid ":file:`MANIFEST.in` does not affect binary distributions such as wheels." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:125 +msgid "LICENSE.txt" +msgstr "LICENSE.txt" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:127 +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 "" +"每个软件包都应该包括一个详细说明发行条款的许可证文件。在许多司法管辖区,没有明确许可证的软件包不能被版权持有人以外的任何人合法使用或分发。如果您不确定选择哪种许可证,你可以使用诸如" +" `GitHub 的选择许可证 `_ 等资源,或者咨询律师。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:133 +#, fuzzy +msgid "" +"For an example, see the `LICENSE.txt " +"`_ from the " +"`PyPA sample project `_." +msgstr "" +"有关示例,请参阅 `PyPA 示例项目 `_ 中的 " +"`LICENSE.txt " +"`_ 。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:138 +msgid "" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:140 +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:144 +#, fuzzy +msgid "" +"For an example, see the `sample " +"`_ package " +"that's included in the `PyPA sample project " +"`_." +msgstr "" +"有关示例,请参阅 `PyPA 示例项目 `_ 中包含的 " +"`sample `_ " +"。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:152 +msgid "setup() args" +msgstr "setup() 参数" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:154 +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:158 +msgid "" +"The most relevant arguments are explained below. 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:167 +#: ../../source/specifications/declaring-project-metadata.rst:33 +#: ../../source/specifications/declaring-project-metadata.rst:55 +#: ../../source/specifications/declaring-project-metadata.rst:65 +msgid "``name``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:173 +msgid "" +"This is the name of your project, determining how your project is listed " +"on :term:`PyPI `. Per :pep:`508`, valid " +"project names must:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:177 +msgid "" +"Consist only of ASCII letters, digits, underscores (``_``), hyphens " +"(``-``), and/or periods (``.``), and" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:179 +msgid "Start & end with an ASCII letter or digit." +msgstr "以一个 ASCII 字母或数字开始和结束。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:181 +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::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:193 +#: ../../source/specifications/declaring-project-metadata.rst:38 +#: ../../source/specifications/declaring-project-metadata.rst:61 +#: ../../source/specifications/declaring-project-metadata.rst:82 +msgid "``version``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:199 +msgid "" +"This is the current version of your project, allowing your users to " +"determine whether or not they have the latest version, and to indicate " +"which specific versions they've tested their own software against." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:203 +msgid "" +"Versions are displayed on :term:`PyPI ` for " +"each release if you publish your project." +msgstr "如果您发布了您的项目,每个版本都会显示在 :term:`PyPI ` 上。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:206 +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:209 +msgid "" +"If the project code itself needs run-time access to the version, the " +"simplest way is to keep the version in both :file:`setup.py` and your " +"code. If you'd rather not duplicate the value, there are a few ways to " +"manage this. See the \":ref:`Single sourcing the version`\" Advanced " +"Topics section." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:217 +#: ../../source/specifications/declaring-project-metadata.rst:48 +#: ../../source/specifications/declaring-project-metadata.rst:98 +msgid "``description``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:225 +msgid "Give a short and long description for your project." +msgstr "为您的项目提供一个简短和长的描述。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:227 +msgid "" +"These values will be displayed on :term:`PyPI ` if you publish your project. On ``pypi.org``, the user interface" +" displays ``description`` in the grey banner and ``long_description`` in " +"the section named \"Project Description\"." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:232 +msgid "" +"``description`` is also displayed in lists of projects. For example, it's" +" visible in the search results pages such as " +"https://pypi.org/search/?q=jupyter, the front-page lists of trending " +"projects and new releases, and the list of projects you maintain within " +"your account profile (such as https://pypi.org/user/jaraco/)." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:238 +msgid "" +"A `content type `_ can be specified with the " +"``long_description_content_type`` argument, which can be one of " +"``text/plain``, ``text/x-rst``, or ``text/markdown``, corresponding to no" +" formatting, `reStructuredText (reST) " +"`_, and the Github-flavored Markdown dialect of " +"`Markdown `_ respectively." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:248 +#, fuzzy +msgid "``url``" +msgstr "url" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:255 +msgid "Give a homepage URL for your project." +msgstr "为您的项目提供一个主页 URL 。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:259 +#, fuzzy +msgid "``author``" +msgstr "作者 (author)" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:266 +msgid "Provide details about the author." +msgstr "提供关于作者的详细信息。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:270 +#: ../../source/specifications/declaring-project-metadata.rst:53 +#: ../../source/specifications/declaring-project-metadata.rst:172 +msgid "``license``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:276 +msgid "" +"The ``license`` argument doesn't have to indicate the license under which" +" your package is being released, although you may optionally do so if you" +" want. If you're using a standard, well-known license, then your main " +"indication can and should be via the ``classifiers`` argument. " +"Classifiers exist for all major open-source licenses." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:282 +msgid "" +"The ``license`` argument is more typically used to indicate differences " +"from well-known licenses, or to include your own, unique license. As a " +"general rule, it's 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/distributing-packages-using-setuptools.rst:290 +#: ../../source/specifications/declaring-project-metadata.rst:46 +#: ../../source/specifications/declaring-project-metadata.rst:262 +msgid "``classifiers``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:319 +msgid "" +"Provide a list of classifiers that categorize your project. For a full " +"listing, see https://pypi.org/classifiers/." +msgstr "提供对您的项目进行分类的分类器列表。有关完整列表,请参阅 https://pypi.org/classifiers/ 。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:322 +msgid "" +"Although the list of classifiers is often used to declare what Python " +"versions a project supports, this information is only used for searching " +"& browsing projects on PyPI, not for installing projects. To actually " +"restrict what Python versions a project can be installed on, use the " +":ref:`python_requires` argument." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:328 +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/distributing-packages-using-setuptools.rst:334 +#: ../../source/specifications/declaring-project-metadata.rst:52 +#: ../../source/specifications/declaring-project-metadata.rst:248 +msgid "``keywords``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:340 +msgid "List keywords that describe your project." +msgstr "列出描述你的项目的关键词。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:344 +#, fuzzy +msgid "``project_urls``" +msgstr "project_urls" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:356 +msgid "" +"List additional relevant URLs about your project. This is the place to " +"link to bug trackers, source repositories, or where to support package " +"development. The string of the key is the exact text that will be " +"displayed on PyPI." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:362 +#, fuzzy +msgid "``packages``" +msgstr "``pandas-gbq``" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:368 +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:377 +msgid "``py_modules``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:383 +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:389 +#, fuzzy +msgid "``install_requires``" +msgstr "install_requires" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:395 +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:399 +msgid "" +"For more on using \"install_requires\" see :ref:`install_requires vs " +"Requirements files`." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:405 +msgid "``python_requires``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:407 +msgid "" +"If your project only runs on certain Python versions, setting the " +"``python_requires`` argument to the appropriate :pep:`440` version " +"specifier string will prevent :ref:`pip` from installing the project on " +"other Python versions. For example, if your package is for Python 3+ " +"only, write::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:414 +msgid "" +"If your package is for Python 2.6, 2.7, and all versions of Python 3 " +"starting with 3.3, write::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:419 +msgid "And so on." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:423 +msgid "" +"Support for this feature is relatively recent. Your project's source " +"distributions and wheels (see :ref:`Packaging Your Project`) must be " +"built using at least version 24.2.0 of :ref:`setuptools` in order for the" +" ``python_requires`` argument to be recognized and the appropriate " +"metadata generated." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:429 +msgid "" +"In addition, only versions 9.0.0 and higher of :ref:`pip` recognize the " +"``python_requires`` metadata. Users with earlier versions of pip will be" +" able to download & install projects on any Python version regardless of " +"the projects' ``python_requires`` values." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:438 +msgid "``package_data``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:447 +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:452 +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:456 +msgid "" +"For more information, see :std:doc:`Including Data Files " +"` from the :std:doc:`setuptools docs " +"`." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:464 +msgid "``data_files``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:470 +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:476 +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:486 +msgid "" +"For more information see the distutils section on :ref:`Installing " +"Additional Files `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:491 +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:498 +#: ../../source/specifications/declaring-project-metadata.rst:59 +msgid "``scripts``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:500 +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:507 +msgid "``entry_points``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:516 +msgid "" +"Use this keyword to specify any plugins that your project provides for " +"any named entry points that may be defined by your project or others that" +" you depend on." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:519 +msgid "" +"For more information, see the section on :ref:`Advertising Behavior " +"` from the " +":ref:`setuptools` docs." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:523 +msgid "The most commonly used entry point is \"console_scripts\" (see below)." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:528 +msgid "``console_scripts``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:538 +msgid "" +"Use ``console_script`` :ref:`entry points ` to register your script interfaces. You can " +"then let the toolchain handle the work of turning these interfaces into " +"actual scripts [2]_. The scripts will be generated during the install of" +" your :term:`distribution `." +msgstr "" +"使用 ``console_script`` :ref:`entry points ` 来注册你的脚本接口。然后你可以让工具链处理将这些接口变成实际脚本的工作 [2]_。脚本将在安装你的" +" :term:`套件 <分发包>` 时生成。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:545 +msgid "" +"For more information, see :doc:`Entry Points " +"` from the :doc:`setuptools docs " +"`." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:551 +msgid "Choosing a versioning scheme" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:554 +msgid "Standards compliance for interoperability" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:556 +msgid "" +"Different Python projects may use different versioning schemes based on " +"the needs of that particular project, but all of them are required to " +"comply with the flexible :pep:`public version scheme <440#public-version-" +"identifiers>` specified in :pep:`440` in order to be supported in tools " +"and libraries like ``pip`` and ``setuptools``." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:562 +msgid "Here are some examples of compliant version numbers::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:573 +msgid "" +"To further accommodate historical variations in approaches to version " +"numbering, :pep:`440` also defines a comprehensive technique for " +":pep:`version normalisation <440#normalization>` that maps variant " +"spellings of different version numbers to a standardised canonical form." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:579 +msgid "Scheme choices" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:582 +msgid "Semantic versioning (preferred)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:584 +msgid "" +"For new projects, the recommended versioning scheme is based on `Semantic" +" Versioning `_, but adopts a different approach to " +"handling pre-releases and build metadata." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:588 +msgid "" +"The essence of semantic versioning is a 3-part MAJOR.MINOR.MAINTENANCE " +"numbering scheme, where the project author increments:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:591 +msgid "MAJOR version when they make incompatible API changes," +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:592 +msgid "" +"MINOR version when they add functionality in a backwards-compatible " +"manner, and" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:593 +msgid "MAINTENANCE version when they make backwards-compatible bug fixes." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:595 +msgid "" +"Adopting this approach as a project author allows users to make use of " +":pep:`\"compatible release\" <440#compatible-release>` specifiers, where " +"``name ~= X.Y`` requires at least release X.Y, but also allows any later " +"release with a matching MAJOR version." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:600 +msgid "" +"Python projects adopting semantic versioning should abide by clauses 1-8 " +"of the `Semantic Versioning 2.0.0 specification `_." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:604 +msgid "Date based versioning" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:606 +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/guides/distributing-packages-using-setuptools.rst:610 +msgid "" +"A key advantage of date based versioning 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/guides/distributing-packages-using-setuptools.rst:613 +msgid "" +"Version numbers for date based projects typically take the form of " +"YEAR.MONTH (for example, ``12.04``, ``15.10``)." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:617 +msgid "Serial versioning" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:619 +msgid "" +"This is the simplest possible versioning scheme, and consists of a single" +" number which is incremented every release." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:622 +msgid "" +"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/guides/distributing-packages-using-setuptools.rst:627 +msgid "Hybrid schemes" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:629 +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/guides/distributing-packages-using-setuptools.rst:635 +msgid "Pre-release versioning" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:637 +msgid "" +"Regardless of the base versioning scheme, pre-releases for a given final " +"release may be published as:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:640 +msgid "zero or more dev releases (denoted with a \".devN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:641 +msgid "zero or more alpha releases (denoted with a \".aN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:642 +msgid "zero or more beta releases (denoted with a \".bN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:643 +msgid "zero or more release candidates (denoted with a \".rcN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:645 +msgid "" +"``pip`` and other modern Python package installers ignore pre-releases by" +" default when deciding which versions of dependencies to install." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:650 +msgid "Local version identifiers" +msgstr "本地版本标识符" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:652 +msgid "" +"Public version identifiers are designed to support distribution via " +":term:`PyPI `. Python's software " +"distribution tools also support the notion of a :pep:`local version " +"identifier <440#local-version-identifiers>`, 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/guides/distributing-packages-using-setuptools.rst:659 +msgid "" +"A local version identifier takes the form ``+``. For example::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:667 +msgid "Working in \"development mode\"" +msgstr "在 「开发模式」(development mode) 下工作" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:669 +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:675 +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:683 +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:690 +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:698 +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:702 +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:707 +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:711 +msgid "Lastly, if you don't want to install any dependencies at all, you can run:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:718 +msgid "" +"For more information, see the :doc:`Development Mode " +"` section of the :doc:`setuptools " +"docs `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:725 +msgid "Packaging your project" +msgstr "包装你的项目" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:727 +msgid "" +"To have your project installable from a :term:`Package Index` like " +":term:`PyPI `, you'll need to create a " +":term:`Distribution ` (aka \":term:`Package " +"`\") for your project." +msgstr "" +"为了让你的项目可以从 :term:`包索引` 中安装,比如 :term:`PyPI `,你需要为你的项目创建一个 :term:`套件 <分发包>` (又称 \" :term:`包 <分发包>` \")。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:732 +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:749 +msgid "Source distributions" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:751 +msgid "" +"Minimally, you should create a :term:`Source Distribution `:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:767 +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:775 +msgid "Wheels" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:777 +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:782 +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:785 +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:788 +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:797 +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:804 +msgid "Pure Python Wheels" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:806 +msgid "" +"*Pure Python Wheels* contain no compiled extensions, and therefore only " +"require a single Python wheel." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:809 +#: ../../source/guides/distributing-packages-using-setuptools.rst:838 +msgid "To build the wheel:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:823 +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:827 +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:833 +msgid "Platform Wheels" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:835 +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:853 +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:859 +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:867 +msgid "Uploading your Project to PyPI" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:869 +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:873 +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:878 +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:883 +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:889 +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:902 +msgid "Create an account" +msgstr "创建一个账户" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:904 +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:908 +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:911 +msgid "" +"Go to https://pypi.org/manage/account/#api-tokens and create a new `API " +"token`_; don't limit its scope to a particular project, since you are " +"creating a new project." +msgstr "" +"到 https://pypi.org/manage/account/#api-tokens 上创建一个新的 `API token`_ " +";不要把其范围限制在一个特定的项目上,因为你正在创建一个新的项目。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:915 +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:918 +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` 文件:" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:927 +msgid "**Be aware that this stores your token in plaintext.**" +msgstr "**请注意,这将以明文形式存储您的令牌。**" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:929 +#: ../../source/guides/migrating-to-pypi-org.rst:74 +#: ../../source/guides/migrating-to-pypi-org.rst:113 +#: ../../source/guides/using-testpypi.rst:83 +msgid "" +"For more details, see the :ref:`specification ` for " +":file:`.pypirc`." +msgstr "有关更多详细信息,请参见 :ref:`规格 ` for :file:`.pypirc`。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:935 +msgid "Upload your distributions" +msgstr "上传您的发行版" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:937 +msgid "" +"Once you have an account you can upload your distributions to :term:`PyPI" +" ` using :ref:`twine`." +msgstr "一旦您有了账户,您就可以使用 :ref:`twine` 将你的发行版上传到 :term:`PyPI `。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:940 +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 "无论项目是否已经存在于 PyPI 上,上传发布版的过程都是一样的——如果它还不存在,那么在上传第一个发布版时,它将被自动创建。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:944 +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:951 +msgid "" +"You can see if your package has successfully uploaded by navigating to " +"the URL ``https://pypi.org/project/`` where " +"``sampleproject`` is the name of your project that you uploaded. It may " +"take a minute or two for your project to appear on the site." +msgstr "" +"您可以通过浏览 URL ``https://pypi.org/project/`` " +"来了解您的软件包是否已经成功上传,其中 ``sampleproject`` 是您上传项目的名称。您的项目可能需要一两分钟才能出现在网站上。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:958 +#: ../../source/tutorials/installing-packages.rst:674 +msgid "" +"Depending on your platform, this may require root or Administrator " +"access. :ref:`pip` is currently considering changing this by `making user" +" installs the default behavior " +"`_." +msgstr "" +"根据你的平台,这可能需要 root 或管理员权限。 :ref:`pip` 目前正在考虑通过 `使用户安装成为默认行为 " +"`_ 来改变这一点。" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:964 +msgid "" +"Specifically, the \"console_script\" approach generates ``.exe`` files on" +" Windows, which are necessary because the OS special-cases ``.exe`` " +"files. Script-execution features like ``PATHEXT`` and the :pep:`Python " +"Launcher for Windows <397>` allow scripts to be used in many cases, but " +"not all." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:5 +msgid "Dropping support for older Python versions" +msgstr "放弃对旧版 Python 的支持" + +#: ../../source/guides/dropping-older-python-versions.rst:7 +msgid "" +"Dropping support for older Python versions is supported by the standard " +":ref:`core-metadata` 1.2 specification via a \"Requires-Python\" " +"attribute." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:9 +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." +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:14 +msgid "" +"This guide is specifically for users of :ref:`setuptools`, other " +"packaging tools such as ``flit`` may offer similar functionality but " +"users will need to consult relevant documentation." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:17 +msgid "Requirements" +msgstr "要求" + +#: ../../source/guides/dropping-older-python-versions.rst:19 +msgid "This workflow requires that:" +msgstr "这个工作流程要求:" + +#: ../../source/guides/dropping-older-python-versions.rst:21 +msgid "The publisher is using the latest version of :ref:`setuptools`," +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:22 +msgid "The latest version of :ref:`twine` is used to upload the package," +msgstr ":ref:`twine` 的最新版本被用来上传软件包," + +#: ../../source/guides/dropping-older-python-versions.rst:23 +msgid "" +"The user installing the package has at least Pip 9.0, or a client that " +"supports the Metadata 1.2 specification." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:26 +msgid "Dealing with the universal wheels" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:28 +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." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:36 +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:48 +msgid "" +"Since it is possible to override the :file:`setup.cfg` settings via CLI " +"flags, make sure that your scripts don't have ``--universal`` in your " +"package creation scripts." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:53 +msgid "Defining the Python version required" +msgstr "定义所需的 Python 版本" + +#: ../../source/guides/dropping-older-python-versions.rst:56 +msgid "1. Download the newest version of Setuptools" +msgstr "1.下载最新版本的 Setuptools" + +#: ../../source/guides/dropping-older-python-versions.rst:58 +msgid "" +"Ensure that before you generate source distributions or binary " +"distributions, you update Setuptools and install twine." +msgstr "确保在生成源码发行版或二进制发行版之前,更新 Setuptools 并安装 twine。" + +#: ../../source/guides/dropping-older-python-versions.rst:60 +msgid "Steps:" +msgstr "步骤:" + +#: ../../source/guides/dropping-older-python-versions.rst:74 +msgid "`setuptools` version should be above 24.0.0." +msgstr "`setuptools` 版本应该在 24.0.0 以上。" + +#: ../../source/guides/dropping-older-python-versions.rst:77 +msgid "2. Specify the version ranges for supported Python distributions" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:79 +msgid "" +"You can specify version ranges and exclusion rules, such as at least " +"Python 3. Or, Python 2.7, 3.4 and beyond." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:81 +#: ../../source/specifications/core-metadata.rst:146 +#: ../../source/specifications/core-metadata.rst:467 +#: ../../source/specifications/core-metadata.rst:491 +#: ../../source/specifications/core-metadata.rst:532 +#: ../../source/specifications/core-metadata.rst:555 +#: ../../source/specifications/core-metadata.rst:588 +#: ../../source/specifications/core-metadata.rst:720 +#: ../../source/specifications/core-metadata.rst:749 +msgid "Examples::" +msgstr "例子::" + +#: ../../source/guides/dropping-older-python-versions.rst:86 +msgid "" +"The way to set those values is within the call to ``setup`` within your " +":file:`setup.py` script. This will insert the ``Requires-Python`` " +"metadata values based on the argument you provide in ``python_requires``." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:101 +msgid "3. Validating the Metadata before publishing" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:103 +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:105 +msgid "" +"This file is generated by 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." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:108 +msgid "You can see the contents of the generated file like this:" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:114 +msgid "Validate that the following is in place, before publishing the package:" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:116 +msgid "" +"If you have upgraded correctly, the Metadata-Version value should be 1.2 " +"or higher." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:117 +msgid "" +"The Requires-Python field is set and matches your specification in " +"setup.py." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:120 +msgid "4. Using Twine to publish" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:122 +msgid "" +"Twine has a number of advantages, apart from being faster it is now the " +"supported method for publishing packages." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:124 +msgid "Make sure you are using the newest version of Twine, at least 1.9." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:127 +msgid "Dropping a Python release" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:129 +msgid "" +"Once you have published a package with the Requires-Python metadata, you " +"can then make a further update removing that Python runtime from support." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:131 +msgid "It must be done in this order for the automated fallback to work." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:133 +msgid "" +"For example, you published the Requires-Python: \">=2.7\" as version " +"1.0.0 of your package." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:135 +msgid "" +"If you were then to update the version string to \">=3.5\", and publish a" +" new version 2.0.0 of your package, any users running Pip 9.0+ from " +"version 2.7 will have version 1.0.0 of the package installed, and any " +">=3.5 users will receive version 2.0.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 use 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 +msgid "" +"For complete documentation of the simple repository protocol, see " +":pep:`503`." +msgstr "" + +#: ../../source/guides/index.rst:8 +msgid "Installing Packages:" +msgstr "" + +#: ../../source/guides/index.rst:19 +msgid "Building and Publishing Projects:" +msgstr "" + +#: ../../source/guides/index.rst:34 +msgid "Miscellaneous:" +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 +#: ../../source/guides/supporting-multiple-python-versions.rst:10 +msgid "2014-12-24" +msgstr "2014-12-24" + +#: ../../source/guides/index-mirrors-and-caches.rst:14 +msgid "" +"Mirroring or caching of PyPI 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:17 +msgid "Three options are available in this area:" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:19 +msgid "pip provides local caching options," +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:20 +msgid "" +"devpi provides higher-level caching option, potentially shared amongst " +"many users or machines, and" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:22 +msgid "" +"bandersnatch provides a local complete mirror of all PyPI :term:`packages" +" `." +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:27 +msgid "Caching with pip" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:29 +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:32 +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:35 +msgid "" +"A variation on the above which pre-builds the installation files for the " +"requirements using :ref:`python -m pip wheel `:" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:45 +msgid "Caching with devpi" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:47 +msgid "" +"devpi is a caching proxy server which you run on your laptop, or some " +"other machine you know will always be available to you. See the `devpi " +"documentation for getting started`__." +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:55 +msgid "Complete mirror with bandersnatch" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:57 +msgid "" +"bandersnatch will set up a complete local mirror of all PyPI " +":term:`packages ` (externally-hosted packages are " +"not mirrored). See the `bandersnatch documentation for getting that " +"going`__." +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:63 +msgid "" +"A benefit of devpi is that it will create a mirror which includes " +":term:`packages ` that are external to PyPI, unlike" +" bandersnatch which will only cache :term:`packages ` hosted on PyPI." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:5 +msgid "Installing scientific packages" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:11 +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:16 +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." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:22 +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:29 +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:35 +msgid "Building from source" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:37 +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:45 +msgid "Linux distribution packages" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:47 +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:51 +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:57 +msgid "Windows installers" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:59 +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:64 +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:67 +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:73 +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:80 +msgid "macOS installers and package managers" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:82 +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:86 +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:92 +msgid "SciPy distributions" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:94 +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:99 +msgid "" +"Some of these distributions may not be compatible with the standard " +"``pip`` and ``virtualenv`` based toolchain." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:103 +#: ../../source/key_projects.rst:627 +msgid "Spack" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:104 +#, fuzzy +msgid "" +"`Spack `_ is a flexible package manager " +"designed to support multiple versions, configurations, platforms, and " +"compilers. It was built to support the needs of large supercomputing " +"centers and scientific application teams, who must often build software " +"many different ways. Spack is not limited to Python; it can install " +"packages for ``C``, ``C++``, ``Fortran``, ``R``, and other languages. It" +" is non-destructive; installing a new version of one package does not " +"break existing installations, so many configurations can coexist on the " +"same system." +msgstr "" +"`Spack `_ " +"是一个灵活的软件包管理器,旨在支持多个版本、配置、平台和编译器。它是为了支持大型超级计算中心和科学应用团队的需要而建立的,因为他们必须经常以多种不同的方式构建软件。Spack" +" 不限于 Python;它可以安装 ``C`` 、 ``C++`` 、 ``Fortran`` 、 ``R`` 和其他语言的软件包。 " +"它是非破坏性的;安装一个包的新版本不会破坏现有的安装,因此许多配置可以在同一个系统上共存。" + +#: ../../source/guides/installing-scientific-packages.rst:113 +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:122 +msgid "The conda cross-platform package manager" +msgstr "conda 跨平台软件包管理器" + +#: ../../source/guides/installing-scientific-packages.rst:124 +#, 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." +msgstr "" +"`Anaconda `_ 是由 Anaconda 公司发布的 Python" +" 发行版。它是一个稳定的开源软件包集合,用于大数据和科学用途。 在 Anaconda " +"的5.0版本中,默认安装了大约200个包,总共有400-500个包可以从 Anaconda 仓库中安装和更新。" + +#: ../../source/guides/installing-scientific-packages.rst:130 +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)." +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:2 +msgid "Installing stand alone command line tools" +msgstr "安装独立命令行工具" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:4 +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:10 +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:15 +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:21 +msgid "pipx only works with Python 3.6+." +msgstr "pipx 只适用于 Python 3.6 以上版本。" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:23 +#, fuzzy +msgid "pipx is installed with pip:" +msgstr "``pipx`` 是用 ``pip`` 安装的:" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:41 +#, fuzzy +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:44 +#, fuzzy +msgid "" +"Now you can install packages with ``pipx install`` and run the package's " +"applications(s) from anywhere." +msgstr "现在您可以用 ``pipx install`` 来安装软件包,并从任何地方访问软件包的入口点。" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:52 +#, fuzzy +msgid "For example:" +msgstr "例如" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:72 +#, fuzzy +msgid "" +"To see a list of packages installed with pipx and which applications are " +"available, use ``pipx list``:" +msgstr "要查看用 pipx 安装的软件包列表,以及哪些命令行界面 (CLI) 应用程序可用,请使用``pipx list``。" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:93 +#, fuzzy +msgid "To upgrade or uninstall a package:" +msgstr "要升级或卸载软件包" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:100 +#, fuzzy +msgid "pipx can be upgraded or uninstalled with pip:" +msgstr "``pipx`` 可以用 pip 升级或卸载" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:116 +#, fuzzy +msgid "" +"pipx also allows you to install and run the latest version of an " +"application in a temporary, ephemeral environment. For example:" +msgstr "``pipx`` 还允许您在一个临时的、短暂的环境中安装和运行最新版本的命令行 (cli) 工具。" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:123 +#, fuzzy +msgid "To see the full list of commands pipx offers, run:" +msgstr "要查看 ``pipx`` 提供的全部命令列表,请运行" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:129 +#, fuzzy +msgid "You can learn more about pipx at https://pypa.github.io/pipx/." +msgstr "您可以在其主页上了解更多关于 ``pipx `` 的信息,https://github.com/pypa/pipx 。" + +#: ../../source/guides/installing-using-linux-tools.rst:5 +msgid "Installing pip/setuptools/wheel with Linux Package Managers" +msgstr "用 Linux 软件包管理器安装 pip/setuptools/wheel" + +#: ../../source/guides/installing-using-linux-tools.rst:8 +#, fuzzy +msgid "2021-07-26" +msgstr "2017-12-01" + +#: ../../source/guides/installing-using-linux-tools.rst:13 +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:16 +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:20 +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:27 +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:34 +msgid "Fedora" +msgstr "Fedora" + +#: ../../source/guides/installing-using-linux-tools.rst:40 +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:48 +msgid "CentOS/RHEL" +msgstr "CentOS/RHEL" + +#: ../../source/guides/installing-using-linux-tools.rst:50 +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:53 +msgid "To install pip and wheel for the system Python, there are two options:" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:55 +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:64 +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:68 +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:77 +msgid "To additionally upgrade setuptools, run:" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:84 +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:88 +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:91 +msgid "" +"For Redhat, see here: " +"https://developers.redhat.com/products/softwarecollections/overview" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:93 +msgid "For CentOS, see here: https://www.softwarecollections.org/en/" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:95 +msgid "Be aware that collections may not contain the most recent versions." +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:97 +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:103 +msgid "For example, for Python 3.4 on CentOS7/RHEL7:" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:111 +msgid "openSUSE" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:118 +msgid "Debian/Ubuntu" +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 "Installing packages using pip and virtual environments" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:4 +msgid "" +"This guide discusses how to install packages using :ref:`pip` and a " +"virtual environment manager: either :ref:`venv` for Python 3 or " +":ref:`virtualenv` for Python 2. These are the lowest-level tools for " +"managing Python packages and are recommended if higher-level tools do not" +" suit your needs." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:9 +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/installing-using-pip-and-virtual-environments.rst:15 +msgid "Installing pip" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:17 +msgid "" +":ref:`pip` is the reference Python package manager. It's used to install " +"and update packages. You'll need to make sure you have the latest version" +" of pip installed." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:24 +msgid "" +"Debian and most other distributions include a `python-pip`_ package; if " +"you want to use the Linux distribution-provided versions of pip, see " +":doc:`/guides/installing-using-linux-tools`." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:28 +msgid "" +"You can also install pip yourself to ensure you have the latest version. " +"It's recommended to use the system pip to bootstrap a user installation " +"of pip:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:37 +#, fuzzy +msgid "" +"Afterwards, you should have the latest version of pip installed in your " +"user site:" +msgstr "确保您安装了最新版本的 PyPA 的 :ref:`build`:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:48 +#, fuzzy +msgid "" +"The Python installers for Windows include pip. You can make sure that pip" +" is up-to-date by running:" +msgstr "Windows 的 Python 安装程序包括 pip。您应该可以用以下方法访问pip:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:57 +msgid "Afterwards, you should have the latest version of pip:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:66 +msgid "Installing virtualenv" +msgstr "安装 virtualenv" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:68 +msgid "" +"If you are using Python 3.3 or newer, the :mod:`venv` module is the " +"preferred way to create and manage virtual environments. venv is included" +" in the Python standard library and requires no additional installation. " +"If you are using venv, you may skip this section." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:74 +msgid "" +":ref:`virtualenv` is used to manage Python packages for different " +"projects. Using virtualenv allows you to avoid installing Python packages" +" globally which could break system tools or other projects. You can " +"install virtualenv using pip." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:95 +msgid "Creating a virtual environment" +msgstr "创建一个虚拟环境" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:97 +msgid "" +":ref:`venv` (for Python 3) and :ref:`virtualenv` (for Python 2) allow you" +" to manage separate package installations for different projects. They " +"essentially allow you to create a \"virtual\" isolated Python " +"installation and install packages into that virtual installation. When " +"you switch projects, you can simply create a new virtual environment and " +"not have to worry about breaking the packages installed in the other " +"environments. It is always recommended to use a virtual environment while" +" developing Python applications." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:106 +msgid "" +"To create a virtual environment, go to your project's directory and run " +"venv. If you are using Python 2, replace ``venv`` with ``virtualenv`` in " +"the below commands." +msgstr "" +"要创建一个虚拟环境,进入您的项目目录并运行 venv 。如果您正在使用 Python2,在下面的命令中把 ``venv`` 改为 " +"``virtualenv`` 。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:122 +msgid "" +"The second argument is the location to create the virtual environment. " +"Generally, you can just create this in your project and call it ``env``." +msgstr "第二个参数是创建虚拟环境的位置。一般来说,您可以直接在您的项目中创建它,并称之为 ``env`` 。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:125 +msgid "venv will create a virtual Python installation in the ``env`` folder." +msgstr "venv 将在 ``env`` 文件夹中创建一个虚拟的 Python 安装。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:127 +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:132 +msgid "Activating a virtual environment" +msgstr "激活一个虚拟环境" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:134 +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`` 。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:151 +#, fuzzy +msgid "" +"You can confirm you're in the virtual environment by checking the " +"location of your Python interpreter:" +msgstr "您可以通过检查您的 Python 解释器的位置来确认您在虚拟环境中,它应该指向 ``env`` 目录。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:166 +msgid "It should be in the ``env`` directory:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:181 +msgid "" +"As long as your virtual environment is activated pip will install " +"packages into that specific environment and you'll be able to import and " +"use packages in your Python application." +msgstr "只要您的虚拟环境被激活,pip 就会将软件包安装到该特定环境中,您就可以在您的 Python 应用程序中导入和使用软件包。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:187 +msgid "Leaving the virtual environment" +msgstr "离开虚拟环境" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:189 +msgid "" +"If you want to switch projects or otherwise leave your virtual " +"environment, simply run:" +msgstr "如果您想切换项目或以其他方式离开你的虚拟环境,只需运行:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:195 +msgid "" +"If you want to re-enter the virtual environment just follow the same " +"instructions above about activating a virtual environment. There's no " +"need to re-create the virtual environment." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:200 +msgid "Installing packages" +msgstr "安装软件包" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:202 +msgid "" +"Now that you're in your virtual environment you can install packages. " +"Let's install the `Requests`_ library from the :term:`Python Package " +"Index (PyPI)`:" +msgstr "" +"现在您在您的虚拟环境中,您可以安装软件包。让我们从 :term:`Python Package Index (PyPI)` 中安装 " +"`Requests`_ 库:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:217 +msgid "pip should download requests and all of its dependencies and install them:" +msgstr "pip应该下载 request 及其所有的依赖项并安装它们:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:238 +msgid "Installing specific versions" +msgstr "安装特定版本" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:240 +msgid "" +"pip allows you to specify which version of a package to install using " +":term:`version specifiers `. For example, to install a" +" specific version of ``requests``:" +msgstr "" +"pip 允许您使用 :term:`版本说明符 ` 来指定安装哪个版本的软件包。例如,要安装一个特定版本的 " +"``requests``:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:256 +msgid "To install the latest ``2.x`` release of requests:" +msgstr "要安装最新的 ``2.x`` 版本的 requests:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:270 +msgid "To install pre-release versions of packages, use the ``--pre`` flag:" +msgstr "要安装预发布(pre-release)版本的软件包,请使用 ``--pre`` 标志:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:286 +msgid "Installing extras" +msgstr "安装附加功能" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:288 +msgid "" +"Some packages have optional `extras`_. You can tell pip to install these " +"by specifying the extra in brackets:" +msgstr "有些软件包有可选的 `额外功能`_ 。你可以通过在括号中指定额外的东西来告诉 pip 安装这些东西:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:308 +msgid "Installing from source" +msgstr "从源文件安装" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:310 +msgid "pip can install a package directly from source, for example:" +msgstr "pip 可以直接从源代码安装一个软件包,例如:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:326 +#, fuzzy +msgid "" +"Additionally, pip can install packages from source in :doc:`development " +"mode `, meaning that changes to " +"the source directory will immediately affect the installed package " +"without needing to re-install:" +msgstr "" +"此外,pip 可以在 `开发模式 `_ " +"下从源码安装软件包,这意味着源码目录的变化将立即影响已安装的软件包,而不需要重新安装:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:345 +msgid "Installing from version control systems" +msgstr "从版本控制系统进行安装" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:347 +msgid "" +"pip can install packages directly from their version control system. For " +"example, you can install directly from a git repository:" +msgstr "pip 可以直接从他们的版本控制系统中安装软件包。例如,你可以直接从 git 仓库中安装:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:354 +msgid "" +"For more information on supported version control systems and syntax, see" +" pip's documentation on :ref:`VCS Support `." +msgstr "关于支持的版本控制系统和语法的更多信息,请参见 pip 的文档::ref:`VCS Support ` 。" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:359 +#: ../../source/tutorials/installing-packages.rst:577 +msgid "Installing from local archives" +msgstr "从本地档案库安装" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:361 +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:376 +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:392 +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:398 +msgid "Using other package indexes" +msgstr "使用其他软件包的索引" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:400 +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 包索引(PyPI)` ,您可以使用 ``--index-url`` 标志:" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:415 +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:432 +#: ../../source/tutorials/installing-packages.rst:397 +msgid "Upgrading packages" +msgstr "升级包" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:434 +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:450 +msgid "Using requirements files" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:452 +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:461 +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:476 +msgid "Freezing dependencies" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:478 +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:493 +msgid "Which will output a list of package specifiers such as:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:509 +msgid "" +"This 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/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 +#, fuzzy +msgid "" +"`reStructuredText `_ (without " +"Sphinx extensions)" +msgstr "" +"`reStructuredText `_ (没有 Sphinx" +" 扩展)" + +#: ../../source/guides/making-a-pypi-friendly-readme.rst:18 +#, fuzzy +msgid "" +"Markdown (`GitHub Flavored Markdown `_ by" +" default, or `CommonMark `_)" +msgstr "" +"Markdown(默认情况下 `GitHub Flavored Markdown " +"`_ ,或`CommonMark " +"`_ )" + +#: ../../source/guides/making-a-pypi-friendly-readme.rst:21 +msgid "" +"It's customary to save your README file in the root of your project, in " +"the same directory as your :file:`setup.py` file." +msgstr "通常将 README 文件保存在项目的根目录中,与 :file:`setup.py` 文件位于同一目录中。" + +#: ../../source/guides/making-a-pypi-friendly-readme.rst:25 +msgid "Including your README in your package's metadata" +msgstr "在软件包的元数据中包含您的 README" + +#: ../../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 "如果您使用 GitHub 风格的 Markdown 来写项目的描述,请确保您升级了以下工具:" + +#: ../../source/guides/making-a-pypi-friendly-readme.rst:60 +msgid "The minimum required versions of the respective tools are:" +msgstr "" + +#: ../../source/guides/making-a-pypi-friendly-readme.rst:62 +msgid "``setuptools >= 38.6.0``" +msgstr "``setuptools >= 38.6.0``" + +#: ../../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 "安装最新版本的 `twine `_ ;需要1.12.0版或更高版本:" + +#: ../../source/guides/making-a-pypi-friendly-readme.rst:121 +msgid "" +"Build the sdist and wheel for your project as described under " +":ref:`Packaging Your Project`." +msgstr "" + +#: ../../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 "迁移到 PyPI.org" + +#: ../../source/guides/migrating-to-pypi-org.rst:8 +#: ../../source/guides/multi-version-installs.rst:8 +#: ../../source/guides/supporting-multiple-python-versions.rst:9 +#: ../../source/guides/supporting-windows-using-appveyor.rst:7 +msgid "Obsolete" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:10 +msgid "" +":term:`pypi.org` is the new, rewritten version of PyPI that has replaced " +"the legacy PyPI code base. It is the default version of PyPI that people " +"are expected to use. These are the tools and processes that people will " +"need to interact with ``PyPI.org``." +msgstr "" +":term:`pypi.org` 是新的、重写的 PyPI 版本,取代了传统的 PyPI 代码库。它是人们期望使用的 PyPI " +"的默认版本。这些是人们与 ``PyPI.org`` 互动所需的工具和流程。" + +#: ../../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 "``pypi.org`` 是2016年9月起的默认上传平台。" + +#: ../../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 "``twine`` 1.8.0" + +#: ../../source/guides/migrating-to-pypi-org.rst:29 +msgid "``setuptools`` 27.0.0" +msgstr "``setuptools`` 27.0.0" + +#: ../../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 "使用 TestPyPI" + +#: ../../source/guides/migrating-to-pypi-org.rst:95 +msgid "" +"Legacy TestPyPI (testpypi.python.org) is no longer available; use " +"`test.pypi.org `_ instead. If you use TestPyPI, " +"you must update your :file:`$HOME/.pypirc` to handle TestPyPI's new " +"location, by replacing ``https://testpypi.python.org/pypi`` with " +"``https://test.pypi.org/legacy/``, for example:" +msgstr "" +"传统的 TestPyPI (testpypi.python.org) 不再可用;请使用 `test.pypi.org " +"`_ 代替。如果您使用 TestPyPI ,您必须更新您的 " +":file:`$HOME/.pypirc` 以处理 TestPyPI 的新位置,例如,用 " +"``https://test.pypi.org/legacy/`` 替换 ``https://testpypi.python.org/pypi``" +" :" + +#: ../../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 "" +"为了帮助减轻针对 PyPI 的垃圾邮件攻击,通过 ``pypi.python.org`` 的新用户注册已于 **2018年2月20日** " +"**关闭**。在``pypi.org``的新用户注册是开放的。" + +#: ../../source/guides/migrating-to-pypi-org.rst:125 +msgid "Browsing packages" +msgstr "浏览软件包" + +#: ../../source/guides/migrating-to-pypi-org.rst:127 +msgid "" +"While ``pypi.python.org`` is may still be used in links from other PyPA " +"documentation, etc, the default interface for browsing packages is " +"``pypi.org``. The domain pypi.python.org now redirects to pypi.org, and " +"may be disabled sometime in the future." +msgstr "" +"虽然 ``pypi.python.org`` 仍可能用于其他 PyPA 文档的链接中使用,但浏览软件包的默认界面是 ``pypi.org`` " +"。pypi.python.org 这个域名现在会重定向到 pypi.org ,并可能在未来某个时候被禁用。" + +#: ../../source/guides/migrating-to-pypi-org.rst:134 +msgid "Downloading packages" +msgstr "下载软件包" + +#: ../../source/guides/migrating-to-pypi-org.rst:136 +msgid "``pypi.org`` is the default host for downloading packages." +msgstr "``pypi.org`` 是下载软件包的默认主机。" + +#: ../../source/guides/migrating-to-pypi-org.rst:139 +msgid "Managing published packages and releases" +msgstr "管理已发布的软件包和版本" + +#: ../../source/guides/migrating-to-pypi-org.rst:141 +msgid "" +"``pypi.org`` provides a fully functional interface for logged in users to" +" manage their published packages and releases." +msgstr "``pypi.org`` 为登录用户提供了一个全功能的界面来管理他们发布的软件包和版本。" + +#: ../../source/guides/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 ``python -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 "" +"有关更多详细信息,请参阅 `pkg_resources 文档 " +"`__ 。" + +#: ../../source/guides/packaging-binary-extensions.rst:5 +msgid "Packaging binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:8 +msgid "2013-12-08" +msgstr "2013-12-08" + +#: ../../source/guides/packaging-binary-extensions.rst:10 +msgid "" +"One of the features of the CPython reference interpreter is that, in " +"addition to allowing the execution of Python code, it also exposes a rich" +" C API for use by other software. One of the most common uses of this C " +"API is to create importable C extensions that allow things which aren't " +"always easy to achieve in pure Python code." +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:20 +msgid "An overview of binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:23 +msgid "Use cases" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:25 +msgid "" +"The typical use cases for binary extensions break down into just three " +"conventional categories:" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:28 +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:39 +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:47 +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:56 +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:61 +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:71 +msgid "Disadvantages" +msgstr "缺点" + +#: ../../source/guides/packaging-binary-extensions.rst:73 +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:80 +msgid "This means that binary extensions:" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:82 +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:85 +msgid "" +"may not be compatible with different builds of the CPython reference " +"interpreter" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:88 +msgid "" +"often will not work correctly with alternative interpreters such as PyPy," +" IronPython or Jython" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:91 +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:96 +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:101 +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:108 +msgid "Alternatives to handcoded accelerator modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:110 +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:115 +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:122 +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:132 +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:141 +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:150 +msgid "Alternatives to handcoded wrapper modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:152 +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:158 +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:162 +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:173 +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:180 +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:186 +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:190 +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:194 +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:208 +msgid "Alternatives for low level system access" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:210 +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:218 +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:227 +msgid "Implementing binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:229 +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:235 +#: ../../source/guides/packaging-binary-extensions.rst:318 +msgid "FIXME" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:237 +msgid "mention the stable ABI (3.2+, link to the CPython C API docs)" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:238 +msgid "mention the module lifecycle" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:239 +msgid "mention the challenges of shared static state and subinterpreters" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:240 +msgid "mention the implications of the GIL for extension modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:241 +msgid "mention the memory allocation APIs in 3.4+" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:243 +msgid "" +"mention again 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:248 +msgid "Building binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:251 +msgid "Building extensions for multiple platforms" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:253 +msgid "" +"If you plan to distribute your extension, you should provide " +":term:`wheels ` for all the platforms you intend to support. For " +"most extensions, this is at least one package per Python version times " +"the number of OS and architectures you 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:263 +msgid "Binary extensions for Windows" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:265 +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:272 +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:280 +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:291 +msgid "Binary extensions for Linux" +msgstr "Linux 的二进制扩展" + +#: ../../source/guides/packaging-binary-extensions.rst:293 +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:299 +msgid "Binary extensions for macOS" +msgstr "macOS 的二进制扩展" + +#: ../../source/guides/packaging-binary-extensions.rst:301 +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:311 +msgid "Publishing binary extensions" +msgstr "发布二进制扩展" + +#: ../../source/guides/packaging-binary-extensions.rst:313 +#, fuzzy +msgid "" +"For interim guidance on this topic, see the discussion in :issue:`this " +"issue <284>`." +msgstr "" +"关于这个主题的临时指导,请参见 `这个问题`_ 中的讨论。" + +#: ../../source/guides/packaging-binary-extensions.rst:320 +msgid "cover publishing as wheel files on PyPI or a custom index server" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:321 +msgid "cover creation of Windows and macOS installers" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:322 +msgid "cover weak linking" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:323 +msgid "" +"mention the fact that Linux distros have a requirement to build from " +"source in their own build systems, so binary-only releases are strongly " +"discouraged" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:329 +msgid "Additional resources" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:331 +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:338 +msgid "Cross-platform wheel generation with scikit-build" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:340 +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:348 +msgid "Introduction to C/C++ extension modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:350 +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:353 +msgid "" +"`What are (c)python extension modules? " +"`_" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:354 +msgid "`Releasing the gil `_" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:355 +msgid "" +"`Writing cpython extension modules using C++ " +"`_" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:3 +msgid "Packaging namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:5 +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:24 +msgid "And you use this package in your code like so::" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:29 +msgid "Then you can break these sub-packages into two separate distributions:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:46 +msgid "Each sub-package can now be separately installed, used, and versioned." +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:48 +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:58 +msgid "Creating a namespace package" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:60 +msgid "" +"There are currently three different approaches to creating namespace " +"packages:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:62 +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:66 +msgid "" +"Use `pkgutil-style namespace packages`_. This is recommended for new " +"packages that need to support Python 2 and 3 and installation via both " +"``pip`` and ``python setup.py install``." +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:69 +msgid "" +"Use `pkg_resources-style namespace packages`_. This method is recommended" +" if you need compatibility with packages already using this method or if " +"your package needs to be zip-safe." +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:73 +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:80 +msgid "Native namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:82 +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:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:97 +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:102 +msgid "" +"Because ``mynamespace`` doesn't contain an :file:`__init__.py`, " +":func:`setuptools.find_packages` won't find the sub-package. You must use" +" :func:`setuptools.find_namespace_packages` instead or explicitly list " +"all packages in your :file:`setup.py`. For example:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:117 +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:123 +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:129 +msgid "pkgutil-style namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:131 +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:136 +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:148 +#: ../../source/guides/packaging-namespace-packages.rst:193 +msgid "" +"The :file:`__init__.py` file for the namespace package needs to contain " +"**only** the following:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:155 +#: ../../source/guides/packaging-namespace-packages.rst:200 +msgid "" +"**Every** distribution that uses the namespace package must include an " +"identical :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:160 +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:170 +msgid "pkg_resources-style namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:172 +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:181 +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:205 +msgid "" +"Some older recommendations advise the following in the namespace package " +":file:`__init__.py`:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:215 +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:222 +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:236 +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:3 +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:5 +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`_." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:15 +msgid "" +"This guide *assumes* that you already have a project that you know how to" +" build distributions for and *it lives on GitHub*." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:19 +msgid "Saving credentials on GitHub" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:21 +msgid "" +"In this guide, we'll demonstrate uploading to both PyPI and TestPyPI, " +"meaning that we'll have two separate sets of credentials. And we'll need " +"to save them in the GitHub repository settings." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:26 +msgid "Let's begin! 🚀" +msgstr "让我们开始吧!🚀" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:28 +msgid "" +"Go to https://pypi.org/manage/account/#api-tokens and create a new `API " +"token`_. If you have the project on PyPI already, limit the token scope " +"to just that project. You can call it something like ``GitHub Actions " +"CI/CD — project-org/project-repo`` in order for it to be easily " +"distinguishable in the token list. **Don't close the page just yet — you " +"won't see that token again.**" +msgstr "" +"进入 https://pypi.org/manage/account/#api-tokens ,创建一个新的 `API token`_ 。如果您在" +" PyPI 上已经有了项目,那么请将令牌的范围限制在该项目上。您可以把它叫做 ``GitHub Actions CI/CD — project-" +"org/project-repo``,以便在 token 列表中容易区分。**先不要关闭页面—您不会再次看到该标记。**" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:37 +msgid "" +"In a separate browser tab or window, go to the ``Settings`` tab of your " +"target repository and then click on `Secrets`_ in the left sidebar." +msgstr "在一个单独的浏览器标签或窗口中,进入你的目标存储库的 ``Settings`` 标签,然后点击左侧边栏的 `Secrets`_ 。" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:40 +msgid "" +"Create a new secret called ``PYPI_API_TOKEN`` and copy-paste the token " +"from the first step." +msgstr "创建一个名为 ``PYPI_API_TOKEN`` 的新 secret ,并复制粘贴第一步中的令牌。" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:42 +msgid "" +"Now, go to https://test.pypi.org/manage/account/#api-tokens and repeat " +"the steps. Save that TestPyPI token on GitHub as ``TEST_PYPI_API_TOKEN``." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:48 +msgid "" +"If you don't have a TestPyPI account, you'll need to create it. It's not " +"the same as a regular PyPI account." +msgstr "如果您没有 TestPyPI 账户,那么您就需要创建它。这和普通的 PyPI 账户不一样。" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:53 +msgid "Creating a workflow definition" +msgstr "创建一个工作流定义" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:55 +msgid "" +"GitHub CI/CD workflows are declared in YAML files stored in the " +"``.github/workflows/`` directory of your repository." +msgstr "GitHub CI/CD工作流程是在 YAML 文件中声明的,它们存储在您仓库的 ``.github/workflows/`` 目录下。" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:58 +msgid "Let's create a ``.github/workflows/publish-to-test-pypi.yml`` file." +msgstr "让我们创建一个 ``.github/workflows/publish-to-test-pypi.yml`` 文件。" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:61 +msgid "" +"Start it with a meaningful name and define the event that should make " +"GitHub run this workflow:" +msgstr "用一个有意义的名字开始,并定义让 GitHub 运行这个工作流程的事件:" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:70 +msgid "Defining a workflow job environment" +msgstr "定义一个工作流程的工作环境" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:72 +#, fuzzy +msgid "" +"Now, let's add initial setup for our job. 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:" +msgstr "现在,让我们为我们的工作添加初始设置。这是一个将执行我们以后定义的命令的过程。在本指南中,我们将使用 Ubuntu 18.04:" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:84 +msgid "Checking out the project and building distributions" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:86 +msgid "Then, add the following under the ``build-n-publish`` section:" +msgstr "然后,在 ``build-n-publish`` 部分添加以下内容:" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:93 +#, fuzzy +msgid "" +"This will download your repository into the CI runner and then install " +"and activate Python 3.10." +msgstr "这将把您的仓库下载到 CI runner 中,然后安装并激活 Python 3.7。" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:96 +msgid "" +"And now we can build dists from source. In this example, we'll use " +"``build`` package, assuming that your project has a ``pyproject.toml`` " +"properly set up (see :pep:`517`/:pep:`518`)." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:103 +msgid "" +"You can use any other method for building distributions as long as it " +"produces ready-to-upload artifacts saved into the ``dist/`` folder." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:107 +msgid "So add this to the steps list:" +msgstr "因此,将此加入到步骤列表中:" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:116 +msgid "Publishing the distribution to PyPI and TestPyPI" +msgstr "在 PyPI 和 TestPyPI 上发布发行版" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:118 +msgid "Finally, add the following steps at the end:" +msgstr "最后,在结尾添加以下步骤:" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:124 +msgid "" +"These two steps use the `pypa/gh-action-pypi-publish`_ GitHub Action: the" +" first one uploads contents of the ``dist/`` folder into TestPyPI " +"unconditionally and the second does that to PyPI, but only if the current" +" commit is tagged." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:131 +msgid "That's all, folks!" +msgstr "就这些了,伙计们!" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:133 +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/single-sourcing-package-version.rst:5 +msgid "Single-sourcing the package version" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:8 +msgid "" +"There are many techniques to maintain a single source of truth for the " +"version number of your project:" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:11 +msgid "" +"Read the file in :file:`setup.py` and get the version. Example (from `pip" +" setup.py `_)::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:38 +msgid "" +"As of the release of setuptools 46.4.0, one can accomplish the same thing" +" by instead placing the following in the project's :file:`setup.cfg` file" +" (replacing \"package\" with the import name of the package):" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:48 +msgid "" +"As of the release of setuptools 61.0.0, one can specify the version " +"dynamically in the project's :file:`pyproject.toml` file." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:60 +msgid "" +"Please be aware that declarative config indicators, including the " +"``attr:`` directive, are not supported in parameters to :file:`setup.py`." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:64 +msgid "" +"Use an external build tool that either manages updating both locations, " +"or offers an API that both locations can use." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:67 +msgid "" +"Few tools you could use, in no particular order, and not necessarily " +"complete: `bump2version `_, " +"`changes `_, `commitizen " +"`_, `zest.releaser " +"`_." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:74 +msgid "" +"Set the value to a ``__version__`` global variable in a dedicated module " +"in your project (e.g. :file:`version.py`), then have :file:`setup.py` " +"read and ``exec`` the value into a variable." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:85 +msgid "" +"Example using this technique: `warehouse " +"`_." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:87 +msgid "" +"Place the value in a simple ``VERSION`` text file and have both " +":file:`setup.py` and the project code read it." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:95 +msgid "" +"An advantage with this technique is that it's not specific to Python. " +"Any tool can read the version." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:100 +msgid "" +"With this approach you must make sure that the ``VERSION`` file is " +"included in all your source and binary distributions (e.g. add ``include " +"VERSION`` to your :file:`MANIFEST.in`)." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:104 +msgid "" +"Set the value in :file:`setup.py`, and have the project code use the " +"``importlib.metadata`` API to fetch the value at runtime. " +"(``importlib.metadata`` was introduced in Python 3.8 and is available to " +"older versions as the ``importlib-metadata`` project.) An installed " +"project's version can be fetched with the API as follows::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:119 +msgid "" +"Be aware that the ``importlib.metadata`` API only knows about what's in " +"the installation metadata, which is not necessarily the code that's " +"currently imported." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:123 +msgid "" +"If a project uses this method to fetch its version at runtime, then its " +"``install_requires`` value needs to be edited to install ``importlib-" +"metadata`` on pre-3.8 versions of Python like so::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:137 +msgid "" +"An older (and less efficient) alternative to ``importlib.metadata`` is " +"the ``pkg_resources`` API provided by ``setuptools``::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:143 +msgid "" +"If a project uses ``pkg_resources`` to fetch its own version at runtime, " +"then ``setuptools`` must be added to the project's ``install_requires`` " +"list." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:147 +msgid "" +"Example using this technique: `setuptools " +"`_." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:150 +msgid "" +"Set the value to ``__version__`` in ``sample/__init__.py`` and import " +"``sample`` in :file:`setup.py`." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:164 +msgid "" +"Although this technique is common, beware that it will fail if " +"``sample/__init__.py`` imports packages from ``install_requires`` " +"dependencies, which will very likely not be installed yet when " +":file:`setup.py` is run." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:170 +msgid "" +"Keep the version number in the tags of a version control system (Git, " +"Mercurial, etc) instead of in the code, and automatically extract it from" +" there using `setuptools_scm `_." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:7 +msgid "Supporting multiple Python versions" +msgstr "支持多个 Python 版本" + +#: ../../source/guides/supporting-multiple-python-versions.rst:39 +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:45 +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:51 +msgid "Automated testing and continuous integration" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:53 +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:58 +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:62 +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:68 +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 "" +"`Travis CI `_ 提供了一个 Linux 和一个 macOS 环境。Linux 环境是 " +"Ubuntu 12.04 LTS 服务器版 64 位,而在撰写本文时 macOS 的版本是 10.9.2。" + +#: ../../source/guides/supporting-multiple-python-versions.rst:71 +#, fuzzy +msgid "" +"`Appveyor `_ provides a Windows environment " +"(Windows Server 2012)." +msgstr "" +"`Appveyor `_ 提供一个 Windows 环境(Windows Server " +"2012)。" + +#: ../../source/guides/supporting-multiple-python-versions.rst:82 +#, fuzzy +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 "" +"`Travis CI`_ 和 Appveyor_ 都需要一个 `YAML `_ " +"格式的文件作为测试的说明规范。如果任何测试失败,可以检查该特定配置的输出日志。" + +#: ../../source/guides/supporting-multiple-python-versions.rst:87 +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:91 +msgid "Tools for single-source Python packages" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:93 +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:102 +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:109 +msgid "a Python 2 (by syntax) module in a Python 3 project." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:110 +msgid "a Python 3 (by syntax) module in a *Python 2* project." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:112 +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:119 +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:126 +msgid "What's in which Python?" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:128 +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:22 +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:26 +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:32 +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:40 +msgid "Setting up" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:42 +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:47 +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:51 +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:56 +msgid "Adding Appveyor support to your project" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:58 +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:63 +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:71 +msgid "appveyor.yml" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:77 +msgid "" +"This file can be downloaded from `here " +"`__." +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:79 +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:82 +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:90 +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:96 +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:99 +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:102 +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:111 +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:116 +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:121 +msgid "Support script" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:123 +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:128 +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:135 +msgid "" +"You can simply download the batch file and include it in your project " +"unchanged." +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:139 +msgid "Access to the built wheels" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:141 +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 "Additional notes" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:152 +msgid "Testing with tox" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:154 +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:158 +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:162 +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:167 +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:172 +msgid "``DISTUTILS_USE_SDK``" +msgstr "``DISTUTILS_USE_SDK``" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:173 +msgid "``MSSdk``" +msgstr "``MSSdk``" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:174 +msgid "``INCLUDE``" +msgstr "``INCLUDE``" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:175 +msgid "``LIB``" +msgstr "``LIB``" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:177 +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:183 +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:190 +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:194 +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:199 +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:205 +msgid "Automatically uploading wheels" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:207 +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:212 +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:218 +msgid "External dependencies" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:220 +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:223 +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:232 +msgid "Support scripts" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:234 +msgid "For reference, the SDK setup support script is listed here:" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:236 +msgid "``appveyor-sample/build.cmd``" +msgstr "``appveyor-sample/build.cmd``" + +#: ../../source/guides/tool-recommendations.rst:5 +msgid "Tool recommendations" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:7 +msgid "" +"If you're familiar with Python packaging and installation, and just want " +"to know what tools are currently recommended, then here it is." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:12 +msgid "Application dependency management" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:14 +msgid "" +"Use :ref:`pip` in a `secure manner`_ to install a Python application and " +"its dependencies during deployment." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:17 +msgid "" +"Use :ref:`virtualenv` or :doc:`venv ` to isolate " +"application-specific dependencies from a shared Python installation. [4]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:20 +msgid "" +"Use `pip-tools`_, :ref:`pipenv`, or `poetry`_ to generate the fully-" +"specified application-specific dependencies, when developing Python " +"applications." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:28 +msgid "Installation tool recommendations" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:30 +msgid "" +"Use :ref:`pip` to install Python :term:`packages ` " +"from :term:`PyPI `. [1]_ [2]_ Depending on " +"how :ref:`pip` is installed, you may need to also install :ref:`wheel` to" +" get the benefit of wheel caching. [3]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:35 +msgid "" +"Use :ref:`virtualenv` or :doc:`venv ` to isolate " +"project-specific dependencies from a shared Python installation. [4]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:38 +msgid "" +"If you're looking for management of fully integrated cross-platform " +"software stacks, consider:" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:41 +msgid ":ref:`buildout`: primarily focused on the web development community" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:43 +msgid "" +":ref:`spack`, :ref:`hashdist`, or :ref:`conda`: primarily focused on the " +"scientific community." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:48 +msgid "Packaging tool recommendations" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:50 +msgid "Use :ref:`setuptools` to define projects. [5]_ [6]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:52 +msgid "" +"Use :ref:`build` to create :term:`Source Distributions ` and :term:`wheels `." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:55 +msgid "" +"If you have binary extensions 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:59 +msgid "" +"Use `twine `_ for uploading distributions" +" to :term:`PyPI `." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:64 +msgid "Publishing platform migration" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:66 +msgid "" +"The original Python Package Index implementation (previously hosted at " +"`pypi.python.org `_) has been phased out in " +"favour of an updated implementation hosted at `pypi.org " +"`_." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:70 +msgid "" +"See :ref:`Migrating to PyPI.org` for more information on the status of " +"the migration, and what settings to change in your clients." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:75 +msgid "" +"There are some cases where you might choose to use ``easy_install`` (from" +" :ref:`setuptools`), e.g. if you need to install from :term:`Eggs ` " +"(which pip doesn't support). For a detailed breakdown, see :ref:`pip vs " +"easy_install`." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:80 +msgid "" +"The acceptance of :pep:`453` means that :ref:`pip` will be available by " +"default in most installations of Python 3.4 or later. See the " +":pep:`rationale section <453#rationale>` from :pep:`453` as for why pip " +"was chosen." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:85 +msgid "" +"`get-pip.py `_ and " +":ref:`virtualenv` install :ref:`wheel`, whereas :ref:`ensurepip` and " +":ref:`venv ` do not currently. Also, the common \"python-pip\" " +"package that's found in various linux distros, does not depend on " +"\"python-wheel\" currently." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:91 +msgid "" +"Beginning with Python 3.4, ``venv`` will create virtualenv environments " +"with ``pip`` installed, thereby making it an equal alternative to " +":ref:`virtualenv`. However, using :ref:`virtualenv` will still be " +"recommended for users that need cross-version consistency." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:96 +msgid "" +"Although you can use pure ``distutils`` for many projects, it does not " +"support defining dependencies on other projects and is missing several " +"convenience utilities for automatically populating distribution metadata " +"correctly that are provided by ``setuptools``. Being outside the standard" +" library, ``setuptools`` also offers a more consistent feature set across" +" different versions of Python, and (unlike ``distutils``), recent " +"versions of ``setuptools`` support all of the modern metadata fields " +"described in :ref:`core-metadata`." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:105 +msgid "" +"Even for projects that do choose to use ``distutils``, when :ref:`pip` " +"installs such projects directly from source (rather than installing from " +"a prebuilt :term:`wheel ` file), it will actually build your " +"project using :ref:`setuptools` instead." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:110 +msgid "" +"`distribute`_ (a fork of setuptools) was merged back into " +":ref:`setuptools` in June 2013, thereby making setuptools the default " +"choice for packaging." +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 "" +"When building a :term:`source distribution ` for your package, by default only a minimal set of files are" +" included. You may find yourself wanting to include extra files in the " +"source distribution, such as an authors/contributors file, a " +":file:`docs/` directory, or a directory of data files used for testing " +"purposes. There may even be extra files that you *need* to include; for " +"example, if your :file:`setup.py` computes your project's " +"``long_description`` by reading from both a README and a changelog file, " +"you'll need to include both those files in the sdist so that people that " +"build or install from the sdist get the correct results." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:17 +msgid "" +"Adding & removing files to & from the source distribution is done by " +"writing a :file:`MANIFEST.in` file at the project root." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:22 +msgid "How files are included in an sdist" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:24 +msgid "The following files are included in a source distribution by default:" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:26 +msgid "" +"all Python source files implied by the ``py_modules`` and ``packages`` " +"``setup()`` arguments" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:28 +msgid "" +"all C source files mentioned in the ``ext_modules`` or ``libraries`` " +"``setup()`` arguments" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:30 +msgid "scripts specified by the ``scripts`` ``setup()`` argument" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:31 +msgid "" +"all files specified by the ``package_data`` and ``data_files`` " +"``setup()`` arguments" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:33 +msgid "" +"the file specified by the ``license_file`` option in :file:`setup.cfg` " +"(setuptools 40.8.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:35 +msgid "" +"all files specified by the ``license_files`` option in :file:`setup.cfg` " +"(setuptools 42.0.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:37 +msgid "all files matching the pattern :file:`test/test*.py`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:38 +msgid ":file:`setup.py` (or whatever you called your setup script)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:39 +msgid ":file:`setup.cfg`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:40 +msgid ":file:`README`" +msgstr ":file:`README`" + +#: ../../source/guides/using-manifest-in.rst:41 +msgid ":file:`README.txt`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:42 +msgid ":file:`README.rst` (Python 3.7+ or setuptools 0.6.27+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:43 +msgid ":file:`README.md` (setuptools 36.4.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:44 +msgid ":file:`pyproject.toml` (setuptools 43.0.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:45 +msgid ":file:`MANIFEST.in`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:47 +msgid "" +"After adding the above files to the sdist, the commands in " +":file:`MANIFEST.in` (if such a file exists) are executed in order to add " +"and remove further files to and from the sdist. Default files can even " +"be removed from the sdist with the appropriate :file:`MANIFEST.in` " +"command." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:52 +msgid "" +"After processing the :file:`MANIFEST.in` file, setuptools removes the " +":file:`build/` directory as well as any directories named :file:`RCS`, " +":file:`CVS`, or :file:`.svn` from the sdist, and it adds a :file:`PKG-" +"INFO` file and an :file:`*.egg-info` directory. This behavior cannot be " +"changed with :file:`MANIFEST.in`." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:60 +msgid ":file:`MANIFEST.in` commands" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:62 +msgid "" +"A :file:`MANIFEST.in` file consists of commands, one per line, " +"instructing setuptools to add or remove some set of files from the sdist." +" The commands are:" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:67 +msgid "Command" +msgstr "命令" + +#: ../../source/guides/using-manifest-in.rst:69 +msgid ":samp:`include {pat1} {pat2} ...`" +msgstr ":samp:`include {pat1} {pat2} ...`" + +#: ../../source/guides/using-manifest-in.rst:69 +msgid "" +"Add all files matching any of the listed patterns (Files must be given as" +" paths relative to the root of the project)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:71 +msgid ":samp:`exclude {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:71 +msgid "" +"Remove all files matching any of the listed patterns (Files must be given" +" as paths relative to the root of the project)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:73 +msgid ":samp:`recursive-include {dir-pattern} {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:73 +msgid "" +"Add all files under directories matching ``dir-pattern`` that match any " +"of the listed patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:74 +msgid ":samp:`recursive-exclude {dir-pattern} {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:74 +msgid "" +"Remove all files under directories matching ``dir-pattern`` that match " +"any of the listed patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:75 +msgid ":samp:`global-include {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:75 +msgid "" +"Add all files anywhere in the source tree matching any of the listed " +"patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:76 +msgid ":samp:`global-exclude {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:76 +msgid "" +"Remove all files anywhere in the source tree matching any of the listed " +"patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:77 +msgid ":samp:`graft {dir-pattern}`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:77 +msgid "Add all files under directories matching ``dir-pattern``" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:78 +msgid ":samp:`prune {dir-pattern}`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:78 +msgid "Remove all files under directories matching ``dir-pattern``" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:81 +msgid "" +"The patterns here are glob-style patterns: ``*`` matches zero or more " +"regular filename characters (on Unix, everything except forward slash; on" +" Windows, everything except backslash and colon); ``?`` matches a single " +"regular filename character, and ``[chars]`` matches any one of the " +"characters between the square brackets (which may contain character " +"ranges, e.g., ``[a-z]`` or ``[a-fA-F0-9]``). Setuptools also has " +"undocumented support for ``**`` matching zero or more characters " +"including forward slash, backslash, and colon." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:89 +msgid "" +"Directory patterns are relative to the root of the project directory; " +"e.g., ``graft example*`` will include a directory named :file:`examples` " +"in the project root but will not include :file:`docs/examples/`." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:93 +msgid "" +"File & directory names in :file:`MANIFEST.in` should be ``/``-separated; " +"setuptools will automatically convert the slashes to the local platform's" +" appropriate directory separator." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:97 +msgid "" +"Commands are processed in the order they appear in the " +":file:`MANIFEST.in` file. For example, given the commands:" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:105 +msgid "" +"the contents of the directory tree :file:`tests` will first be added to " +"the sdist, and then after that all files in the sdist with a ``.pyc``, " +"``.pyo``, or ``.pyd`` extension will be removed from the sdist. If the " +"commands were in the opposite order, then ``*.pyc`` files etc. would be " +"only be removed from what was already in the sdist before adding " +":file:`tests`, and if :file:`tests` happened to contain any ``*.pyc`` " +"files, they would end up included in the sdist because the exclusion " +"happened before they were included." +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 "在 :file:`.pypirc` 中设置 TestPyPI" + +#: ../../source/guides/using-testpypi.rst:75 +msgid "" +"If you want to avoid entering your username, you can configure TestPyPI " +"in your :file:`$HOME/.pypirc`:" +msgstr "" + +#: ../../source/index.rst:3 ../../source/key_projects.rst:216 +msgid "Python Packaging User Guide" +msgstr "Python 包装用户指南" + +#: ../../source/index.rst:5 +msgid "" +"The Python Packaging User Guide (PyPUG) is a collection of tutorials and " +"guides for packaging Python software." +msgstr "Python 包装用户指南(PyPUG)是一个包装 Python 软件的教程和指南的集合。" + +#: ../../source/index.rst:5 +msgid "python, packaging, guide, tutorial" +msgstr "python、包装、指南、教程" + +#: ../../source/index.rst:25 +msgid "" +"Welcome to the *Python Packaging User Guide*, a collection of tutorials " +"and references to help you distribute and install Python packages with " +"modern tools." +msgstr "欢迎来到 *Python 包装用户指南*,这是一个教程和参考资料的集合,帮助你用现代工具分发和安装 Python 包。" + +#: ../../source/index.rst:29 +msgid "" +"This guide is maintained on `GitHub`_ by the :doc:`Python Packaging " +"Authority `. We happily accept any :doc:`contributions and " +"feedback `. 😊" +msgstr "" +"本指南由 :doc:`Python Packaging Authority ` 在 `GitHub`_ " +"上维护。我们很乐意接受任何 :doc:`贡献和反馈 `。 😊" + +#: ../../source/index.rst:36 +msgid "Get started" +msgstr "开始" + +#: ../../source/index.rst:38 +msgid "" +"Essential tools and concepts for working within the Python development " +"ecosystem are covered in our :doc:`tutorials/index` section:" +msgstr "我们的 :doc:`tutorials/index` 部分介绍了在 Python 开发生态系统中工作的基本工具和概念:" + +#: ../../source/index.rst:41 +msgid "" +"To get an overview of the flow used to publish your code, see the " +":doc:`packaging flow `" +msgstr "" + +#: ../../source/index.rst:43 +msgid "" +"To learn how to install packages, see the :doc:`tutorial on installing " +"packages `" +msgstr "要学习如何安装软件包,请参阅 :doc:`安装软件包的教程 `" + +#: ../../source/index.rst:45 +msgid "" +"To learn how to manage dependencies in a version controlled project, see " +"the :doc:`tutorial on managing application dependencies `" +msgstr "" +"要学习如何在版本控制项目中管理依赖关系,请参见 :doc:`管理应用程序依赖关系的教程 `" + +#: ../../source/index.rst:47 +msgid "" +"To learn how to package and distribute your projects, see the " +":doc:`tutorial on packaging and distributing `" +msgstr "要学习如何打包和发布您的项目,请参阅 :doc:`关于打包和发布的教程 `" + +#: ../../source/index.rst:49 +msgid "" +"To get an overview of packaging options for Python libraries and " +"applications, see the :doc:`Overview of Python Packaging `" +msgstr "要获得对 Python 库和应用程序打包选项的概述,请参阅 :doc:`Python 打包概述 `" + +#: ../../source/index.rst:54 +msgid "Learn more" +msgstr "了解更多" + +#: ../../source/index.rst:56 +msgid "Beyond our :doc:`tutorials/index`, this guide has several other resources:" +msgstr "除了我们的 :doc:`tutorials/index` ,本指南还有其他一些资源:" + +#: ../../source/index.rst:58 +msgid "" +"The :doc:`guides/index` section for walk throughs, such as :doc:`guides" +"/installing-using-linux-tools` or :doc:`guides/packaging-binary-" +"extensions`." +msgstr "" +":doc:`guides/index` 部分用于排练,例如 :doc:`guides/installing-using-linux-tools`" +" 或 :doc:`guides/packaging-binary-extensions`。" + +#: ../../source/index.rst:60 +msgid "" +"The :doc:`discussions/index` section for in-depth references on topics " +"such as :doc:`discussions/deploying-python-applications` or " +":doc:`discussions/pip-vs-easy-install`." +msgstr "" +":doc:`discussions/index` 部分,用于深入参考诸如 :doc:`discussions/deploying-python-" +"applications` 或 :doc:`discussions/pip-vs-easy-install` 等主题。" + +#: ../../source/index.rst:62 +msgid "" +"The :doc:`specifications/index` section for packaging interoperability " +"specifications." +msgstr ":doc:`specifications/index` 部分,用于包装互操作性规范。" + +#: ../../source/index.rst:64 +msgid "" +"Additionally, there is a list of :doc:`other projects ` " +"maintained by members of the Python Packaging Authority." +msgstr "此外,还有一个 :doc:`其他项目 ` 的列表,由 Python Packaging Authority 的成员维护。" + +#: ../../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 "PyPA 项目" + +#: ../../source/key_projects.rst:19 +msgid "bandersnatch" +msgstr "" + +#: ../../source/key_projects.rst:21 +msgid "" +"`Issues `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:25 +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)." +msgstr "" + +#: ../../source/key_projects.rst:35 +msgid "build" +msgstr "" + +#: ../../source/key_projects.rst:37 +#, fuzzy +msgid "" +"`Docs ` | `Issues `__ " +"| `GitHub `__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:42 +msgid "" +"``build`` is a :pep:`517` compatible Python package builder. It provides " +"a CLI to build packages, as well as a Python API." +msgstr "``build`` 是 :pep:`517` 兼容的 Python 包构建器。它提供了 CLI 来构建包,以及 Python API。" + +#: ../../source/key_projects.rst:49 +msgid "cibuildwheel" +msgstr "" + +#: ../../source/key_projects.rst:51 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__ | `Discussions " +"`__ | `Discord " +"#cibuildwheel `__" +msgstr "" + +#: ../../source/key_projects.rst:58 +msgid "" +"``cibuildwheel`` is a Python package that builds :term:`wheels ` " +"for all common platforms and Python versions on most CI systems. Also see" +" :ref:`multibuild`." +msgstr "" +"``cibuildwheel`` 是 Python 包,用于为大多数 CI 系统上的所有通用平台和 Python 版本构建 " +":term:`wheels `。也可以查看 :ref:`multibuild`。" + +#: ../../source/key_projects.rst:64 +msgid "distlib" +msgstr "" + +#: ../../source/key_projects.rst:66 +#, fuzzy +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:71 +msgid "" +"``distlib`` is a library which implements low-level functions that relate" +" to packaging and distribution of Python software. ``distlib`` " +"implements several relevant PEPs (Python Enhancement Proposal standards) " +"and is useful for developers of third-party packaging tools to make and " +"upload binary and source :term:`distributions `, " +"achieve interoperability, resolve dependencies, manage package resources," +" and do other similar functions." +msgstr "" +"``distlib`` 是一个库,它实现了与 Python 软件的打包和分发有关的低级函数。``distlib`` 实现了几个相关的 PEPs " +"(Python 增强建议标准),对于第三方打包工具的开发者来说非常有用,可以制作和上传二进制和源码 :term:`套件 " +"<分发包>`,实现互操作性,解决依赖性,管理包资源,以及做其他类似的功能。" + +#: ../../source/key_projects.rst:80 +msgid "" +"Unlike the stricter :ref:`packaging` project (below), which specifically " +"implements modern Python packaging interoperability standards, " +"``distlib`` also attempts to provide reasonable fallback behaviours when " +"asked to handle legacy packages and metadata that predate the modern " +"interoperability standards and fall into the subset of packages that are " +"incompatible with those standards." +msgstr "" +"与更严格 :ref:`packaging` 项目(下面)不同,后者专门实现了现代 Python " +"打包互操作性标准,当被要求处理现代互操作性标准之前的遗留包和元数据时,``distlib`` " +"还试图提供合理的回退行为,这些包和元数据属于与这些标准不兼容的包子集。" + +#: ../../source/key_projects.rst:90 +msgid "flit" +msgstr "flit" + +#: ../../source/key_projects.rst:92 +msgid "" +"`Docs `__ | `Issues " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:96 +#, fuzzy +msgid "" +"Flit provides a simple way to create and upload pure Python packages and " +"modules to PyPI. It focuses on `making the easy things easy `_ for packaging. Flit can generate a configuration file to " +"quickly set up a simple project, build source distributions and wheels, " +"and upload them to PyPI." +msgstr "" +"Flit 提供了简单的方法来上传纯 Python 软件包和模块到 PyPI。它专注于 `让简单的事情变得简单 `_ 的打包。Flit 可以生成配置文件,快速建立简单的项目,构建源码发布和轮子,并将它们上传到 PyPI。" + +#: ../../source/key_projects.rst:101 +msgid "" +"Flit uses ``pyproject.toml`` to configure a project. Flit does not rely " +"on tools such as :ref:`setuptools` to build distributions, or " +":ref:`twine` to upload them to PyPI. Flit requires Python 3, but you can " +"use it to distribute modules for Python 2, so long as they can be " +"imported on Python 3." +msgstr "" +"Flit 使用 ``pyproject.toml`` 来配置项目。Flit 不依赖诸如 :ref:`setuptools` " +"之类的工具来构建发行版,或者 :ref:`twine` 来上传至 PyPI。Flit 需要 Python 3,但你可以用它来发布 Python 2" +" 的模块,只要它们能在 Python 3 上被导入。" + +#: ../../source/key_projects.rst:111 +msgid "hatch" +msgstr "hatch" + +#: ../../source/key_projects.rst:113 +#, fuzzy +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:117 +#, fuzzy +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 build backend Hatchling to " +"configure, version, specify dependencies for, and publish packages to " +"PyPI. Its plugin system allows for easily extending functionality." +msgstr "" +"Hatch 是一个统一的命令行工具,旨在为 Python 开发者方便地管理依赖性和环境隔离。Python 软件包开发者使用 Hatch " +"来配置、发布、指定依赖关系,并向 PyPI 发布软件包。在引擎盖下,它使用 :ref:`twine` 来上传包到 PyPI,使用 " +":ref:`pip` 来下载和安装包。" + +#: ../../source/key_projects.rst:126 +msgid "packaging" +msgstr "" + +#: ../../source/key_projects.rst:128 +#, fuzzy +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:133 +msgid "" +"Core utilities for Python packaging used by :ref:`pip` and " +":ref:`setuptools`." +msgstr "使用 :ref:`pip` 和 :ref:`setuptools`,用于 Python 打包的核心实用程序。" + +#: ../../source/key_projects.rst:135 +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:143 +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:155 +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "pip" +msgstr "" + +#: ../../source/key_projects.rst:157 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:162 +msgid "" +"The most popular tool for installing Python packages, and the one " +"included with modern versions of Python." +msgstr "最流行的安装 Python 软件包的工具,也是现代版本的 Python 所包含的工具。" + +#: ../../source/key_projects.rst:165 +msgid "" +"It provides the essential core features for finding, downloading, and " +"installing packages from PyPI and other Python package indexes, and can " +"be incorporated into a wide range of development workflows via its " +"command-line interface (CLI)." +msgstr "" +"它提供了从 PyPI 和其他 Python 包索引中查找、下载和安装包的基本核心功能,并且可以通过其命令行界面 (CLI) " +"合并到广泛的开发工作流程中。" + +#: ../../source/key_projects.rst:173 +msgid "Pipenv" +msgstr "" + +#: ../../source/key_projects.rst:175 +msgid "" +":doc:`Docs ` | `Source `__ " +"| `Issues `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:180 +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:185 +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 checkes file hashes, to ensure " +"compliance with hash-locked dependency specifiers, and eases " +"uninstallation of packages and dependencies." +msgstr "" + +#: ../../source/key_projects.rst:194 +msgid "Pipfile" +msgstr "" + +#: ../../source/key_projects.rst:196 +msgid "`Source `__" +msgstr "`源码 `__" + +#: ../../source/key_projects.rst:198 +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:205 +msgid "pipx" +msgstr "pipx" + +#: ../../source/key_projects.rst:207 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:211 +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 是一个安装和运行 Python 命令行应用程序的工具,它不会与系统上安装的其他软件包产生依赖性冲突。" + +#: ../../source/key_projects.rst:218 +#, fuzzy +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:222 +msgid "This guide!" +msgstr "本指南!" + +#: ../../source/key_projects.rst:227 +msgid "readme_renderer" +msgstr "" + +#: ../../source/key_projects.rst:229 +#, fuzzy +msgid "" +"`GitHub and docs `__ | `PyPI " +"`__" +msgstr "" +"`GitHub 和文档 `__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:232 +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:243 +msgid "setuptools" +msgstr "setuptools" + +#: ../../source/key_projects.rst:245 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:250 +msgid "" +"setuptools (which includes ``easy_install``) is a collection of " +"enhancements to the Python distutils that allow you to more easily build " +"and distribute Python :term:`distributions `, " +"especially ones that have dependencies on other packages." +msgstr "" +"setuptools(包括 ``easy_install`` )是对 Python distutils 的增强集合,允许你更容易地构建和发布 " +"Python :term:`套件 <分发包>`,特别是那些依赖其他软件包的。" + +#: ../../source/key_projects.rst:255 +msgid "" +"`distribute`_ was a fork of setuptools that was merged back into " +"setuptools (in v0.7), thereby making setuptools the primary choice for " +"Python packaging." +msgstr "" + +#: ../../source/key_projects.rst:262 +msgid "trove-classifiers" +msgstr "" + +#: ../../source/key_projects.rst:264 +msgid "" +"`Issues `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:268 +msgid "" +"trove-classifiers is the canonical source for `classifiers on PyPI " +"`_, which project maintainers use to " +"`systematically describe their projects " +"`_ so that users can better find projects that match their " +"needs on the PyPI." +msgstr "" + +#: ../../source/key_projects.rst:274 +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:288 +msgid "twine" +msgstr "twine" + +#: ../../source/key_projects.rst:290 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:295 +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:305 ../../source/overview.rst:412 +msgid "virtualenv" +msgstr "virtualenv" + +#: ../../source/key_projects.rst:307 +#, fuzzy +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:312 +msgid "" +"virtualenv is a tool which uses the command-line path environment " +"variable to create isolated Python :term:`Virtual Environments `, much as :ref:`venv` does. virtualenv provides additional " +"functionality, compared to :ref:`venv`, by supporting Python 2.7 and by " +"providing convenient features for configuring, maintaining, duplicating, " +"and troubleshooting the virtual environments. For more information, see " +"the section on :ref:`Creating and using Virtual Environments`." +msgstr "" + +#: ../../source/key_projects.rst:325 +msgid "Warehouse" +msgstr "Warehouse" + +#: ../../source/key_projects.rst:327 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:331 +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:339 +msgid "wheel" +msgstr "wheel" + +#: ../../source/key_projects.rst:341 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:346 +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:350 +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:359 +msgid "Non-PyPA Projects" +msgstr "非 PyPA 项目" + +#: ../../source/key_projects.rst:364 +msgid "buildout" +msgstr "buildout" + +#: ../../source/key_projects.rst:366 +msgid "" +"`Docs `__ | `Issues " +"`__ | `PyPI " +"`__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:371 +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:378 +msgid "conda" +msgstr "conda" + +#: ../../source/key_projects.rst:380 +msgid ":doc:`Docs `" +msgstr "" + +#: ../../source/key_projects.rst:382 +msgid "" +"conda is the package management tool for `Anaconda " +"`__ Python installations. Anaconda " +"Python is a distribution from `Anaconda, Inc " +"`__ specifically aimed at " +"the scientific community, and in particular on Windows where the " +"installation of binary extensions is often difficult." +msgstr "" + +#: ../../source/key_projects.rst:389 +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." +msgstr "" + +#: ../../source/key_projects.rst:393 +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." +msgstr "" +"Conda 不从 PyPI 安装软件包,只能从官方的 Anaconda 仓库,或 anaconda.org(用户贡献的 *conda* " +"软件包的地方),或本地(如内网)的软件包服务器安装。然而,请注意 :ref:`pip` 可以被安装到,并与 conda 并肩工作,以管理 " +":term:`套件 <分发包>` 来自 PyPI 的软件包。另外,`conda skeleton " +"`__ 是一个使 Python 包可以被 conda " +"安装的工具,首先从 PyPI 获取它们并修改其元数据。" + +#: ../../source/key_projects.rst:406 +msgid "devpi" +msgstr "" + +#: ../../source/key_projects.rst:408 +#, fuzzy +msgid "" +"`Docs `__ | :gh:`Issues " +"` | `PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:412 +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." +msgstr "" + +#: ../../source/key_projects.rst:420 +msgid "enscons" +msgstr "enscons" + +#: ../../source/key_projects.rst:422 +#, fuzzy +msgid "" +":gh:`Source ` | :gh:`Issues ` | " +"`PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:426 +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:441 +msgid "Hashdist" +msgstr "Hashdist" + +#: ../../source/key_projects.rst:443 +msgid "" +"`Docs `__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:446 +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:458 +#, fuzzy +msgid "meson-python" +msgstr "python" + +#: ../../source/key_projects.rst:460 +#, fuzzy +msgid "" +"`Docs `__ | `GitHub " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:463 +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:473 +msgid "multibuild" +msgstr "multibuild" + +#: ../../source/key_projects.rst:475 +msgid "`GitHub `__" +msgstr "" + +#: ../../source/key_projects.rst:477 +msgid "" +"Multibuild is a set of CI scripts for building and testing Python " +":term:`wheels ` for Linux, macOS, and (less flexibly) Windows. " +"Also see :ref:`cibuildwheel`." +msgstr "" +"Multibuild 是一套 CI 脚本,用于构建和测试 Linux、macOS 和(不太灵活的)Windows 的 Python " +":term:`wheels `。也见 :ref:`cibuildwheel`。" + +#: ../../source/key_projects.rst:483 +msgid "pdm" +msgstr "" + +#: ../../source/key_projects.rst:485 +#, fuzzy +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:489 +msgid "" +"PDM is a modern Python package manager with :pep:`582` support. It " +"installs and manages packages in a similar way to ``npm`` that doesn't " +"need to create a :term:`virtual environment` at all. It also uses " +":term:`pyproject.toml` to store project metadata as defined in " +":pep:`621`." +msgstr "" +"PDM 是一个现代的 Python 软件包管理器,支持 :pep:`582`。它以类似于 ``npm`` " +"的方式安装和管理软件包,完全不需要创建一个 :term:`virtual environment`。它还使用 " +":term:`pyproject.toml` 来存储项目元数据,如 :pep:`621` 所定义。" + +#: ../../source/key_projects.rst:499 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:503 +msgid "" +"pex is both a library and tool for generating :file:`.pex` (Python " +"EXecutable) files, standalone Python environments in the spirit of " +":ref:`virtualenv`. :file:`.pex` files are just carefully constructed zip " +"files with a ``#!/usr/bin/env python`` and special :file:`__main__.py`, " +"and are designed to make deployment of Python applications as simple as " +"``cp``." +msgstr "" +"pex 既是一个库,也是生成 :file:`.pex` (Python EXecutable) 文件的工具,是符合 " +":ref:`virtualenv` 精神的独立的 Python 环境。:file:`.pex` 文件只是精心构建的压缩文件,带有 " +"`#!/usr/bin/env python` 和特殊的 :file:`__main__.py`,旨在使 Python 应用程序的部署像 " +"``cp`` 一样简单。" + +#: ../../source/key_projects.rst:512 +msgid "pip-tools" +msgstr "pip-tools" + +#: ../../source/key_projects.rst:514 +#, fuzzy +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:518 +msgid "" +"pip-tools is a suite of tools meant for Python system administrators and " +"release managers who particularly want to keep their builds deterministic" +" yet stay up to date with new versions of their dependencies. Users can " +"specify particular release of their dependencies via hash, conveniently " +"make a properly formatted list of requirements from information in other " +"parts of their program, update all dependencies (a feature :ref:`pip` " +"currently does not provide), and create layers of constraints for the " +"program to obey." +msgstr "" +"pip-tools 是一套针对 Python " +"系统管理员和发布经理的工具,他们特别希望保持他们的构建是确定的,同时又能保持与新版本的依赖关系的更新。用户可以通过哈希值指定他们依赖的特定版本,方便地从他们程序的其他部分的信息中制作一个正确格式的需求列表,更新所有的依赖(这是" +" :ref:`pip` 目前不提供的功能),并为程序创建服从的约束层。" + +#: ../../source/key_projects.rst:530 +msgid "piwheels" +msgstr "piwheels" + +#: ../../source/key_projects.rst:532 +msgid "" +"`Website `__ | :doc:`Docs ` | " +"`GitHub `__" +msgstr "" + +#: ../../source/key_projects.rst:536 +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:545 +msgid "poetry" +msgstr "poetry" + +#: ../../source/key_projects.rst:547 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:551 +msgid "" +"poetry is a command-line tool to handle dependency installation and " +"isolation as well as building and packaging of Python packages. It uses " +"``pyproject.toml`` and, instead of depending on the resolver " +"functionality within :ref:`pip`, provides its own dependency resolver. It" +" attempts to speed users' experience of installation and dependency " +"resolution by locally caching metadata about dependencies." +msgstr "" +"poetry 是一个命令行工具,用于处理依赖性安装和隔离,以及 Python 包的构建和打包。它使用 " +"``pyproject.toml``,并且不依赖 :ref:`pip` " +"中的解析器功能,而是提供自己的依赖性解析器。它试图通过本地缓存依赖关系的元数据来加速用户的安装和依赖关系的解决。" + +#: ../../source/key_projects.rst:561 +msgid "pypiserver" +msgstr "pypiserver" + +#: ../../source/key_projects.rst:563 +msgid "" +"`Docs " +"`__ | " +"`GitHub `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:567 +msgid "" +"pypiserver is a minimalist application that serves as a private Python " +"package index within organizations, implementing a simple API and browser" +" interface. You can upload private packages using standard upload tools, " +"and users can download and install them with :ref:`pip`, without " +"publishing them publicly. Organizations who use pypiserver usually " +"download packages both from pypiserver and from PyPI." +msgstr "" +"pypiserver 是一个简约的应用程序,作为组织内的私有 Python 包索引,实现了一个简单的 API " +"和浏览器界面。您可以使用标准的上传工具上传私有软件包,用户可以使用 :ref:`pip` 下载和安装它们,而不用公开发布。使用 " +"pypiserver 的组织通常既从 pypiserver 也从 PyPI 下载软件包。" + +#: ../../source/key_projects.rst:577 +msgid "PyScaffold" +msgstr "" + +#: ../../source/key_projects.rst:579 +#, fuzzy +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:583 +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:595 +msgid "scikit-build" +msgstr "scikit-build" + +#: ../../source/key_projects.rst:597 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:601 +msgid "" +"Scikit-build is an improved build system generator for CPython " +"C/C++/Fortran/Cython extensions that integrates with :ref:`setuptools`, " +":ref:`wheel` and :ref:`pip`. It internally 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:613 +msgid "shiv" +msgstr "shiv" + +#: ../../source/key_projects.rst:615 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:619 +msgid "" +"shiv is a command line utility for building fully self contained Python " +"zipapps as outlined in :pep:`441`, but with all their dependencies " +"included. Its primary goal is making distributing Python applications and" +" command line tools fast & easy." +msgstr "" +"shiv 是一个命令行工具,用于构建完全自包含的 Python zipapps,如 :pep:`441` " +"中所述,但包含了所有的依赖。它的主要目标是使分发 Python 应用程序和命令行工具变得快速和简单。" + +#: ../../source/key_projects.rst:629 +msgid "" +":doc:`Docs ` | `GitHub `__ |" +" `Paper `__ | `Slides " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:634 +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:642 +msgid "" +"Spack is not in PyPI (yet), but it requires no installation and can be " +"used immediately after cloning from GitHub." +msgstr "Spack 不在 PyPI 中(目前),但它不需要安装,从 GitHub 克隆后可以立即使用。" + +#: ../../source/key_projects.rst:648 +msgid "zest.releaser" +msgstr "zest.releaser" + +#: ../../source/key_projects.rst:650 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" +"`文档 `__ | `GitHub " +"`__ | `PyPI " +"`__" + +#: ../../source/key_projects.rst:654 +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:661 +msgid "Standard Library Projects" +msgstr "" + +#: ../../source/key_projects.rst:666 +msgid "ensurepip" +msgstr "ensurepip" + +#: ../../source/key_projects.rst:668 +#, fuzzy +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" +"`文档 `__ | `Issues " +"`__" + +#: ../../source/key_projects.rst:671 +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:680 +msgid "distutils" +msgstr "distutils" + +#: ../../source/key_projects.rst:682 +#, fuzzy +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" +"`文档 `__ | `Issues " +"`__" + +#: ../../source/key_projects.rst:685 +msgid "" +"The original Python packaging system, added to the standard library in " +"Python 2.0." +msgstr "" + +#: ../../source/key_projects.rst:688 +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` is now 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:701 +msgid "venv" +msgstr "venv" + +#: ../../source/key_projects.rst:703 +#, fuzzy +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" +"`文档 `__ | `Issues " +"`__" + +#: ../../source/key_projects.rst:706 +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 "" +"Python 标准库中的一个包(从 Python 3.3 开始),用于创建 :term:`Virtual Environments " +"`。 更多信息,请参见 :ref:`Creating and using Virtual " +"Environments` 一节。" + +#: ../../source/news.rst:2 +msgid "News" +msgstr "新闻" + +#: ../../source/news.rst:5 +msgid "September 2019" +msgstr "2019年9月" + +#: ../../source/news.rst:6 +msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" +msgstr "" + +#: ../../source/news.rst:9 +msgid "August 2019" +msgstr "" + +#: ../../source/news.rst:10 +msgid "Updated to use :file:`python3 -m` when installing pipx. (:pr:`631`)" +msgstr "" + +#: ../../source/news.rst:13 +msgid "July 2019" +msgstr "" + +#: ../../source/news.rst:14 +msgid "Marked all PEP numbers with the :pep: role. (:pr:`629`)" +msgstr "" + +#: ../../source/news.rst:15 +msgid "Upgraded Sphinx version and removed pypa.io intersphinx. (:pr:`625`)" +msgstr "" + +#: ../../source/news.rst:16 +msgid "Mentioned :file:`find_namespace_packages`. (:pr:`622`)" +msgstr "" + +#: ../../source/news.rst:17 +msgid "Updated directory layout examples for consistency. (:pr:`611`)" +msgstr "" + +#: ../../source/news.rst:18 +msgid "Updated Bandersnatch link to GitHub. (:pr:`623`)" +msgstr "" + +#: ../../source/news.rst:21 +msgid "June 2019" +msgstr "" + +#: ../../source/news.rst:22 +msgid "Fixed some typos. (:pr:`620`)" +msgstr "" + +#: ../../source/news.rst:25 +msgid "May 2019" +msgstr "" + +#: ../../source/news.rst:26 +msgid "Added :file:`python_requires` usage to packaging tutorial. (:pr:`613`)" +msgstr "" + +#: ../../source/news.rst:27 +msgid "Added a MANIFEST.in guide page. (:pr:`609`)" +msgstr "" + +#: ../../source/news.rst:30 +msgid "April 2019" +msgstr "" + +#: ../../source/news.rst:31 +msgid "Added a mention for :file:`shiv` in the key projects section. (:pr:`608`)" +msgstr "" + +#: ../../source/news.rst:32 +msgid "Reduced emphasis on virtualenv. (:pr:`606`)" +msgstr "" + +#: ../../source/news.rst:35 +msgid "March 2019" +msgstr "" + +#: ../../source/news.rst:36 +msgid "Moved single-sourcing guide version option to Python 3. (:pr:`605`)" +msgstr "" + +#: ../../source/news.rst:37 +msgid "Covered RTD details for contributing. (:pr:`600`)" +msgstr "" + +#: ../../source/news.rst:40 +msgid "February 2019" +msgstr "" + +#: ../../source/news.rst:41 +msgid "" +"Elaborate upon the differences between the tutorial and the real " +"packaging process. (:pr:`602`)" +msgstr "" + +#: ../../source/news.rst:42 +msgid "Added instructions to install Python CLI applications. (:pr:`594`)" +msgstr "" + +#: ../../source/news.rst:45 +msgid "January 2019" +msgstr "" + +#: ../../source/news.rst:46 +msgid "Added :file:`--no-deps` to the packaging tutorial. (:pr:`593`)" +msgstr "" + +#: ../../source/news.rst:47 +msgid "Updated Sphinx and Nox. (:pr:`591`)" +msgstr "" + +#: ../../source/news.rst:48 +msgid "Referenced Twine from Python3. (:pr:`581`)" +msgstr "" + +#: ../../source/news.rst:51 +msgid "December 2018" +msgstr "" + +#: ../../source/news.rst:52 +msgid "No programmers in the office!" +msgstr "" + +#: ../../source/news.rst:55 +msgid "November 2018" +msgstr "" + +#: ../../source/news.rst:56 +msgid "Removed landing page link to PyPI migration guide. (:pr:`575`)" +msgstr "" + +#: ../../source/news.rst:57 +msgid "Changed bumpversion to bump2version. (:pr:`572`)" +msgstr "" + +#: ../../source/news.rst:58 +msgid "Added single-sourcing package version example. (:pr:`573`)" +msgstr "" + +#: ../../source/news.rst:59 +msgid "Added a guide for creating documentation. (:pr:`568`)" +msgstr "" + +#: ../../source/news.rst:62 +msgid "October 2018" +msgstr "" + +#: ../../source/news.rst:63 +msgid "Updated Nox package name. (:pr:`566`)" +msgstr "" + +#: ../../source/news.rst:64 +msgid "Mentioned Sphinx extensions in guides. (:pr:`562`)" +msgstr "" + +#: ../../source/news.rst:67 +msgid "September 2018" +msgstr "" + +#: ../../source/news.rst:68 +msgid "Added a section on checking RST markup. (:pr:`554`)" +msgstr "" + +#: ../../source/news.rst:69 +msgid "Updated user installs page. (:pr:`558`)" +msgstr "" + +#: ../../source/news.rst:70 +msgid "Updated Google BigQuery urls. (:pr:`556`)" +msgstr "" + +#: ../../source/news.rst:71 +msgid "Replaced tar command with working command. (:pr:`552`)" +msgstr "" + +#: ../../source/news.rst:72 +msgid "Changed to double quotes in the pip install SomeProject==1.4. (:pr:`550`)" +msgstr "" + +#: ../../source/news.rst:75 +msgid "August 2018" +msgstr "" + +#: ../../source/news.rst:76 +msgid "Removed the recommendation to store passwords in cleartext. (:pr:`546`)" +msgstr "" + +#: ../../source/news.rst:77 +msgid "" +"Moved the Overview to a task based lead in along with the others. " +"(:pr:`540`)" +msgstr "" + +#: ../../source/news.rst:78 +msgid "Updated Python version supported by virtualenv. (:pr:`538`)" +msgstr "" + +#: ../../source/news.rst:79 +msgid "Added outline/rough draft of new Overview page. (:pr:`519`)" +msgstr "" + +#: ../../source/news.rst:82 +msgid "July 2018" +msgstr "" + +#: ../../source/news.rst:84 +msgid "Improved binary extension docs. (:pr:`531`)" +msgstr "" + +#: ../../source/news.rst:85 +msgid "Added scikit-build to key projects. (:pr:`530`)" +msgstr "" + +#: ../../source/news.rst:88 +msgid "June 2018" +msgstr "" + +#: ../../source/news.rst:90 +msgid "Fixed categories of interop PEP for pypa.io. (:pr:`527`)" +msgstr "" + +#: ../../source/news.rst:91 +msgid "Updated Markdown descriptions explanation. (:pr:`522`)" +msgstr "" + +#: ../../source/news.rst:94 +msgid "May 2018" +msgstr "" + +#: ../../source/news.rst:96 +msgid "Noted issues with Provides-Dist and Obsoletes-Dist. (:pr:`513`)" +msgstr "" + +#: ../../source/news.rst:97 +msgid "" +"Removed outdated warning about Python version mixing with Pipenv. " +"(:pr:`501`)" +msgstr "" + +#: ../../source/news.rst:98 +msgid "Simplified packaging tutorial. (:pr:`498`)" +msgstr "" + +#: ../../source/news.rst:99 +msgid "Updated Windows users instructions for clarity. (:pr:`493`)" +msgstr "" + +#: ../../source/news.rst:100 +msgid "Updated the license section description for completeness. (:pr:`492`)" +msgstr "" + +#: ../../source/news.rst:101 +msgid "Added specification-style document to contributing section. (:pr:`489`)" +msgstr "" + +#: ../../source/news.rst:102 +msgid "Added documentation types to contributing guide. (:pr:`485`)" +msgstr "" + +#: ../../source/news.rst:105 +msgid "April 2018" +msgstr "" + +#: ../../source/news.rst:107 +msgid "Added README guide. (:pr:`461`)" +msgstr "" + +#: ../../source/news.rst:108 +msgid "Updated instructions and status for PyPI launch. (:pr:`475`)" +msgstr "" + +#: ../../source/news.rst:109 +msgid "Added instructions for Warehouse. (:pr:`471`)" +msgstr "" + +#: ../../source/news.rst:110 +msgid "Removed GPG references from publishing tutorial. (:pr:`466`)" +msgstr "" + +#: ../../source/news.rst:111 +msgid "Added 'What’s in which Python 3.4–3.6?'. (:pr:`468`)" +msgstr "" + +#: ../../source/news.rst:112 +msgid "Added a guide for phasing out Python versions. (:pr:`459`)" +msgstr "" + +#: ../../source/news.rst:113 +msgid "Made default Description-Content-Type variant GFM. (:pr:`462`)" +msgstr "" + +#: ../../source/news.rst:116 +msgid "March 2018" +msgstr "" + +#: ../../source/news.rst:118 +msgid "Updated \"installing scientific packages\". (:pr:`455`)" +msgstr "" + +#: ../../source/news.rst:119 +msgid "Added :file:`long_description_content_type` to follow PEP 556. (:pr:`457`)" +msgstr "" + +#: ../../source/news.rst:120 +msgid "Clarified a long description classifier on pypi.org. (:pr:`456`)" +msgstr "" + +#: ../../source/news.rst:121 +msgid "Updated Core Metadata spec to follw PEP 556. (:pr:`412`)" +msgstr "" + +#: ../../source/news.rst:124 +msgid "February 2018" +msgstr "" + +#: ../../source/news.rst:126 +msgid "" +"Added python3-venv and python3-pip to Debian installation instructions. " +"(:pr:`445`)" +msgstr "" + +#: ../../source/news.rst:127 +msgid "Updated PyPI migration info. (:pr:`439`)" +msgstr "" + +#: ../../source/news.rst:128 +msgid "Added a warning about managing multiple versions with pipenv. (:pr:`430`)" +msgstr "" + +#: ../../source/news.rst:129 +msgid "Added example of multiple emails to Core Metadata. (:pr:`429`)" +msgstr "" + +#: ../../source/news.rst:130 +msgid "Added explanation of \"legacy\" in test.pypi.org/legacy. (:pr:`426`)" +msgstr "" + +#: ../../source/news.rst:133 +msgid "January 2018" +msgstr "2018年1月" + +#: ../../source/news.rst:135 +msgid "Added a link to PyPI's list of classifiers. (:pr:`425`)" +msgstr "添加了一个指向 PyPI 分类器列表的链接。(:pr:`425`)" + +#: ../../source/news.rst:136 +msgid "Updated README.rst explanation. (:pr:`419`)" +msgstr "更新了 README.rst 的解释。(:pr:`419`)" + +#: ../../source/news.rst:139 +msgid "December 2017" +msgstr "2017年12月" + +#: ../../source/news.rst:141 +msgid "" +"Replaced :file:`~` with :file:`$HOME` in guides and tutorials. " +"(:pr:`418`)" +msgstr "" + +#: ../../source/news.rst:142 +msgid "Noted which fields can be used with environment markers. (:pr:`416`)" +msgstr "" + +#: ../../source/news.rst:143 +msgid "Updated Requires-Python section. (:pr:`414`)" +msgstr "" + +#: ../../source/news.rst:144 +msgid "Added news page. (:pr:`404`)" +msgstr "" + +#: ../../source/news.rst:147 +msgid "November 2017" +msgstr "" + +#: ../../source/news.rst:149 +msgid "" +"Introduced a new dependency management tutorial based on Pipenv. " +"(:pr:`402`)" +msgstr "" + +#: ../../source/news.rst:150 +msgid "" +"Updated the *Single Sourcing Package Version* tutorial to reflect pip's " +"current strategy. (:pr:`400`)" +msgstr "" + +#: ../../source/news.rst:152 +msgid "" +"Added documentation about the ``py_modules`` argument to ``setup``. " +"(:pr:`398`)" +msgstr "" + +#: ../../source/news.rst:153 +msgid "Simplified the wording for the :file:`manifest.in` section. (:pr:`395`)" +msgstr "" + +#: ../../source/news.rst:156 +msgid "October 2017" +msgstr "" + +#: ../../source/news.rst:158 +msgid "Added a specification for the :file:`entry_points.txt` file. (:pr:`398`)" +msgstr "" + +#: ../../source/news.rst:159 +msgid "" +"Created a new guide for managing packages using ``pip`` and " +"``virtualenv``. (:pr:`385`)" +msgstr "" + +#: ../../source/news.rst:160 +msgid "Split the specifications page into multiple pages. (:pr:`386`)" +msgstr "" + +#: ../../source/news.rst:163 +msgid "September 2017" +msgstr "" + +#: ../../source/news.rst:165 +msgid "" +"Encouraged using ``readme_renderer`` to validate :file:`README.rst`. " +"(:pr:`379`)" +msgstr "" + +#: ../../source/news.rst:167 +msgid "Recommended using the ``--user-base`` option. (:pr:`374`)" +msgstr "" + +#: ../../source/news.rst:170 +msgid "August 2017" +msgstr "" + +#: ../../source/news.rst:172 +msgid "" +"Added a new, experimental tutorial on installing packages using " +"``Pipenv``. (:pr:`369`)" +msgstr "" + +#: ../../source/news.rst:173 +msgid "Added a new guide on how to use ``TestPyPI``. (:pr:`366`)" +msgstr "" + +#: ../../source/news.rst:174 +msgid "Added :file:`pypi.org` as a term. (:pr:`365`)" +msgstr "" + +#: ../../source/news.rst:177 +msgid "July 2017" +msgstr "" + +#: ../../source/news.rst:179 +msgid "Added ``flit`` to the key projects list. (:pr:`358`)" +msgstr "" + +#: ../../source/news.rst:180 +msgid "Added ``enscons`` to the list of key projects. (:pr:`357`)" +msgstr "" + +#: ../../source/news.rst:181 +msgid "" +"Updated this guide's ``readme`` with instructions on how to build the " +"guide locally. (:pr:`356`)" +msgstr "" + +#: ../../source/news.rst:182 +msgid "" +"Made the new ``TestPyPI`` URL more visible, adding note to homepage about" +" pypi.org. (:pr:`354`)" +msgstr "" + +#: ../../source/news.rst:183 +msgid "" +"Added a note about the removal of the explicit registration API. " +"(:pr:`347`)" +msgstr "" + +#: ../../source/news.rst:186 +msgid "June 2017" +msgstr "" + +#: ../../source/news.rst:188 +msgid "Added a document on migrating uploads to :file:`PyPI.org`. (:pr:`339`)" +msgstr "" + +#: ../../source/news.rst:189 +msgid "Added documentation for ``python_requires``. (:pr:`338`)" +msgstr "" + +#: ../../source/news.rst:190 +msgid "" +"Added a note about PyPI migration in the *Tool Recommendations* tutorial." +" (:pr:`335`)" +msgstr "" + +#: ../../source/news.rst:191 +msgid "Added a note that :file:`manifest.in` does not affect wheels. (:pr:`332`)" +msgstr "" + +#: ../../source/news.rst:192 +msgid "Added a license section to the distributing guide. (:pr:`331`)" +msgstr "" + +#: ../../source/news.rst:193 +msgid "Expanded the section on the ``name`` argument. (:pr:`329`)" +msgstr "" + +#: ../../source/news.rst:194 +msgid "Adjusted the landing page. (:pr:`327`, :pr:`326`, :pr:`324`)" +msgstr "" + +#: ../../source/news.rst:195 +msgid "Updated to Sphinx 1.6.2. (:pr:`323`)" +msgstr "" + +#: ../../source/news.rst:196 +msgid "Switched to the PyPA theme. (:pr:`305`)" +msgstr "" + +#: ../../source/news.rst:197 +msgid "Re-organized the documentation into the new structure. (:pr:`318`)" +msgstr "" + +#: ../../source/news.rst:200 +msgid "May 2017" +msgstr "" + +#: ../../source/news.rst:202 +msgid "" +"Added documentation for the ``Description-Content-Type`` field. " +"(:pr:`258`)" +msgstr "" + +#: ../../source/news.rst:203 +msgid "Added contributor and style guide. (:pr:`307`)" +msgstr "" + +#: ../../source/news.rst:204 +msgid "" +"Documented ``pip`` and ``easy_install``'s differences for per-project " +"indexes. (:pr:`233`)" +msgstr "" + +#: ../../source/news.rst:207 +msgid "April 2017" +msgstr "" + +#: ../../source/news.rst:209 +msgid "Added travis configuration for testing pull requests. (:pr:`300`)" +msgstr "" + +#: ../../source/news.rst:210 +msgid "" +"Mentioned the requirement of the ``wheel`` package for creating wheels " +"(:pr:`299`)" +msgstr "" + +#: ../../source/news.rst:211 +msgid "" +"Removed the ``twine register`` reference in the *Distributing Packages* " +"tutorial. (:pr:`271`)" +msgstr "" + +#: ../../source/news.rst:212 +msgid "Added a topic on plugin discovery. (:pr:`294`, :pr:`296`)" +msgstr "" + +#: ../../source/news.rst:213 +msgid "Added a topic on namespace packages. (:pr:`290`)" +msgstr "" + +#: ../../source/news.rst:214 +msgid "" +"Added documentation explaining prominently how to install ``pip`` in " +"``/usr/local``. (:pr:`230`)" +msgstr "" + +#: ../../source/news.rst:215 +msgid "" +"Updated development mode documentation to mention that order of local " +"packages matters. (:pr:`208`)" +msgstr "" + +#: ../../source/news.rst:216 +msgid "" +"Convert readthedocs link for their ``.org`` -> ``.io`` migration for " +"hosted projects (:pr:`239`)" +msgstr "" + +#: ../../source/news.rst:217 +msgid "" +"Swaped order of :file:`setup.py` arguments for the upload command, as " +"order is significant. (:pr:`260`)" +msgstr "" + +#: ../../source/news.rst:219 +msgid "" +"Explained how to install from unsupported sources using a helper " +"application. (:pr:`289`)" +msgstr "" + +#: ../../source/news.rst:223 +msgid "March 2017" +msgstr "" + +#: ../../source/news.rst:225 +msgid "Covered ``manylinux1`` in *Platform Wheels*. (:pr:`283`)" +msgstr "" + +#: ../../source/news.rst:228 +msgid "February 2017" +msgstr "" + +#: ../../source/news.rst:230 +msgid "Added :pep:`518`. (:pr:`281`)" +msgstr "" + +#: ../../source/overview.rst:3 +msgid "An Overview of Packaging for Python" +msgstr "Python 包装的概述" + +#: ../../source/overview.rst:7 +msgid "" +"As a general-purpose programming language, Python is designed to be used " +"in many ways. You can build web sites or industrial robots or a game for " +"your friends to play, and much more, all using the same core technology." +msgstr "" +"作为一种通用的编程语言,Python " +"被设计成可以在许多方面使用。你可以建立网站或工业机器人,或为你的朋友设计一个游戏,以及更多,都使用相同的核心技术。" + +#: ../../source/overview.rst:12 +msgid "" +"Python's flexibility is why the first step in every Python project must " +"be to think about the project's audience and the corresponding " +"environment where the project will run. It might seem strange to think " +"about packaging before writing code, but this process does wonders for " +"avoiding future headaches." +msgstr "" +"Python 的灵活性是为什么每个 Python " +"项目的第一步都必须考虑项目的受众和项目运行的相应环境。在写代码之前考虑打包问题可能看起来很奇怪,但这个过程对于避免未来的头痛问题有很大的作用。" + +#: ../../source/overview.rst:18 +msgid "" +"This overview provides a general-purpose decision tree for reasoning " +"about Python's plethora of packaging options. Read on to choose the best " +"technology for your next project." +msgstr "这个概述提供了一个通用的决策树,用于推理 Python 的大量封装选项。继续阅读,为你的下一个项目选择最好的技术。" + +#: ../../source/overview.rst:26 +msgid "Thinking about deployment" +msgstr "关于部署的思考" + +#: ../../source/overview.rst:28 +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:32 +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:35 +msgid "" +"Is your software intended to run on servers, desktops, mobile clients " +"(phones, tablets, etc.), or embedded in dedicated devices?" +msgstr "你的软件是要在服务器、桌面、移动客户端(手机、平板电脑等)上运行,还是嵌入到专用设备中?" + +#: ../../source/overview.rst:37 +msgid "Is your software installed individually, or in large deployment batches?" +msgstr "你的软件是单独安装,还是成批部署?" + +#: ../../source/overview.rst:39 +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:46 +msgid "Packaging Python libraries and tools" +msgstr "包装 Python 库和工具" + +#: ../../source/overview.rst:48 +msgid "" +"You may have heard about PyPI, ``setup.py``, and ``wheel`` files. These " +"are just a few of the tools Python's ecosystem provides for distributing " +"Python code to developers, which you can read about in :doc:`guides" +"/distributing-packages-using-setuptools`." +msgstr "" +"你可能听说过 PyPI、``setup.py`` 和 ``wheel`` 文件。这些只是 Python 生态系统提供的向开发者分发 Python " +"代码的少数工具,你可以在 :doc:`guides/distributing-packages-using-setuptools` 中阅读。" + +#: ../../source/overview.rst:53 +msgid "" +"The following approaches to packaging are meant for libraries and tools " +"used by technical audience in a development setting. If you're looking " +"for ways to package Python for a non-technical audience and/or a " +"production setting, skip ahead to :ref:`packaging-applications`." +msgstr "" +"以下的打包方法是针对开发环境中的技术受众所使用的库和工具。如果你正在寻找为非技术用户和/或生产环境打包 Python 的方法,请跳到 :ref" +":`packaging-applications`。" + +#: ../../source/overview.rst:59 +msgid "Python modules" +msgstr "Python 模块" + +#: ../../source/overview.rst:61 +msgid "" +"A Python file, provided it only relies on the standard library, can be " +"redistributed and reused. You will also need to ensure it's written for " +"the right version of Python, and only relies on the standard library." +msgstr "一个 Python 文件,只要它只依赖于标准库,就可以被重新分发和重复使用。你还需要确保它是为正确的 Python 版本编写的,并且只依赖于标准库。" + +#: ../../source/overview.rst:66 +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 `bottle.py `_ " +"and :doc:`boltons `." +msgstr "" +"这非常适合在拥有兼容 Python 版本的人之间分享简单的脚本和片段(比如通过电子邮件、StackOverflow 或 GitHub " +"gists)。甚至有一些完整的 Python 库提供了这个选项,如 `bottle.py " +"`_ 和 :doc:`boltons " +"`。" + +#: ../../source/overview.rst:73 +msgid "" +"However, this pattern won't scale for projects that consist of multiple " +"files, need additional libraries, or need a specific version of Python, " +"hence the options below." +msgstr "然而,对于由多个文件组成的项目,需要额外的库,或者需要特定版本的 Python,这种模式就无法扩展,因此有了下面的选项。" + +#: ../../source/overview.rst:78 +msgid "Python source distributions" +msgstr "Python 源码分发" + +#: ../../source/overview.rst:80 +msgid "" +"If your code consists of multiple Python files, it's usually organized " +"into a directory structure. Any directory containing Python files can " +"comprise an :term:`Import Package`." +msgstr "" +"如果你的代码由多个 Python 文件组成,它通常被组织成一个目录结构。任何包含 Python 文件的目录都可以构成一个 " +":term:`Import Package`" + +#: ../../source/overview.rst:84 +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:90 +msgid "" +"So long as your code contains nothing but pure Python code, and you know " +"your deployment environment supports your version of Python, then you can" +" use Python's native packaging tools to create a *source* " +":term:`Distribution Package`, or *sdist* for short." +msgstr "" +"只要你的代码只包含纯 Python 代码,而且你知道你的部署环境支持你的 Python 版本,那么你就可以使用 Python " +"的本地打包工具来创建一个 *source* :term:`Distribution Package`,或者简称 *sdist*。" + +#: ../../source/overview.rst:95 +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 :doc:`go here to learn more" +" `." +msgstr "" +"Python 的 *sdists* 是包含一个或多个软件包或模块的压缩档案(``.tar.gz`` 文件)。如果你的代码是纯 Python " +"的,而且你只依赖其他 Python 包,你可以 :doc:`到这里了解更多 `。" + +#: ../../source/overview.rst:100 +msgid "" +"If you rely on any non-Python code, or non-Python packages (such as " +"`libxml2 `_ in the case of `lxml " +"`_, or BLAS libraries in the case of " +"`numpy `_), you will need to use the " +"format detailed in the next section, which also has many advantages for " +"pure-Python libraries." +msgstr "" +"如果你依赖任何非 Python 代码,或者非 Python 包(比如 `libxml2 " +"`_ 在 `lxml " +"`_ 的情况下,或者 BLAS 库在 `numpy " +"`_ 的情况下),你将需要使用下一节详述的格式,这对纯 Python " +"库也有很多好处。" + +#: ../../source/overview.rst:107 +msgid "" +"Python and PyPI support multiple distributions providing different " +"implementations of the same package. For instance the unmaintained-but-" +"seminal `PIL distribution `_ provides the " +"PIL package, and so does `Pillow `_, an" +" actively-maintained fork of PIL!" +msgstr "" +"Python 和 PyPI 支持多个发行版提供同一软件包的不同实现。例如,未被维护但具有象征意义的 `PIL 发行版 " +"`_ 提供了 PIL 包,而 `Pillow " +"`_ 也是如此,它是 PIL 的一个积极维护的分叉!" + +#: ../../source/overview.rst:114 +msgid "" +"This Python packaging superpower makes it possible for Pillow to be a " +"drop-in replacement for PIL, just by changing your project's " +"``install_requires`` or ``requirements.txt``." +msgstr "" +"这种 Python 打包的超级能力使 Pillow 有可能成为 PIL 的替代品,只需改变你项目的 ``install_requires`` 或 " +"``requirements.txt`` 即可。" + +#: ../../source/overview.rst:119 +msgid "Python binary distributions" +msgstr "Python 的二进制分发" + +#: ../../source/overview.rst:121 +msgid "" +"So much of Python's practical power comes from its ability to integrate " +"with the software ecosystem, in particular libraries written in C, C++, " +"Fortran, Rust, and other languages." +msgstr "Python 的大部分实用能力来自于它与软件生态系统整合的能力,特别是用 C、C++、Fortran、Rust 和其他语言编写的库。" + +#: ../../source/overview.rst:125 +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 "" +"并不是所有的开发者都有合适的工具或经验来构建这些用这些编译语言编写的组件,所以 Python 创建了 " +":term:`Wheel`,这是一种包格式,旨在用编译的工件来运送库。事实上,Python 的包安装程序 ``pip`` " +"总是更喜欢轮子,因为安装总是更快,所以即使是纯 Python 包也能用轮子更好地工作。" + +#: ../../source/overview.rst:132 +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 "" +"二进制发行版最好是与源代码发行版相匹配。即使你不为每个操作系统上传你的代码轮子,通过上传 " +"sdist,你也可以让其他平台的用户为自己构建它。除非你为一个非常特殊的使用情况创建工件,而你知道接收者只需要其中一个,否则默认为同时发布 " +"sdist 和轮子档案。" + +#: ../../source/overview.rst:140 +msgid "" +"Python and PyPI make it easy to upload both wheels and sdists together. " +"Just follow the :doc:`tutorials/packaging-projects` tutorial." +msgstr "" +"Python 和 PyPI 让我们很容易同时上传 wheel 和 sdists。只要按照 :doc:`tutorials/packaging-" +"projects` 的教程就可以了。" + +#: ../../source/overview.rst:148 +msgid "A summary of Python's packaging capabilities for tools and libraries." +msgstr "" + +#: ../../source/overview.rst:148 +msgid "" +"Python's recommended built-in library and tool packaging technologies. " +"Excerpted from `The Packaging Gradient (2017) " +"`_." +msgstr "" +"Python 推荐的内置库和工具打包技术。摘自 `包装梯度(2017) " +"`_。" + +#: ../../source/overview.rst:155 +msgid "Packaging Python applications" +msgstr "包装 Python 应用程序" + +#: ../../source/overview.rst:157 +msgid "" +"So far we've only discussed Python's native distribution tools. Based on " +"our introduction, you would be correct to infer these built-in approaches" +" only target environments which have Python, and an audience who knows " +"how to install Python packages." +msgstr "" +"到目前为止,我们只讨论了 Python 的本地发布工具。根据我们的介绍,你可以正确地推断出这些内置的方法只针对有 Python " +"的环境,以及知道如何安装 Python 包的受众。" + +#: ../../source/overview.rst:162 +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:166 +msgid "" +"Python's native packaging is mostly built for distributing reusable code," +" called libraries, between developers. You can piggyback **tools**, or " +"basic applications for developers, on top of Python's library packaging, " +"using technologies like :doc:`setuptools entry_points " +"`." +msgstr "" +"Python 的原生包装主要是为在开发者之间分发可重用的代码而建立的,称为库。你可以把 **工具**,或开发人员的基本应用,放在 Python " +"的库包装之上,使用像 :doc:`setuptools entry_points ` 这样的技术。" + +#: ../../source/overview.rst:172 +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:176 +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:181 +msgid "Depending on a framework" +msgstr "取决于框架" + +#: ../../source/overview.rst:183 +msgid "" +"Some types of Python applications, like web site backends and other " +"network services, are common enough that they have frameworks to enable " +"their development and packaging. Other types of applications, like " +"dynamic web frontends and mobile clients, are complex enough to target " +"that a framework becomes more than a convenience." +msgstr "" +"某些类型的Python应用程序,如网站后端和其他网络服务,已经足够普遍,以至于它们有框架来实现其开发和打包。其他类型的应用程序,如动态 Web " +"前端和移动客户端,足够复杂,以至于框架变得不仅仅是一种便利。" + +#: ../../source/overview.rst:189 +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:195 +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:199 +msgid "Service platforms" +msgstr "服务平台" + +#: ../../source/overview.rst:201 +msgid "" +"If you're developing for a \"Platform-as-a-Service\" or \"PaaS\" like " +"Heroku or Google App Engine, you are going to want to follow their " +"respective packaging guides." +msgstr "" +"如果你正在为 Heroku 或 Google App Engine 这样的 \"平台即服务\" 或 \"PaaS\" " +"进行开发,你将会想要遵循它们各自的打包指南。" + +#: ../../source/overview.rst:205 +msgid "" +"`Heroku `_" +msgstr "" + +#: ../../source/overview.rst:206 +msgid "`Google App Engine `_" +msgstr "" + +#: ../../source/overview.rst:207 +msgid "`PythonAnywhere `_" +msgstr "" + +#: ../../source/overview.rst:208 +msgid "`OpenShift `_" +msgstr "" + +#: ../../source/overview.rst:209 +msgid "\"Serverless\" frameworks like :gh:`Zappa `" +msgstr "" + +#: ../../source/overview.rst:211 +msgid "" +"In all these setups, the platform takes 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:216 +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:220 +msgid "Web browsers and mobile applications" +msgstr "网络浏览器和移动应用程序" + +#: ../../source/overview.rst:222 +msgid "" +"Python's steady advances are leading it into new spaces. These days you " +"can write a mobile app or web application frontend in Python. While the " +"language may be familiar, the packaging and deployment practices are " +"brand new." +msgstr "" +"Python 的稳步发展正引领它进入新的空间。如今,你可以用 Python " +"编写一个移动应用或网络应用前端。虽然语言可能是熟悉的,但打包和部署的做法是全新的\"" + +#: ../../source/overview.rst:227 +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:231 +msgid "`Kivy `_" +msgstr "" + +#: ../../source/overview.rst:232 +msgid "`Beeware `_" +msgstr "" + +#: ../../source/overview.rst:233 +msgid "`Brython `_" +msgstr "" + +#: ../../source/overview.rst:234 +msgid "`Flexx `_" +msgstr "" + +#: ../../source/overview.rst:236 +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:241 +msgid "Depending on a pre-installed Python" +msgstr "取决于预装的 Python" + +#: ../../source/overview.rst:243 +msgid "" +"Pick an arbitrary computer, and depending on the context, there's a very " +"good chance Python is already installed. Included by default in most " +"Linux and Mac operating systems for many years now, you can reasonably " +"depend on Python preexisting in your data centers or on the personal " +"machines of developers and data scientists." +msgstr "" +"挑选一台任意的计算机,根据环境,很有可能已经安装了 Python。多年来,大多数 Linux 和 Mac 操作系统都默认包含了 " +"Python,你可以合理地依赖 Python 预先存在于你的数据中心或开发者和数据科学家的个人机器上。" + +#: ../../source/overview.rst:249 +msgid "Technologies which support this model:" +msgstr "支持这种模式的技术:" + +#: ../../source/overview.rst:251 +msgid ":gh:`PEX ` (Python EXecutable)" +msgstr "" + +#: ../../source/overview.rst:252 +msgid "" +":doc:`zipapp ` (does not help manage dependencies," +" requires Python 3.5+)" +msgstr "" + +#: ../../source/overview.rst:253 +msgid ":gh:`shiv ` (requires Python 3)" +msgstr "" + +#: ../../source/overview.rst:255 +msgid "" +"Of all the approaches here, depending on a pre-installed Python relies " +"the most on the target environment. Of course, this also makes for the " +"smallest package, as small as single-digit megabytes, or even kilobytes." +msgstr "在这里的所有方法中,依靠预装的 Python 对目标环境的依赖性最大。当然,这也使得软件包最小,小到个位数的兆字节,甚至是千字节。" + +#: ../../source/overview.rst:260 +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:267 +msgid "Depending on a separate software distribution ecosystem" +msgstr "依赖于独立的软件分发生态系统" + +#: ../../source/overview.rst:269 +msgid "" +"For a long time many operating systems, including Mac and Windows, lacked" +" built-in package management. Only recently did these OSes gain so-called" +" \"app stores\", but even those focus on consumer applications and offer " +"little for developers." +msgstr "" +"很长一段时间以来,许多操作系统,包括 Mac 和 Windows,都缺乏内置的软件包管理。直到最近,这些操作系统才获得了所谓的 " +"\"应用商店\",但即使是那些专注于消费者的应用,也没有为开发者提供什么。" + +#: ../../source/overview.rst:274 +msgid "" +"Developers long sought remedies, and in this struggle, emerged with their" +" own package management solutions, such as `Homebrew " +"`_. The most relevant alternative for Python developers" +" is a package ecosystem called `Anaconda " +"`_. " +"Anaconda is built around Python and is increasingly common in academic, " +"analytical, and other data-oriented environments, even making its way " +"`into server-oriented environments " +"`_." +msgstr "" +"开发者长期以来一直在寻求补救措施,在这场斗争中,出现了自己的软件包管理解决方案,如 `Homebrew " +"`_。对于 Python 开发者来说,最相关的替代方案是一个名为 `Anaconda " +"`_ " +"的软件包生态系统。Anaconda 是围绕 Python 建立的,在学术、分析和其他面向数据的环境中越来越普遍,甚至可以 `进入面向服务器的环境 " +"`_。" + +#: ../../source/overview.rst:284 +msgid "Instructions on building and publishing for the Anaconda ecosystem:" +msgstr "关于为 Anaconda 生态系统建立和发布的说明:" + +#: ../../source/overview.rst:286 +msgid "" +"`Building libraries and applications with conda " +"`_" +msgstr "" +"`用 conda 构建库和应用程序 `_" + +#: ../../source/overview.rst:287 +msgid "" +"`Transitioning a native Python package to Anaconda " +"`_" +msgstr "" +"`将一个本地 Python 包过渡到 Anaconda `_" + +#: ../../source/overview.rst:289 +msgid "" +"A similar model involves installing an alternative Python distribution, " +"but does not support arbitrary operating system-level packages:" +msgstr "类似的模式包括安装另一个 Python 发行版,但不支持任意的操作系统级软件包:" + +#: ../../source/overview.rst:293 +msgid "`ActiveState ActivePython `_" +msgstr "" + +#: ../../source/overview.rst:294 +msgid "`WinPython `_" +msgstr "" + +#: ../../source/overview.rst:299 +msgid "Bringing your own Python executable" +msgstr "带来你自己的 Python 可执行文件" + +#: ../../source/overview.rst:301 +msgid "" +"Computing as we know it is defined by the ability to execute programs. " +"Every operating system natively supports one or more formats of program " +"they can natively execute." +msgstr "我们所知道的计算是由执行程序的能力来定义的。每个操作系统都原生支持一种或多种他们可以原生执行的程序格式。" + +#: ../../source/overview.rst:305 +msgid "" +"There are many techniques and technologies which turn your Python program" +" into one of these formats, most of which involve embedding the Python " +"interpreter and any other dependencies into a single executable file." +msgstr "有许多技术和工艺可以把你的 Python 程序变成这些格式之一,其中大多数涉及到把 Python 解释器和任何其他依赖性嵌入到一个可执行文件中。" + +#: ../../source/overview.rst:310 +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:314 +msgid "A selection of Python freezers:" +msgstr "Python 冻结的选择:" + +#: ../../source/overview.rst:316 +msgid "" +"`pyInstaller `_ - Cross-" +"platform" +msgstr "" + +#: ../../source/overview.rst:317 +msgid "" +"`cx_Freeze `_ - Cross-" +"platform" +msgstr "" + +#: ../../source/overview.rst:318 +msgid "" +"`constructor `_ - For command-line " +"installers" +msgstr "" + +#: ../../source/overview.rst:319 +msgid "`py2exe `_ - Windows only" +msgstr "" + +#: ../../source/overview.rst:320 +msgid "`py2app `_ - Mac only" +msgstr "" + +#: ../../source/overview.rst:321 +msgid "`osnap `_ - Windows and Mac" +msgstr "" + +#: ../../source/overview.rst:322 +msgid "`pynsist `_ - Windows only" +msgstr "" + +#: ../../source/overview.rst:324 +msgid "" +"Most of the above imply single-user deployments. For multi-component " +"server applications, see :gh:`Chef Omnibus `." +msgstr "" +"上述大部分内容都意味着单用户部署。对于多组件的服务器应用程序,请参阅 :gh:`Chef Omnibus `。" + +#: ../../source/overview.rst:330 +msgid "Bringing your own userspace" +msgstr "携带自己的用户空间" + +#: ../../source/overview.rst:332 +msgid "" +"An increasing number of operating systems -- including Linux, Mac OS, and" +" Windows -- can be set up to run applications packaged as lightweight " +"images, using a relatively modern arrangement often referred to as " +"`operating-system-level virtualization `_, or *containerization*." +msgstr "" +"越来越多的操作系统 -- 包括 Linux、Mac OS 和 Windows -- " +"可以被设置为运行打包成轻量级镜像的应用程序,使用一种相对现代的安排,通常被称为 `操作系统级虚拟化 " +"`_,或" +" *容器化*。" + +#: ../../source/overview.rst:339 +msgid "" +"These techniques are mostly Python agnostic, because they package whole " +"OS filesystems, not just Python or Python packages." +msgstr "这些技术大多与 Python 无关,因为它们打包整个操作系统文件系统,而不仅仅是 Python 或 Python 包。" + +#: ../../source/overview.rst:342 +msgid "" +"Adoption is most extensive among Linux servers, where the technology " +"originated and where the technologies below work best:" +msgstr "在 Linux 服务器中的采用最为广泛,那里是技术的发源地,也是下面这些技术效果最好的地方:" + +#: ../../source/overview.rst:345 +msgid "`AppImage `_" +msgstr "" + +#: ../../source/overview.rst:346 +msgid "`Docker `_" +msgstr "" + +#: ../../source/overview.rst:347 +msgid "`Flatpak `_" +msgstr "" + +#: ../../source/overview.rst:348 +msgid "`Snapcraft `_" +msgstr "" + +#: ../../source/overview.rst:351 +msgid "Bringing your own kernel" +msgstr "自带内核" + +#: ../../source/overview.rst:353 +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:358 +msgid "" +"These techniques are mostly reserved for larger scale deployments in data" +" centers, though certain complex applications can benefit from this " +"packaging. Technologies are Python agnostic, and include:" +msgstr "这些技术大多保留给数据中心的大规模部署,尽管某些复杂的应用可以从这种包装中受益。技术是与 Python 无关的,包括:" + +#: ../../source/overview.rst:362 +msgid "`Vagrant `_" +msgstr "" + +#: ../../source/overview.rst:363 +msgid "" +"`VHD `_, `AMI " +"`_, and :doc:`other " +"formats `" +msgstr "" + +#: ../../source/overview.rst:364 +msgid "" +"`OpenStack `_ - A cloud " +"management system in Python, with extensive VM support" +msgstr "" + +#: ../../source/overview.rst:367 +msgid "Bringing your own hardware" +msgstr "自带硬件" + +#: ../../source/overview.rst:369 +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:373 +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:377 +msgid "" +"Embed your code on an :gh:`Adafruit `, " +"`MicroPython `_, or more-powerful hardware " +"running Python, then ship it to the datacenter or your users' homes. They" +" plug and play, and you can call it a day." +msgstr "" +"将你的代码嵌入到 :gh:`Adafruit `、`MicroPython " +"`_ 或更强大的运行 Python " +"的硬件上,然后将其运送到数据中心或你的用户家中。他们即插即用,你就可以收工了。" + +#: ../../source/overview.rst:386 +#, fuzzy +msgid "A summary of technologies used to package Python applications." +msgstr "用于打包 Python 应用程序的简化技术范围。" + +#: ../../source/overview.rst:386 +msgid "The simplified gamut of technologies used to package Python applications." +msgstr "用于打包 Python 应用程序的简化技术范围。" + +#: ../../source/overview.rst:389 +msgid "What about..." +msgstr "那么 ......" + +#: ../../source/overview.rst:391 +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:395 +msgid "Operating system packages" +msgstr "操作系统包" + +#: ../../source/overview.rst:397 +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 "" +"正如上面的 :ref:`depending-on-a-separate-ecosystem` " +"中提到的,一些操作系统有自己的软件包管理器。如果你非常确定你的目标操作系统,你可以直接依赖像 `deb " +"`_ (用于 Debian,Ubuntu 等)或" +" `RPM `_ (用于 Red " +"Hat,Fedora 等)的格式,并使用该内置软件包管理器来处理安装,甚至部署。你甚至可以使用 `FPM " +"`_ " +"从同一来源生成 deb 和 RPM。" + +#: ../../source/overview.rst:408 +msgid "" +"In most deployment pipelines, the OS package manager is just one piece of" +" the puzzle." +msgstr "在大多数部署管道中,操作系统包管理器只是拼图中的一个部分。" + +#: ../../source/overview.rst:414 +msgid "" +":doc:`Virtualenvs ` have been an " +"indispensable tool for multiple generations of Python developer, but are " +"slowly fading from view, as they are being wrapped by higher-level tools." +" With packaging in particular, virtualenvs are used as a primitive in " +":doc:`the dh-virtualenv tool ` and `osnap " +"`_, both of which wrap virtualenvs in" +" a self-contained way." +msgstr "" +":doc:`Virtualenvs ` 一直是多代 Python " +"开发者不可或缺的工具,但正在慢慢淡出人们的视线,因为它们正在被更高级别的工具所包裹。 特别是在打包方面,virtualenvs 在 " +":doc:`the dh-virtualenv tool ` 和 `osnap " +"`_ 中被作为一种基本工具,这两个工具都以一种独立的方式打包了 " +"virtualenvs。" + +#: ../../source/overview.rst:423 +msgid "" +"For production deployments, do not rely on running ``python -m pip " +"install`` from the Internet into a virtualenv, as one might do in a " +"development environment. The overview above is full of much better " +"solutions." +msgstr "" +"对于生产部署,不要依赖从互联网上运行 ``python -m pip install``,进入一个 " +"virtualenv,就像人们在开发环境中可能做的那样。上面的概述充满了更好的解决方案。" + +#: ../../source/overview.rst:428 +msgid "Security" +msgstr "安全性" + +#: ../../source/overview.rst:430 +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:433 +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:442 +msgid "Wrap up" +msgstr "总结一下吧" + +#: ../../source/overview.rst:444 +msgid "" +"Packaging in Python has a bit of a reputation for being a bumpy ride. " +"This impression is mostly a byproduct of Python's versatility. Once you " +"understand the natural boundaries between each packaging solution, you " +"begin to realize that the varied landscape is a small price Python " +"programmers pay for using one of the most balanced, flexible languages " +"available." +msgstr "" +"Python中的包装有一点名声,那就是一波三折。这种印象主要是 Python " +"的多功能性的副产品。一旦你理解了每个打包方案之间的自然界限,你就会开始意识到,不同的景观是 Python " +"程序员为使用最平衡、最灵活的语言之一而付出的小代价。" + +#: ../../source/specifications/binary-distribution-format.rst:6 +msgid "Binary distribution format" +msgstr "二进制分发格式" + +#: ../../source/specifications/binary-distribution-format.rst:8 +msgid "" +"The binary distribution format (:term:`wheel `) was originally " +"defined in :pep:`427`. The current version of the specification is here." +msgstr "二进制分发格式(:term:`wheel `)最初在 :pep:`427` 中定义。当前版本的规范在这里。" + +#: ../../source/specifications/binary-distribution-format.rst:13 +msgid "Abstract" +msgstr "摘要" + +#: ../../source/specifications/binary-distribution-format.rst:15 +msgid "This PEP describes a built-package format for Python called \"wheel\"." +msgstr "这个 PEP 描述了一种叫做 \"wheel\" 的 Python 内置包格式。" + +#: ../../source/specifications/binary-distribution-format.rst:17 +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:27 +msgid "PEP Acceptance" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:29 +msgid "" +"This PEP was accepted, and the defined wheel version updated to 1.0, by " +"Nick Coghlan on 16th February, 2013 [1]_" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:34 +msgid "Rationale" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:36 +msgid "" +"Python needs a package format that is easier to install than sdist. " +"Python's sdist packages are defined by and require the distutils and " +"setuptools build systems, running arbitrary code to build-and-install, " +"and re-compile, code just so it can be installed into a new virtualenv. " +"This system of conflating build-install is slow, hard to maintain, and " +"hinders innovation in both build systems and installers." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:43 +msgid "" +"Wheel attempts to remedy these problems by providing a simpler interface " +"between the build system and the installer. The wheel binary package " +"format frees installers from having to know about the build system, saves" +" time by amortizing compile time over many installations, and removes the" +" need to install a build system in the target environment." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:52 +msgid "Details" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:55 +msgid "Installing a wheel 'distribution-1.0-py32-none-any.whl'" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:57 +msgid "Wheel installation notionally consists of two phases:" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:59 +msgid "Unpack." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:61 +msgid "Parse ``distribution-1.0.dist-info/WHEEL``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:62 +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:64 +msgid "If Root-Is-Purelib == 'true', unpack archive into purelib (site-packages)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:66 +msgid "Else unpack archive into platlib (site-packages)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:68 +msgid "Spread." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:70 +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:72 +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)``. The " +"initially supported paths are taken from ``distutils.command.install``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:78 +msgid "" +"If applicable, update scripts starting with ``#!python`` to point to the " +"correct interpreter." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:80 +msgid "Update ``distribution-1.0.dist-info/RECORD`` with the installed paths." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:82 +msgid "Remove empty ``distribution-1.0.data`` directory." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:83 +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:87 +msgid "Recommended installer features" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:97 +msgid "Rewrite ``#!python``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:90 +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:96 +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:102 +msgid "Generate script wrappers." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:100 +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:105 +msgid "Recommended archiver features" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:112 +msgid "Place ``.dist-info`` at the end of the archive." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:108 +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:115 +msgid "File Format" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:118 +msgid "File name convention" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:120 +msgid "" +"The wheel filename is ``{distribution}-{version}(-{build tag})?-{python " +"tag}-{abi tag}-{platform tag}.whl``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:124 +msgid "distribution" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:124 +msgid "Distribution name, e.g. 'django', 'pyramid'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:127 +msgid "version" +msgstr "version" + +#: ../../source/specifications/binary-distribution-format.rst:127 +msgid "Distribution version, e.g. 1.0." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:135 +msgid "build tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:130 +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:138 +msgid "language implementation and version tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:138 +msgid "E.g. 'py27', 'py2', 'py3'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:141 +msgid "abi tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:141 +msgid "E.g. 'cp33m', 'abi3', 'none'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:144 +msgid "platform tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:144 +msgid "E.g. 'linux_x86_64', 'any'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:146 +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:151 +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:156 +msgid "Escaping and Unicode" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:158 +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:161 +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:168 +msgid "" +"Version numbers should be normalised according to :pep:`440`. Normalised " +"version numbers cannot contain ``-``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:170 +msgid "" +"The remaining components may not contain ``-`` characters, so no escaping" +" is necessary." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:173 +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:176 +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:180 +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:186 +msgid "File contents" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:188 +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:" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:192 +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:195 +msgid "``{distribution}-{version}.dist-info/`` contains metadata." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:196 +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:200 +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." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:204 +msgid "" +"``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 " +"or greater format metadata." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:206 +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:216 +msgid "``Wheel-Version`` is the version number of the Wheel specification." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:217 +msgid "" +"``Generator`` is the name and optionally the version of the software that" +" produced the archive." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:219 +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:222 +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:224 +msgid "``Build`` is the build number and is omitted if there is no build number." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:225 +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:228 +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:230 +msgid "Wheel does not contain setup.py or setup.cfg." +msgstr "Wheel 不包含 setup.py 或 setup.cfg。" + +#: ../../source/specifications/binary-distribution-format.rst:232 +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:239 +#: ../../source/specifications/recording-installed-packages.rst:35 +msgid "The .dist-info directory" +msgstr "目录 .dist-info" + +#: ../../source/specifications/binary-distribution-format.rst:241 +msgid "" +"Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " +"RECORD." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:243 +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:245 +msgid "WHEEL is the wheel metadata specific to a build of the package." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:246 +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:252 +msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:253 +msgid "RECORD.jws is used for digital signatures. It is not mentioned in RECORD." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:255 +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:258 +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:265 +msgid "The .data directory" +msgstr ".data 目录" + +#: ../../source/specifications/binary-distribution-format.rst:267 +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:275 +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:281 +msgid "Signed wheel files" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:283 +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:294 +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:299 +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:306 +msgid "(The hash value is the same format used in RECORD.)" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:308 +msgid "" +"If RECORD.p7s is used, it must contain a detached S/MIME format signature" +" of RECORD." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:311 +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:316 +msgid "See" +msgstr "见" + +#: ../../source/specifications/binary-distribution-format.rst:318 +msgid "https://datatracker.ietf.org/doc/html/rfc7515" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:319 +#, 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-jws-json-serialization.html" + +#: ../../source/specifications/binary-distribution-format.rst:320 +msgid "https://datatracker.ietf.org/doc/html/rfc7517" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:321 +#, 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:325 +msgid "Comparison to .egg" +msgstr "与 .egg 的比较" + +#: ../../source/specifications/binary-distribution-format.rst:327 +msgid "" +"Wheel is an installation format; egg is importable. Wheel archives do " +"not need to include .pyc and are less tied to a specific Python version " +"or implementation. Wheel can install (pure Python) packages built with " +"previous versions of Python so you don't always have to wait for the " +"packager to catch up." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:332 +msgid "" +"Wheel uses .dist-info directories; egg uses .egg-info. Wheel is " +"compatible with the new world of Python packaging and the new concepts it" +" brings." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:335 +msgid "" +"Wheel has a richer file naming convention for today's multi-" +"implementation world. A single wheel archive can indicate its " +"compatibility with a number of Python language versions and " +"implementations, ABIs, and system architectures. Historically the ABI " +"has been specific to a CPython release, wheel is ready for the stable " +"ABI." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:341 +msgid "" +"Wheel is lossless. The first wheel implementation bdist_wheel always " +"generates egg-info, and then converts it to a .whl. It is also possible " +"to convert existing eggs and bdist_wininst distributions." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:345 +msgid "" +"Wheel is versioned. Every wheel file contains the version of the wheel " +"specification and the implementation that packaged it. Hopefully the next" +" migration can simply be to Wheel 2.0." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:348 +msgid "Wheel is a reference to the other Python." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:352 +msgid "FAQ" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:356 +msgid "Wheel defines a .data directory. Should I put all my data there?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:358 +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:367 +msgid "Why does wheel include attached signatures?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:369 +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:377 +msgid "Why does wheel allow JWS signatures?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:379 +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:385 +msgid "Why does wheel also allow S/MIME signatures?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:387 +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:390 +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:395 +msgid "What's the deal with \"purelib\" vs. \"platlib\"?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:397 +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:402 +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:407 +msgid "" +"In practice a wheel should have only one of \"purelib\" or \"platlib\" " +"depending on whether it is pure Python or not and those files should be " +"at the root with the appropriate setting given for \"Root-is-purelib\"." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:413 +msgid "Is it possible to import Python code directly from a wheel file?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:415 +msgid "" +"Technically, due to the combination of supporting installation via simple" +" extraction and using an archive format that is compatible with " +"``zipimport``, a subset of wheel files *do* support being placed directly" +" on ``sys.path``. However, while this behaviour is a natural consequence " +"of the format design, actually relying on it is generally discouraged." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:421 +msgid "" +"Firstly, wheel *is* designed primarily as a distribution format, so " +"skipping the installation step also means deliberately avoiding any " +"reliance on features that assume full installation (such as being able to" +" use standard tools like ``pip`` and ``virtualenv`` to capture and manage" +" dependencies in a way that can be properly tracked for auditing and " +"security update purposes, or integrating fully with the standard build " +"machinery for C extensions by publishing header files in the appropriate " +"place)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:430 +msgid "" +"Secondly, while some Python software is written to support running " +"directly from a zip archive, it is still common for code to be written " +"assuming it has been fully installed. When that assumption is broken by " +"trying to run the software from a zip archive, the failures can often be " +"obscure and hard to diagnose (especially when they occur in third party " +"libraries). The two most common sources of problems with this are the " +"fact that importing C extensions from a zip archive is *not* supported by" +" CPython (since doing so is not supported directly by the dynamic loading" +" machinery on any platform) and that when running from a zip archive the " +"``__file__`` attribute no longer refers to an ordinary filesystem path, " +"but to a combination path that includes both the location of the zip " +"archive on the filesystem and the relative path to the module inside the " +"archive. Even when software correctly uses the abstract resource APIs " +"internally, interfacing with external components may still require the " +"availability of an actual on-disk file." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:447 +msgid "" +"Like metaclasses, monkeypatching and metapath importers, if you're not " +"already sure you need to take advantage of this feature, you almost " +"certainly don't need it. If you *do* decide to use it anyway, be aware " +"that many projects will require a failure to be reproduced with a fully " +"installed package before accepting it as a genuine bug." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:454 +msgid "Changes" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:456 +msgid "Since :pep:`427`, this specification has changed as follows:" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:458 +msgid "" +"The rules on escaping in wheel filenames were revised, to bring them into" +" line with what popular tools actually do (February 2021)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:465 +msgid "" +"PEP acceptance (https://mail.python.org/pipermail/python-" +"dev/2013-February/124103.html)" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:470 +msgid "Appendix" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:472 +msgid "Example urlsafe-base64-nopad implementation::" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:486 +msgid "Copyright" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:488 +msgid "This document has been placed into the public domain." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:5 +msgid "Core metadata specifications" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:7 +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:10 +msgid "``Metadata-Version``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:11 +msgid "``Name``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:12 +msgid "``Version``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:14 +msgid "All the other fields are optional." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:16 +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:25 +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:28 +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:33 +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:44 +msgid "Metadata-Version" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:48 +msgid "" +"Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " +"\"2.1\", \"2.2\", and \"2.3\"." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:51 +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 :pep:`440`, the major version is the value" +" before the first dot)." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:57 +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:61 +#: ../../source/specifications/core-metadata.rst:83 +#: ../../source/specifications/core-metadata.rst:99 +#: ../../source/specifications/core-metadata.rst:162 +#: ../../source/specifications/core-metadata.rst:177 +#: ../../source/specifications/core-metadata.rst:215 +#: ../../source/specifications/core-metadata.rst:287 +#: ../../source/specifications/core-metadata.rst:291 +#: ../../source/specifications/core-metadata.rst:295 +#: ../../source/specifications/core-metadata.rst:299 +#: ../../source/specifications/core-metadata.rst:331 +#: ../../source/specifications/core-metadata.rst:351 +#: ../../source/specifications/core-metadata.rst:377 +#: ../../source/specifications/core-metadata.rst:395 +#: ../../source/specifications/core-metadata.rst:420 +#: ../../source/specifications/core-metadata.rst:442 +#: ../../source/specifications/core-metadata.rst:605 +#: ../../source/specifications/core-metadata.rst:636 +#: ../../source/specifications/core-metadata.rst:646 +msgid "Example::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:69 +msgid "Name" +msgstr "名称" + +#: ../../source/specifications/core-metadata.rst:72 +msgid "Added additional restrictions on format from :pep:`508`" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:75 +msgid "" +"The name of the distribution. The name field is the primary identifier " +"for a distribution. A valid name consists only of ASCII letters and " +"numbers, period, underscore and hyphen. It must start and end with a " +"letter or number. Distribution names are limited to those which match the" +" following regex (run with ``re.IGNORECASE``)::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:87 +msgid "" +"For comparison purposes, the names should be :ref:`normalized ` before comparing." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:92 +msgid "Version" +msgstr "版本" + +#: ../../source/specifications/core-metadata.rst:96 +msgid "" +"A string containing the distribution's version number. This field must " +"be in the format specified in :pep:`440`." +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:138 +msgid "Platform (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:142 +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:153 +msgid "Supported-Platform (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:157 +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:171 +msgid "Summary" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:175 +msgid "A one-line summary of what the distribution does." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:195 +msgid "This field may be specified in the message body instead." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:198 +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:203 +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:209 +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:226 +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:230 +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:239 +msgid "Description-Content-Type" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:243 +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:246 +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:259 +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:265 +msgid "Format::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:269 +msgid "The ``type/subtype`` part has only a few legal values:" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:271 +msgid "``text/plain``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:272 +msgid "``text/x-rst``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:273 +msgid "``text/markdown``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:275 +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:279 +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:284 +msgid "``GFM`` for :rfc:`Github-flavored Markdown <7764#section-3.2>`" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:285 +msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:303 +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:307 +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:311 +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:315 +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:324 +msgid "Keywords" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:328 +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:337 +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:345 +msgid "Home-page" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:349 +msgid "A string containing the URL for the distribution's home page." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:357 +msgid "Download-URL" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:361 +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:370 +msgid "Author" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:374 +msgid "" +"A string containing the author's name at a minimum; additional contact " +"information may be provided." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:387 +msgid "Author-email" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:391 +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:399 +#: ../../source/specifications/core-metadata.rst:446 +msgid "" +"Per RFC-822, this field may contain multiple comma-separated e-mail " +"addresses::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:409 +msgid "Maintainer" +msgstr "维护者" + +#: ../../source/specifications/core-metadata.rst:413 +msgid "" +"A string containing the maintainer's name at a minimum; additional " +"contact information may be provided." +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``." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:430 +msgid "Maintainer-email" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:434 +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:438 +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:456 +msgid "License" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:460 +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:480 +msgid "Classifier (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:484 +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:489 +#: ../../source/specifications/core-metadata.rst:579 +#: ../../source/specifications/core-metadata.rst:718 +#: ../../source/specifications/core-metadata.rst:742 +msgid "This field may be followed by an environment marker after a semicolon." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:500 +msgid "Requires-Dist (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:503 +#: ../../source/specifications/core-metadata.rst:566 +#: ../../source/specifications/core-metadata.rst:690 +#: ../../source/specifications/core-metadata.rst:731 +msgid "" +"The field format specification was relaxed to accept the syntax used by " +"popular publishing tools." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:507 +msgid "" +"Each entry contains a string naming some other distutils project required" +" by this distribution." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:510 +msgid "The format of a requirement string contains from one to four parts:" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:512 +msgid "" +"A project name, in the same format as the ``Name:`` field. The only " +"mandatory part." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:514 +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:518 +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:521 +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:524 +msgid "See :pep:`508` for full details of the allowed format." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:526 +msgid "" +"The project names should correspond to names as found on the `Python " +"Package Index`_." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:529 +msgid "" +"Version specifiers must follow the rules described in :doc:`version-" +"specifiers`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:543 +msgid "Requires-Python" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:547 +msgid "" +"This field specifies the Python version(s) that the distribution is " +"guaranteed to be compatible with. Installation tools may look at this " +"when picking which version of a project to install." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:551 +msgid "The value must be in the format specified in :doc:`version-specifiers`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:553 +msgid "This field cannot be followed by an environment marker." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:563 +msgid "Requires-External (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:570 +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:575 +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:581 +msgid "" +"Because they refer to non-Python software releases, version numbers for " +"this field are **not** required to conform to the format specified in " +":pep:`440`: they should correspond to the version scheme used by the " +"external dependency." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:586 +msgid "Notice that there is no particular rule on the strings to be used." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:598 +msgid "Project-URL (multiple-use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:602 +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:609 +msgid "The label is free text limited to 32 characters." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:617 +msgid "Provides-Extra (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:620 +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:625 +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:633 +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:641 +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:651 +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:655 +msgid "" +"It is legal to specify ``Provides-Extra:`` without referencing it in any " +"``Requires-Dist:``." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:658 +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:663 +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:671 +msgid "Rarely Used Fields" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:673 +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:678 +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:687 +msgid "Provides-Dist (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:694 +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:699 +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:706 +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:714 +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:728 +msgid "Obsoletes-Dist (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:735 +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:739 +msgid "" +"Version declarations can be supplied. Version numbers must be in the " +"format specified in :doc:`version-specifiers`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:744 +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:757 +#, fuzzy +msgid "reStructuredText markup: https://docutils.sourceforge.io/" +msgstr "" +"`reStructuredText `_ (没有 Sphinx" +" 扩展)" + +#: ../../source/specifications/core-metadata.rst:762 +msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" +msgstr "" + +#: ../../source/specifications/declaring-build-dependencies.rst:6 +msgid "Declaring build system dependencies" +msgstr "" + +#: ../../source/specifications/declaring-build-dependencies.rst:8 +msgid "" +"`pyproject.toml` is a build system independent file format defined in " +":pep:`518` that projects may provide in order to declare any Python level" +" dependencies that must be installed in order to run the project's build " +"system successfully." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:5 +msgid "Declaring project metadata" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:7 +msgid "" +":pep:`621` specifies how to write a project's :ref:`core metadata ` in a ``pyproject.toml`` file for packaging-related tools to " +"consume. It defines the following specification as the canonical source " +"for the format used." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:14 +#: ../../source/specifications/dependency-specifiers.rst:24 +#: ../../source/specifications/direct-url.rst:16 +msgid "Specification" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:16 +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. 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/declaring-project-metadata.rst:22 +msgid "" +"The keys defined in this specification MUST be in a table named " +"``[project]`` in ``pyproject.toml``. No tools may add keys to this table " +"which are not defined by this specification. For tools wishing to store " +"their own settings in ``pyproject.toml``, they may use the ``[tool]`` " +"table as defined in the :ref:`build dependency declaration specification " +"`. The lack of a ``[project]`` table " +"implicitly means the build back-end will dynamically provide all keys." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:31 +msgid "The only keys required to be statically defined are:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:35 +msgid "" +"The keys which are required but may be specified *either* statically or " +"listed as dynamic are:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:40 +msgid "" +"All other keys are considered optional and may be specified statically, " +"listed as dynamic, or left unspecified." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:43 +msgid "The complete list of keys allowed in the ``[project]`` table are:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:45 +#, fuzzy +msgid "``authors``" +msgstr "作者 (author)" + +#: ../../source/specifications/declaring-project-metadata.rst:47 +#, fuzzy +msgid "``dependencies``" +msgstr "依赖性覆盖" + +#: ../../source/specifications/declaring-project-metadata.rst:49 +#: ../../source/specifications/declaring-project-metadata.rst:380 +msgid "``dynamic``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:50 +msgid "``entry-points``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:51 +msgid "``gui-scripts``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:54 +#, fuzzy +msgid "``maintainers``" +msgstr "维护者" + +#: ../../source/specifications/declaring-project-metadata.rst:56 +msgid "``optional-dependencies``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:57 +#: ../../source/specifications/declaring-project-metadata.rst:112 +msgid "``readme``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:58 +#: ../../source/specifications/declaring-project-metadata.rst:158 +msgid "``requires-python``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:60 +#: ../../source/specifications/declaring-project-metadata.rst:278 +msgid "``urls``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:67 +#: ../../source/specifications/declaring-project-metadata.rst:84 +#: ../../source/specifications/declaring-project-metadata.rst:100 +#: ../../source/specifications/declaring-project-metadata.rst:160 +msgid "TOML_ type: string" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:68 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Name " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:71 +msgid "The name of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:73 +msgid "" +"Tools SHOULD :ref:`normalize ` this name, as soon as " +"it is read for internal consistency." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:85 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Version " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:88 +msgid "The version of the project as supported by :pep:`440`." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:90 +msgid "Users SHOULD prefer to specify already-normalized versions." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:101 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Summary " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:104 +msgid "The summary description of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:114 +msgid "TOML_ type: string or table" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:115 +msgid "" +"Corresponding :ref:`core metadata ` field: " +":ref:`Description ` and :ref:`Description-" +"Content-Type `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:119 +msgid "The full description of the project (i.e. the README)." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:121 +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/declaring-project-metadata.rst:132 +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/declaring-project-metadata.rst:139 +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/declaring-project-metadata.rst:161 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Python `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:164 +msgid "The Python version requirements of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:174 +msgid "TOML_ type: table" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:175 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:178 +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 "" + +#: ../../source/specifications/declaring-project-metadata.rst:193 +msgid "``authors``/``maintainers``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:195 +msgid "TOML_ type: Array of inline tables with string keys and values" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:196 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Author " +"`, :ref:`Author-email `, :ref:`Maintainer `, and :ref" +":`Maintainer-email `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:202 +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/declaring-project-metadata.rst:207 +msgid "" +"The \"maintainers\" key is similar to \"authors\" in that its exact " +"meaning is open to interpretation." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:210 +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/declaring-project-metadata.rst:217 +msgid "" +"Using the data to fill in :ref:`core metadata ` is as " +"follows:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:220 +msgid "" +"If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as " +"appropriate." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:223 +msgid "" +"If only ``email`` is provided, the value goes in :ref:`Author-email " +"` or :ref:`Maintainer-email ` as appropriate." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:227 +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/declaring-project-metadata.rst:231 +msgid "Multiple values should be separated by commas." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:250 +#: ../../source/specifications/declaring-project-metadata.rst:264 +msgid "TOML_ type: array of strings" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:251 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Keywords " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:254 +msgid "The keywords for the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:265 +msgid "" +"Corresponding :ref:`core metadata ` field: " +":ref:`Classifier `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:268 +msgid "Trove classifiers which apply to the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:280 +msgid "TOML_ type: table with keys and values of strings" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:281 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Project-" +"URL `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:284 +msgid "" +"A table of URLs where the key is the URL label and the value is the URL " +"itself." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:296 +msgid "Entry points" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:298 +msgid "" +"TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " +"``[project.entry-points]``)" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:300 +msgid ":ref:`Entry points specification `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:302 +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/declaring-project-metadata.rst:308 +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/declaring-project-metadata.rst:312 +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/declaring-project-metadata.rst:318 +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/declaring-project-metadata.rst:337 +msgid "``dependencies``/``optional-dependencies``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:339 +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/declaring-project-metadata.rst:342 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Dist ` and :ref:`Provides-Extra `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:346 +msgid "The (optional) dependencies of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:348 +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/declaring-project-metadata.rst:353 +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/declaring-project-metadata.rst:382 +msgid "TOML_ type: array of string" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:383 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Dynamic " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:386 +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/declaring-project-metadata.rst:392 +msgid "" +"A build back-end MUST honour statically-specified metadata (which means " +"the metadata did not list the key in ``dynamic``)." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:394 +msgid "" +"A build back-end MUST raise an error if the metadata specifies ``name`` " +"in ``dynamic``." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:396 +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/declaring-project-metadata.rst:401 +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/declaring-project-metadata.rst:405 +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/declaring-project-metadata.rst:407 +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/declaring-project-metadata.rst:411 +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/declaring-project-metadata.rst:422 +#, fuzzy +msgid "Example" +msgstr "例子" + +#: ../../source/specifications/dependency-specifiers.rst:5 +msgid "Dependency specifiers" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:7 +msgid "" +"This document describes the dependency specifiers format as originally " +"specified in :pep:`508`." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:10 +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:16 +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 :pep:`440` is not actually " +"implemented in pip, but since :pep:`440` is accepted, we use that format " +"rather than pip's current native format." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:29 +msgid "All features of the language shown with a name based lookup::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:33 +msgid "A minimal URL based lookup::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:38 +#, fuzzy +msgid "Concepts" +msgstr "导航" + +#: ../../source/specifications/dependency-specifiers.rst:40 +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:47 +msgid "Grammar" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:49 +msgid "" +"We first cover the grammar briefly and then drill into the semantics of " +"each section later." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:52 +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:57 +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:60 +msgid "" +"Versions may be specified according to the :pep:`440` rules. (Note: URI " +"is defined in :rfc:`std-66 <3986>`)::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:70 +msgid "" +"Environment markers allow making a specification only take effect in some" +" environments::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:99 +msgid "" +"Optional components of a distribution may be specified using the extras " +"field::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:108 +msgid "Restrictions on names for extras is defined in :pep:`685`." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:110 +msgid "Giving us a rule for name based requirements::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:114 +msgid "And a rule for direct reference specifications::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:118 +msgid "Leading to the unified rule that can specify a dependency.::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:123 +msgid "Whitespace" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:125 +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:129 +#, fuzzy +msgid "Names" +msgstr "名称" + +#: ../../source/specifications/dependency-specifiers.rst:131 +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:143 +msgid "Extras" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:145 +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:152 +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:157 +msgid "If multiple extras are listed, all the dependencies are unioned together." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:160 +#, fuzzy +msgid "Versions" +msgstr "version" + +#: ../../source/specifications/dependency-specifiers.rst:162 +msgid "" +"See :pep:`440` 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:170 +msgid "Environment Markers" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:172 +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:179 +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:182 +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:187 +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 " +":pep:`440` version comparison rules when those are defined (that is when " +"both sides have a valid version specifier). If there is no defined " +":pep:`440` behaviour 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:199 +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:206 +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:211 +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:214 +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:218 +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:228 +msgid "Marker" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:229 +msgid "Python equivalent" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:230 +msgid "Sample values" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:231 +msgid "``os_name``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:232 +msgid "``os.name``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:233 +#, fuzzy +msgid "``posix``, ``java``" +msgstr "``pipenv``, ``nose``" + +#: ../../source/specifications/dependency-specifiers.rst:234 +#, fuzzy +msgid "``sys_platform``" +msgstr "作者 (author)" + +#: ../../source/specifications/dependency-specifiers.rst:235 +#, fuzzy +msgid "``sys.platform``" +msgstr "作者 (author)" + +#: ../../source/specifications/dependency-specifiers.rst:236 +msgid "" +"``linux``, ``linux2``, ``darwin``, ``java1.8.0_51`` (note that \"linux\" " +"is from Python3 and \"linux2\" from Python2)" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:238 +msgid "``platform_machine``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:239 +msgid "``platform.machine()``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:240 +msgid "``x86_64``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:241 +msgid "``platform_python_implementation``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:242 +msgid "``platform.python_implementation()``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:243 +#, fuzzy +msgid "``CPython``, ``Jython``" +msgstr "``pipenv``, ``nose``" + +#: ../../source/specifications/dependency-specifiers.rst:244 +msgid "``platform_release``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:245 +msgid "``platform.release()``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:246 +msgid "``3.14.1-x86_64-linode39``, ``14.5.0``, ``1.8.0_51``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:247 +msgid "``platform_system``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:248 +msgid "``platform.system()``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:249 +msgid "``Linux``, ``Windows``, ``Java``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:250 +msgid "``platform_version``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:251 +msgid "``platform.version()``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:252 +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:255 +#, fuzzy +msgid "``python_version``" +msgstr "Python 版本" + +#: ../../source/specifications/dependency-specifiers.rst:256 +msgid "``'.'.join(platform.python_version_tuple()[:2])``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:257 +#, fuzzy +msgid "``3.4``, ``2.7``" +msgstr "``0.1.6``, ``1.4.2``" + +#: ../../source/specifications/dependency-specifiers.rst:258 +#, fuzzy +msgid "``python_full_version``" +msgstr "Python 版本" + +#: ../../source/specifications/dependency-specifiers.rst:259 +msgid "``platform.python_version()``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:260 +#: ../../source/specifications/dependency-specifiers.rst:266 +#, fuzzy +msgid "``3.4.0``, ``3.5.0b1``" +msgstr "``2.7.12``, ``3.6.4``" + +#: ../../source/specifications/dependency-specifiers.rst:261 +msgid "``implementation_name``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:262 +msgid "``sys.implementation.name``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:263 +#, fuzzy +msgid "``cpython``" +msgstr "python" + +#: ../../source/specifications/dependency-specifiers.rst:264 +msgid "``implementation_version``" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:265 +msgid "see definition below" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:267 +#, fuzzy +msgid "``extra``" +msgstr "url" + +#: ../../source/specifications/dependency-specifiers.rst:268 +msgid "" +"An error except when defined by the context interpreting the " +"specification." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:270 +#, fuzzy +msgid "``test``" +msgstr "``pandas-gbq``" + +#: ../../source/specifications/dependency-specifiers.rst:272 +msgid "" +"The ``implementation_version`` marker variable is derived from " +"``sys.implementation.version``::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:287 +msgid "" +"This environment markers section, initially defined through :pep:`508`, " +"supersedes the environment markers section in :pep:`345`." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:291 +#, fuzzy +msgid "Complete Grammar" +msgstr "不完全的" + +#: ../../source/specifications/dependency-specifiers.rst:293 +msgid "The complete parsley grammar::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:400 +msgid "A test program - if the grammar is in a string ``grammar``::" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:467 +msgid "Summary of changes to PEP 508" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:469 +msgid "" +"The following changes were made based on feedback after its initial " +"implementation:" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:472 +msgid "" +"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:482 +msgid "" +"pip, the recommended installer for Python packages " +"(http://pip.readthedocs.org/en/stable/)" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:485 +msgid "The parsley PEG library. (https://pypi.python.org/pypi/parsley/)" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:488 +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 :file" +":`*.dist-info` directory of an installed distribution, to record the " +"Direct URL Origin of the distribution." +msgstr "" + +#: ../../source/specifications/direct-url.rst:18 +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:22 +#: ../../source/specifications/recording-installed-packages.rst:206 +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:25 +msgid "" +"This JSON file MUST be a dictionary, compliant with :rfc:`8259` and UTF-8" +" encoded." +msgstr "" + +#: ../../source/specifications/direct-url.rst:27 +msgid "" +"If present, it MUST contain at least two fields. The first one is " +"``url``, with type ``string``. 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 archives 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.rst:34 +msgid "" +"``url`` MUST be stripped of any sensitive authentication information, for" +" security reasons." +msgstr "" + +#: ../../source/specifications/direct-url.rst:37 +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.rst:43 +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``." +msgstr "" + +#: ../../source/specifications/direct-url.rst:47 +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.rst:50 +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.rst:56 +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) " +"to install." +msgstr "" + +#: ../../source/specifications/direct-url.rst:59 +msgid "" +"A ``commit_id`` key (type ``string``) MUST be present, containing the " +"exact commit/revision number that was installed. If the VCS supports " +"commit-hash based revision identifiers, such commit-hash MUST be used as " +"``commit_id`` in order to reference the immutable version of the source " +"code that was installed." +msgstr "" + +#: ../../source/specifications/direct-url.rst:66 +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.rst:69 +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.rst:72 +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.rst:76 +msgid "These hash names SHOULD always be normalized to be lowercase." +msgstr "" + +#: ../../source/specifications/direct-url.rst:78 +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." +msgstr "" + +#: ../../source/specifications/direct-url.rst:84 +msgid "" +"A deprecated ``hash`` key (type ``string``) MAY be present for backwards " +"compatibility purposes, with value ``=``." +msgstr "" + +#: ../../source/specifications/direct-url.rst:87 +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.rst:91 +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.rst:95 +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.rst:98 +msgid "" +"``editable`` (type: ``boolean``): ``true`` if the distribution was " +"installed in editable mode, ``false`` otherwise. If absent, default to " +"``false``." +msgstr "" + +#: ../../source/specifications/direct-url.rst:101 +msgid "" +"When ``url`` refers to a local directory, it MUST have the ``file`` sheme" +" 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.rst:108 +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:113 +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.rst:119 +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:127 +msgid "Registered VCS" +msgstr "" + +#: ../../source/specifications/direct-url.rst:129 +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.rst:139 +msgid "Git" +msgstr "" + +#: ../../source/specifications/direct-url.rst:141 +#: ../../source/specifications/direct-url.rst:173 +#: ../../source/specifications/direct-url.rst:196 +#: ../../source/specifications/direct-url.rst:219 +msgid "Home page" +msgstr "" + +#: ../../source/specifications/direct-url.rst:143 +msgid "https://git-scm.com/" +msgstr "" + +#: ../../source/specifications/direct-url.rst:145 +#: ../../source/specifications/direct-url.rst:177 +#: ../../source/specifications/direct-url.rst:200 +#: ../../source/specifications/direct-url.rst:223 +msgid "vcs command" +msgstr "" + +#: ../../source/specifications/direct-url.rst:147 +#: ../../source/specifications/direct-url.rst:151 +msgid "git" +msgstr "" + +#: ../../source/specifications/direct-url.rst:149 +#: ../../source/specifications/direct-url.rst:181 +#: ../../source/specifications/direct-url.rst:204 +#: ../../source/specifications/direct-url.rst:227 +msgid "``vcs`` field" +msgstr "" + +#: ../../source/specifications/direct-url.rst:153 +#: ../../source/specifications/direct-url.rst:185 +#: ../../source/specifications/direct-url.rst:208 +#: ../../source/specifications/direct-url.rst:231 +msgid "``requested_revision`` field" +msgstr "" + +#: ../../source/specifications/direct-url.rst:155 +msgid "" +"A tag name, branch name, Git ref, commit hash, shortened commit hash, or " +"other commit-ish." +msgstr "" + +#: ../../source/specifications/direct-url.rst:158 +#: ../../source/specifications/direct-url.rst:189 +#: ../../source/specifications/direct-url.rst:212 +#: ../../source/specifications/direct-url.rst:236 +msgid "``commit_id`` field" +msgstr "" + +#: ../../source/specifications/direct-url.rst:160 +msgid "A commit hash (40 hexadecimal characters sha1)." +msgstr "" + +#: ../../source/specifications/direct-url.rst:164 +msgid "" +"Installers 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.rst:171 +msgid "Mercurial" +msgstr "" + +#: ../../source/specifications/direct-url.rst:175 +msgid "https://www.mercurial-scm.org/" +msgstr "" + +#: ../../source/specifications/direct-url.rst:179 +#: ../../source/specifications/direct-url.rst:183 +msgid "hg" +msgstr "" + +#: ../../source/specifications/direct-url.rst:187 +msgid "A tag name, branch name, changeset ID, shortened changeset ID." +msgstr "" + +#: ../../source/specifications/direct-url.rst:191 +msgid "A changeset ID (40 hexadecimal characters)." +msgstr "" + +#: ../../source/specifications/direct-url.rst:194 +msgid "Bazaar" +msgstr "" + +#: ../../source/specifications/direct-url.rst:198 +msgid "https://bazaar.canonical.com" +msgstr "" + +#: ../../source/specifications/direct-url.rst:202 +#: ../../source/specifications/direct-url.rst:206 +msgid "bzr" +msgstr "" + +#: ../../source/specifications/direct-url.rst:210 +msgid "A tag name, branch name, revision id." +msgstr "" + +#: ../../source/specifications/direct-url.rst:214 +msgid "A revision id." +msgstr "" + +#: ../../source/specifications/direct-url.rst:217 +msgid "Subversion" +msgstr "" + +#: ../../source/specifications/direct-url.rst:221 +msgid "https://subversion.apache.org/" +msgstr "" + +#: ../../source/specifications/direct-url.rst:225 +#: ../../source/specifications/direct-url.rst:229 +msgid "svn" +msgstr "" + +#: ../../source/specifications/direct-url.rst:233 +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.rst:238 +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.rst:246 +msgid "Example direct_url.json" +msgstr "" + +#: ../../source/specifications/direct-url.rst:248 +msgid "Source archive:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:261 +msgid "Git URL with tag and commit-hash:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:274 +msgid "Local directory:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:283 +msgid "Local directory installed in editable mode:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:296 +msgid "Example pip commands and their effect on direct_url.json" +msgstr "" + +#: ../../source/specifications/direct-url.rst:298 +msgid "Commands that generate a ``direct_url.json``:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:300 +msgid "``pip install https://example.com/app-1.0.tgz``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:301 +msgid "``pip install https://example.com/app-1.0.whl``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:302 +msgid "" +"``pip install " +"\"git+https://example.com/repo/app.git#egg=app&subdirectory=setup\"``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:303 +#, fuzzy +msgid "``pip install ./app``" +msgstr "``pipx`` 是用 ``pip`` 安装的:" + +#: ../../source/specifications/direct-url.rst:304 +msgid "``pip install file:///home/user/app``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:305 +msgid "" +"``pip install --editable " +"\"git+https://example.com/repo/app.git#egg=app&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:309 +#, fuzzy +msgid "``pip install -e ./app``" +msgstr "``pipx`` 是用 ``pip`` 安装的:" + +#: ../../source/specifications/direct-url.rst:311 +msgid "Commands that *do not* generate a ``direct_url.json``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:313 +#, fuzzy +msgid "``pip install app``" +msgstr "``pipx`` 是用 ``pip`` 安装的:" + +#: ../../source/specifications/direct-url.rst:314 +msgid "``pip install app --no-index --find-links https://example.com/``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:317 +msgid "History" +msgstr "" + +#: ../../source/specifications/direct-url.rst:319 +msgid "" +"March 2020: the ``direct_url.json`` metadata file was originally " +"specified in :pep:`610` and is formally documented here." +msgstr "" + +#: ../../source/specifications/direct-url.rst:321 +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 ``importlib.metadata``. It is now defined as a PyPA" +" interoperability specification in order to allow build tools other than " +"setuptools to publish ``importlib.metadata`` compatible entry point " +"metadata, and runtime libraries other than ``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 :pep:`376` for installed distributions, and in :pep:`427` " +"for wheels. The file uses the UTF-8 character encoding." +msgstr "" + +#: ../../source/specifications/entry-points.rst:87 +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:97 +msgid "" +"The entry points file must always use ``=`` to delimit names from values " +"(whereas configparser also allows using ``:``)." +msgstr "" + +#: ../../source/specifications/entry-points.rst:100 +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:104 +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:113 +msgid "For example::" +msgstr "" + +#: ../../source/specifications/entry-points.rst:125 +msgid "Use for scripts" +msgstr "" + +#: ../../source/specifications/entry-points.rst:127 +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:135 +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:142 +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 ``sys.stdin``, " +"``sys.stdout`` and ``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:150 +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:155 +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/index.rst:4 +msgid "PyPA specifications" +msgstr "PyPA 规范" + +#: ../../source/specifications/index.rst:6 +msgid "" +"This is a list of currently active interoperability specifications " +"maintained by the Python Packaging Authority. The process for updating " +"these standards, and for proposing new ones, is documented on `pypa.io " +"`__." +msgstr "" +"这是由 Python 打包管理局维护的当前活跃的互操作性规范列表。" +"更新这些标准和提出新标准的过程都记录在 `pypa.io " +"`__ 上。" + +#: ../../source/specifications/index.rst:13 +msgid "Package Distribution Metadata" +msgstr "包分发元数据" + +#: ../../source/specifications/index.rst:31 +msgid "Package Distribution File Formats" +msgstr "包分发文件格式" + +#: ../../source/specifications/index.rst:41 +msgid "Package Index Interfaces" +msgstr "包索引接口" + +#: ../../source/specifications/name-normalization.rst:5 +msgid "Package name normalization" +msgstr "包名称规范化" + +#: ../../source/specifications/name-normalization.rst:7 +msgid "" +"Project names are \"normalized\" for use in various contexts. This " +"document describes how project names should be normalized." +msgstr "" + +#: ../../source/specifications/name-normalization.rst:10 +msgid "Valid non-normalized names" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:12 +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 ``re.IGNORECASE``)::" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:20 +#, fuzzy +msgid "Normalization" +msgstr "翻译" + +#: ../../source/specifications/name-normalization.rst:22 +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:31 +msgid "This means that the following names are all equivalent:" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:33 +msgid "``friendly-bard`` (normalized form)" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:34 +msgid "``Friendly-Bard``" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:35 +msgid "``FRIENDLY-BARD``" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:36 +msgid "``friendly.bard``" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:37 +msgid "``friendly_bard``" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:38 +msgid "``friendly--bard``" +msgstr "" + +#: ../../source/specifications/name-normalization.rst:39 +msgid "``FrIeNdLy-._.-bArD`` (a _terrible_ way to write a name, but it is valid)" +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:12 +msgid "" +"The platform compatibility tagging model used for the ``wheel`` " +"distribution format is defined in :pep:`425`." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:16 +msgid "Platform tags for Windows" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:18 +msgid "" +"The scheme defined in :pep:`425` covers public distribution of wheel " +"files to systems running Windows." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:22 +msgid "Platform tags for macOS (Mac OS X)" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:24 +msgid "" +"The scheme defined in :pep:`425` covers public distribution of wheel " +"files to systems running macOS (previously known as Mac OS X)." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:28 +msgid "Platform tags for common Linux distributions" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:32 +msgid "" +"The scheme defined in :pep:`425` is insufficient for public distribution " +"of wheel files (and \\*nix wheel files in general) to Linux platforms, " +"due to the large ecosystem of Linux platforms and subtle differences " +"between them." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:36 +msgid "" +"Instead, :pep:`600` defines the ``manylinux`` standard, which 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:41 +msgid "" +"There were multiple iterations of the ``manylinux`` specification, each " +"representing the common subset of Linux platforms at a given point in " +"time:" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:44 +msgid "" +"``manylinux1`` (:pep:`513`) supports ``x86_64`` and ``i686`` " +"architectures, and is based on a compatible Linux platform from 2007." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:46 +msgid "" +"``manylinux2010`` (:pep:`571`) supports ``x86_64`` and ``i686`` " +"architectures. and updates the previous specification to be based on a " +"compatible Linux platform from 2010 instead." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:49 +msgid "" +"``manylinux2014`` (:pep:`599`) adds support for a number of additional " +"architectures (``aarch64``, ``armv7l``, ``ppc64``, ``ppc64le``, and " +"``s390x``) and updates the base platform to a compatible Linux platform " +"from 2014." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:54 +msgid "" +"``manylinux_x_y`` (:pep:`600`) supersedes all previous PEPs to define a " +"future-proof standard. It defines ``x`` and ``y`` as glibc major an minor" +" versions supported (e.g. ``manylinux_2_24`` should work on any distro " +"using glibc 2.24+). Previous tags are still supported for backward " +"compatibility." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:59 +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:65 +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:71 +msgid "Manylinux compatibility support" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:74 +msgid "" +"The ``manylinux2014`` specification is relatively new and is not yet " +"widely recognised by install tools." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:76 +msgid "" +"The ``manylinux_x_y`` specification is relatively new and is not yet " +"widely recognised by install tools." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:79 +msgid "" +"The following table shows the minimum versions of relevant projects to " +"support the various ``manylinux`` standards:" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "Tool" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux1``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux2010``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux2014``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux_x_y``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=8.1.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=19.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=19.3``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=20.3``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "auditwheel" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=1.0.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=2.0.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=3.0.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=3.3.0`` [#]_" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:90 +msgid "Platform tags for other \\*nix platforms" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:92 +msgid "" +"The scheme defined in :pep:`425` is not generally sufficient for public " +"distribution of wheel files to other \\*nix platforms. Efforts are " +"currently (albeit intermittently) under way to define improved " +"compatibility tagging schemes for AIX and for Alpine Linux." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:98 +msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +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/recording-installed-packages.rst:5 +msgid "Recording installed projects" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:7 +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:12 +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:21 +msgid "History and change workflow" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:23 +msgid "" +"The metadata described here was first specified in :pep:`376`, and later " +"amended in :pep:`627`. It was formerly known as *Database of Installed " +"Python Distributions*. Further amendments (except trivial language or " +"typography fixes) must be made through the PEP process (see :pep:`1`)." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:29 +msgid "" +"While this document is the normative specification, these PEPs that " +"introduce changes to it may include additional information such as " +"rationales and backwards compatibility considerations." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:37 +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:41 +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 :ref:`name-normalization` and :pep:`PEP 440 " +"<440#normalization>` for the definition of normalization for each field " +"respectively), 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:50 +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:60 +msgid "" +"The ``.dist-info`` directory's name is formatted to unambigiously " +"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 " +"distrubution information." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This ``.dist-info`` directory can contain these files, described in " +"detail below:" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:72 +msgid "``METADATA``: contains project metadata" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:73 +msgid "``RECORD``: records the list of installed files." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:74 +msgid "``INSTALLER``: records the name of the tool used to install the project." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:76 +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:82 +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:87 +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:94 +msgid "The METADATA file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:96 +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:99 +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:105 +msgid "The RECORD file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:107 +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:110 +msgid "" +"The CSV dialect must be readable with the default ``reader`` of Python's " +"``csv`` module:" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:113 +msgid "field delimiter: ``,`` (comma)," +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:114 +msgid "quoting char: ``\"`` (straight double quote)," +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:115 +msgid "line terminator: either ``\\r\\n`` or ``\\n``." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:117 +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:120 +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:125 +msgid "" +"The *hash* is either an empty string or the name of a hash algorithm from" +" ``hashlib.algorithms_guaranteed``, followed by the equals character " +"``=`` and the digest of the file's contents, encoded with the urlsafe-" +"base64-nopad encoding (``base64.urlsafe_b64encode(digest)`` with trailing" +" ``=`` removed)." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:130 +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:133 +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:139 +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:146 +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:151 +msgid "Here is an example snippet of a possible ``RECORD`` file::" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:170 +msgid "" +"If the ``RECORD`` file is missing, tools that rely on ``.dist-info`` must" +" not attempt to uninstall or upgrade the package. (This 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:177 +msgid "The INSTALLER file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:179 +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:185 +msgid "The file can be terminated by zero or more ASCII whitespace characters." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:187 +msgid "Here are examples of two possible ``INSTALLER`` files::" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:195 +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:201 +msgid "The direct_url.json file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:203 +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:209 +msgid "Its detailed specification is at :ref:`direct-url`." +msgstr "" + +#: ../../source/specifications/simple-repository-api.rst:6 +msgid "Simple repository API" +msgstr "" + +#: ../../source/specifications/simple-repository-api.rst:8 +msgid "" +"The current interface for querying available package versions and " +"retrieving packages from an index server is defined in :pep:`503`, with " +"the addition of \"yank\" support (allowing a kind of file deletion) in " +":pep:`592`, specifying the interface version provided by an index server " +"in :pep:`629`, and providing package metadata independently from a " +"package in :pep:`658`." +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:24 +msgid "Source trees" +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:26 +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:34 +msgid "Source distribution file name" +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:36 +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:42 +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 +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 build backend." +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:48 +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:54 +msgid "Source distribution file format" +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:56 +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:`declaring-build-" +"dependencies`, and a ``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:64 +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:67 +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/version-specifiers.rst:6 +msgid "Version specifiers" +msgstr "版本说明符" + +#: ../../source/specifications/version-specifiers.rst:8 +msgid "" +"Version numbering requirements and the semantics for specifying " +"comparisons between versions are defined in :pep:`440`." +msgstr "" + +#: ../../source/specifications/version-specifiers.rst:11 +msgid "" +"The version specifiers section in this PEP supersedes the version " +"specifiers section in :pep:`345`." +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 +#, fuzzy +msgid "" +"For something more general, or when you're just not sure, please `open an" +" issue `_ on the `packaging-" +"problems `_ repository on " +"GitHub." +msgstr "" +"如果您想了解更多的情况,或者只是不确定,请在 GitHub 上的 `packaging-problems " +"`_ 存储库中 `开一个新的 issue " +"`_ 。" + +#: ../../source/tutorials/creating-documentation.rst:5 +msgid "Creating Documentation" +msgstr "创建文档" + +#: ../../source/tutorials/creating-documentation.rst:7 +msgid "" +"This section covers the basics of how to create documentation using " +"`Sphinx`_ and host the documentation for free in `Read The Docs`_." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:14 +msgid "Installing Sphinx" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:15 +msgid "Use ``pip`` to install Sphinx:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:29 +msgid "" +"For other installation methods, see this :doc:`installation guide " +"` by Sphinx." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:33 +msgid "Getting Started With Sphinx" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:35 +msgid "" +"Create a ``docs`` directory inside your project to hold your " +"documentation:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:42 +msgid "Run ``sphinx-quickstart`` inside the ``docs`` directory:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:49 +msgid "" +"This sets up a source directory, walks you through some basic " +"configurations, and creates an ``index.rst`` file as well as a " +"``conf.py`` file." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:51 +msgid "" +"You can add some information about your project in ``index.rst``, then " +"build them:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:57 +msgid "For more details on the build process, see this `guide`_ by Read The Docs." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:62 +msgid "Other Sources" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:64 +msgid "" +"For a more detailed guide on how to use Sphinx and reStructuredText, " +"please see this `documentation tutorial`_ on Hitchhiker's Guide to " +"Python." +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 "**教程** 有主见的分步指南,帮助你熟悉包装概念。有关特定包装主题的更多详细信息,请参阅 :doc:`/guides/index`。" + +#: ../../source/tutorials/installing-packages.rst:5 +msgid "Installing Packages" +msgstr "安装包" + +#: ../../source/tutorials/installing-packages.rst:7 +msgid "" +"This section covers the basics of how to install Python :term:`packages " +"`." +msgstr "这一节涵盖了如何安装 Python :term:`包 <分发包>` 的基本知识 。" + +#: ../../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 to 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 "" +"需要注意的是,在这种情况下,术语 \"包\" 被用来描述要安装的一组软件(即作为一个 :term:`套件 <分发包>` 的同义词)。它并不是指你在" +" Python 源代码中导入的那种 :term:`包 <导入包>` (即一个模块的容器)。在 Python 社区中,通常使用术语 \"包\" " +"来指代 :term:`套件 <分发包>`。使用术语 \"分发\" 通常不是首选,因为它很容易与 Linux 发行版或另一个更大的软件发行版(如 " +"Python 本身)相混淆。" + +#: ../../source/tutorials/installing-packages.rst:28 +msgid "Requirements for Installing Packages" +msgstr "安装软件包的需求" + +#: ../../source/tutorials/installing-packages.rst:30 +msgid "" +"This section describes the steps to follow before installing other Python" +" packages." +msgstr "这一节描述了在安装其他 Python 软件包之前需要遵循的步骤。" + +#: ../../source/tutorials/installing-packages.rst:35 +msgid "Ensure you can run Python from the command line" +msgstr "确保你能从命令行运行 Python" + +#: ../../source/tutorials/installing-packages.rst:37 +msgid "" +"Before you go any further, make sure you have Python and that the " +"expected version is available from your command line. You can check this " +"by running:" +msgstr "在你进一步行动之前,确保你有 Python,并且预期的版本在你的命令行中可用。你可以通过运行以下命令来检查:" + +#: ../../source/tutorials/installing-packages.rst:53 +msgid "" +"You should get some output like ``Python 3.6.3``. If you do not have " +"Python, please install the latest 3.x version from `python.org`_ or refer" +" to the :ref:`Installing Python ` section of " +"the Hitchhiker's Guide to Python." +msgstr "" +"你应该得到一些输出,如 ``Python 3.6.3``。如果你没有 Python,请从 `python.org`_ 安装最新的 3.x " +"版本,或者参考 Hitchhiker's Guide to Python 中的章节 :ref:`安装 Python `。" + +#: ../../source/tutorials/installing-packages.rst:57 +msgid "If you're a newcomer and you get an error like this:" +msgstr "如果你是一个新人,而你遇到这样的错误:" + +#: ../../source/tutorials/installing-packages.rst:66 +msgid "" +"It's because this command and other suggested commands in this tutorial " +"are intended to be run in a *shell* (also called a *terminal* or " +"*console*). See the Python for Beginners `getting started tutorial`_ for " +"an introduction to using your operating system's shell and interacting " +"with Python." +msgstr "" +"这是因为这个命令和本教程中建议的其他命令是要在 *shell* (也叫 *终端* 或 *控制台*)。请参阅 Python for " +"Beginners `getting started tutorial`_ 了解使用操作系统的 shell 和与 Python 交互的介绍。" + +#: ../../source/tutorials/installing-packages.rst:72 +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 "" +"如果你使用的是 IPython 或 Jupyter 笔记本等增强型 shell,你可以在运行本教程中的那些系统命令时,在它们前面加上 ``!`` " +"字符来表示:" + +#: ../../source/tutorials/installing-packages.rst:82 +msgid "" +"It's recommended to write ``{sys.executable}`` rather than plain " +"``python`` in order to ensure that commands are run in the Python " +"installation matching the currently running notebook (which may not be " +"the same Python installation that the ``python`` command refers to)." +msgstr "" +"建议编写 ``{sys.executable}`` 而不是普通的 ``python``,以确保命令在与当前运行的笔记本相匹配的 Python " +"安装中运行(可能不是 ``python`` 命令所指的那个 Python 安装)。" + +#: ../../source/tutorials/installing-packages.rst:87 +msgid "" +"Due to the way most Linux distributions are handling the Python 3 " +"migration, Linux users using the system Python without creating a virtual" +" environment first should replace the ``python`` command in this tutorial" +" with ``python3`` and the ``python -m pip`` command with ``python3 -m pip" +" --user``. Do *not* run any of the commands in this tutorial with " +"``sudo``: if you get a permissions error, come back to the section on " +"creating virtual environments, set one up, and then continue with the " +"tutorial as written." +msgstr "" +"由于大多数 Linux 发行版处理 Python 3 迁移的方式,使用系统 Python 而不先创建虚拟环境的 Linux 用户应将本教程中的 " +"``python`` 命令改为 ``python3``,``python -m pip`` 命令改为 ``python3 -m pip " +"--user``。不要用 ``sudo`` " +"运行本教程中的任何命令:如果你得到一个权限错误,请回到创建虚拟环境的部分,设置一个虚拟环境,然后继续学习本教程。" + +#: ../../source/tutorials/installing-packages.rst:99 +msgid "Ensure you can run pip from the command line" +msgstr "确保你能从命令行运行 pip" + +#: ../../source/tutorials/installing-packages.rst:101 +msgid "" +"Additionally, you'll need to make sure you have :ref:`pip` available. You" +" can check this by running:" +msgstr "此外,你需要确保你有 :ref:`pip` 可用。你可以通过运行以下程序来检查:" + +#: ../../source/tutorials/installing-packages.rst:116 +msgid "" +"If you installed Python from source, with an installer from " +"`python.org`_, or via `Homebrew`_ you should already have pip. If you're " +"on Linux and installed using your OS package manager, you may have to " +"install pip separately, see :doc:`/guides/installing-using-linux-tools`." +msgstr "" +"如果你从源代码,通过 `python.org`_ 的安装程序,或通过 `Homebrew`_ 安装了 Python,你应该已经有了 " +"pip。如果你是在 Linux 上,并且使用你的操作系统包管理器安装,你可能需要单独安装 pip,参见 :doc:`/guides" +"/installing-using-linux-tools`。" + +#: ../../source/tutorials/installing-packages.rst:123 +msgid "" +"If ``pip`` isn't already installed, then first try to bootstrap it from " +"the standard library:" +msgstr "如果 ``pip`` 还没有安装,那么首先尝试从标准库启动它:" + +#: ../../source/tutorials/installing-packages.rst:138 +msgid "If that still doesn't allow you to run ``python -m pip``:" +msgstr "如果这仍然不允许你运行 ``python -m pip`` :" + +#: ../../source/tutorials/installing-packages.rst:140 +msgid "" +"Securely Download `get-pip.py `_ " +"[1]_" +msgstr "安全下载 `get-pip.py `_ [1]_" + +#: ../../source/tutorials/installing-packages.rst:143 +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 "" +"运行 ``python get-pip.py``。[2]_ 这将安装或升级 pip。此外,它将安装 :ref:`setuptools` 和 " +":ref:`wheel`,如果它们还没有安装。" + +#: ../../source/tutorials/installing-packages.rst:149 +msgid "" +"Be cautious if you're using a Python install that's managed by your " +"operating system or another package manager. get-pip.py does not " +"coordinate with those tools, and may leave your system in an inconsistent" +" state. You can use ``python get-pip.py --prefix=/usr/local/`` to install" +" in ``/usr/local`` which is designed for locally-installed software." +msgstr "" +"如果你使用的 Python 安装是由你的操作系统或其他软件包管理器管理的,那就要小心了。get-pip.py " +"不与这些工具协调,可能会让你的系统处于不一致的状态。你可以使用 ``python get-pip.py " +"--prefix=/usr/local/`` 来安装在 ``/usr/local`` 中,这是为本地安装的软件设计的。" + +#: ../../source/tutorials/installing-packages.rst:158 +msgid "Ensure pip, setuptools, and wheel are up to date" +msgstr "确保 pip、setuptools 和 wheel 是最新的。" + +#: ../../source/tutorials/installing-packages.rst:160 +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 "" +"虽然单靠 ``pip`` 就足以从预先建立的二进制档案中进行安装,但 ``setuptools`` 和 ``wheel`` " +"项目的最新副本对于确保你也能从源代码档案中进行安装非常有用:" + +#: ../../source/tutorials/installing-packages.rst:177 +msgid "Optionally, create a virtual environment" +msgstr "可选地,创建一个虚拟环境" + +#: ../../source/tutorials/installing-packages.rst:179 +msgid "" +"See :ref:`section below ` for " +"details, but here's the basic :doc:`venv ` [3]_ " +"command to use on a typical Linux system:" +msgstr "" +"详见 :ref:`下面的 ` 部分,但以下是在典型的 Linux" +" 系统上使用的基本 :doc:`venv ` [3]_ 命令:" + +#: ../../source/tutorials/installing-packages.rst:196 +msgid "" +"This will create a new virtual environment in the ``tutorial_env`` " +"subdirectory, and configure the current shell to use it as the default " +"``python`` environment." +msgstr "这将在 ``tutorial_env`` 子目录下创建一个新的虚拟环境,并将当前的 shell 配置为使用它作为默认的 ``python`` 环境。" + +#: ../../source/tutorials/installing-packages.rst:203 +msgid "Creating Virtual Environments" +msgstr "创建虚拟环境" + +#: ../../source/tutorials/installing-packages.rst:205 +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 "" +"Python \"虚拟环境\" 允许 Python :term:`包 <分发包>` " +"为特定的应用程序安装在一个孤立的位置,而不是全局安装。如果你想安全地安装全局命令行工具,请参阅 :doc:`/guides/installing-" +"stand-alone-command-line-tools`。" + +#: ../../source/tutorials/installing-packages.rst:211 +msgid "" +"Imagine you have an application that needs version 1 of LibFoo, but " +"another application requires version 2. How can you use both these " +"applications? If you install everything into /usr/lib/python3.6/site-" +"packages (or whatever your platform’s standard location is), it’s easy to" +" end up in a situation where you unintentionally upgrade an application " +"that shouldn’t be upgraded." +msgstr "" +"想象一下,你有一个需要 LibFoo 版本 1 的应用程序,但另一个应用程序需要版本 2。你怎么能同时使用这些应用程序呢?如果你把所有东西都安装到" +" /usr/lib/python3.6/Site-packages " +"(或者你的平台的标准位置),很容易出现无意中升级一个不应该升级的应用程序的情况。" + +#: ../../source/tutorials/installing-packages.rst:217 +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:221 +msgid "" +"Also, what if you can’t install :term:`packages ` " +"into the global site-packages directory? For instance, on a shared host." +msgstr "另外,如果你不能把 :term:`包 <分发包>` 安装到全局站点的 packages 目录中,怎么办?例如,在一个共享主机上。" + +#: ../../source/tutorials/installing-packages.rst:224 +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:228 +msgid "" +"Currently, there are two common tools for creating Python virtual " +"environments:" +msgstr "目前,有两种创建 Python 虚拟环境的常用工具:" + +#: ../../source/tutorials/installing-packages.rst:230 +msgid "" +":doc:`venv ` is available by default in Python 3.3 " +"and later, and installs :ref:`pip` and :ref:`setuptools` into created " +"virtual environments in Python 3.4 and later." +msgstr "" +":doc:`venv ` 在 Python 3.3 及以后的版本中默认可用,并在 Python 3.4 " +"及以后的版本中把 :ref:`pip` 和 :ref:`setuptools` 安装到创建的虚拟环境中。" + +#: ../../source/tutorials/installing-packages.rst:233 +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 "" +":ref:`virtualenv` 需要单独安装,但支持 Python 2.7+ 和 Python 3.3+,并且 " +":ref:`pip`、:ref:`setuptools` 和 :ref:`wheel` 总是默认安装到创建的虚拟环境中(无论 Python " +"版本如何)。" + +#: ../../source/tutorials/installing-packages.rst:238 +msgid "The basic usage is like so:" +msgstr "基本的用法是这样的:" + +#: ../../source/tutorials/installing-packages.rst:240 +msgid "Using :doc:`venv `:" +msgstr "使用 :doc:`venv `:" + +#: ../../source/tutorials/installing-packages.rst:256 +msgid "Using :ref:`virtualenv`:" +msgstr "使用 :ref:`virtualenv`:" + +#: ../../source/tutorials/installing-packages.rst:272 +msgid "" +"For more information, see the :doc:`venv ` docs or " +"the :doc:`virtualenv ` docs." +msgstr "" +"更多信息,请参阅 :doc:`venv ` 文档或 :doc:`virtualenv " +"` 文档。" + +#: ../../source/tutorials/installing-packages.rst:275 +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 "" +"在 Unix 外壳下使用 :command:`source` " +"可以确保虚拟环境的变量是在当前的外壳中设置的,而不是在子进程中设置的(子进程随后消失,没有任何作用)。" + +#: ../../source/tutorials/installing-packages.rst:280 +msgid "" +"In both of the above cases, Windows users should _not_ use the " +":command:`source` command, but should rather run the :command:`activate` " +"script directly from the command shell like so:" +msgstr "" +"在上述两种情况下,Windows 用户不应该使用 :command:`source` 命令,而应该像这样直接从命令外壳运行 " +":command:`activate` 脚本:" + +#: ../../source/tutorials/installing-packages.rst:290 +msgid "" +"Managing multiple virtual environments directly can become tedious, so " +"the :ref:`dependency management tutorial ` " +"introduces a higher level tool, :ref:`Pipenv`, that automatically manages" +" a separate virtual environment for each project and application that you" +" work on." +msgstr "" +"直接管理多个虚拟环境会变得很乏味,所以 :ref:`依赖管理教程 ` " +"介绍了一个更高层次的工具,:ref:`Pipenv`,它为你工作的每个项目和应用程序自动管理一个单独的虚拟环境。" + +#: ../../source/tutorials/installing-packages.rst:297 +msgid "Use pip for Installing" +msgstr "使用 pip 进行安装" + +#: ../../source/tutorials/installing-packages.rst:299 +msgid "" +":ref:`pip` is the recommended installer. Below, we'll cover the most " +"common usage scenarios. For more detail, see the :doc:`pip docs " +"`, which includes a complete :doc:`Reference Guide " +"`." +msgstr "" +":ref:`pip` 是推荐的安装程序。下面,我们将介绍最常见的使用场景。更多细节,请参阅 :doc:`pip docs " +"`,其中包括一个完整的 :doc:`参考指南 `。" + +#: ../../source/tutorials/installing-packages.rst:305 +msgid "Installing from PyPI" +msgstr "从 PyPI 进行安装" + +#: ../../source/tutorials/installing-packages.rst:307 +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 `. :pep:`440` contains a " +":pep:`full specification <440#version-specifiers>` of the currently " +"supported specifiers. Below are some examples." +msgstr "" +":ref:`pip` 最常见的用法是使用 :term:`Python 包索引 ` 来安装,使用 " +":term:`requirement specifier `。一般来说,需求说明由项目名称和可选的 " +":term:`version specifier ` 组成。:pep:`440` 包含一个 " +":pep:`full specification <440#version-specifiers>` 的当前支持的说明。下面是一些例子。" + +#: ../../source/tutorials/installing-packages.rst:315 +msgid "To install the latest version of \"SomeProject\":" +msgstr "要安装最新版本的 \"SomeProject\":" + +#: ../../source/tutorials/installing-packages.rst:329 +msgid "To install a specific version:" +msgstr "要安装一个特定的版本:" + +#: ../../source/tutorials/installing-packages.rst:343 +msgid "To install greater than or equal to one version and less than another:" +msgstr "要安装大于或等于一个版本而小于另一个版本的产品:" + +#: ../../source/tutorials/installing-packages.rst:358 +msgid "" +"To install a version that's :pep:`\"compatible\" <440#compatible-" +"release>` with a certain version: [4]_" +msgstr "要安装一个与 :pep:`\"compatible\" <440#compatible-release>` 兼容某一版本:[4]_" + +#: ../../source/tutorials/installing-packages.rst:373 +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:378 +msgid "Source Distributions vs Wheels" +msgstr "源分发与轮子" + +#: ../../source/tutorials/installing-packages.rst:380 +msgid "" +":ref:`pip` can install from either :term:`Source Distributions (sdist) " +"` or :term:`Wheels `, but if " +"both are present on PyPI, pip will prefer a compatible :term:`wheel " +"`. You can override pip`s default behavior by e.g. using its :ref" +":`--no-binary ` option." +msgstr "" +":ref:`pip` 可以从 :term:`源分发(sdist) <源分发(或 \"sdist\")>` 或 :term:`轮子 " +"` 安装,但如果两者都存在于 PyPI 上,pip 会优先选择兼容的 :term:`轮子 `。你可以通过使用 :ref" +":`-no-binary ` 选项来覆盖 pip 的默认行为。" + +#: ../../source/tutorials/installing-packages.rst:386 +msgid "" +":term:`Wheels ` are a pre-built :term:`distribution ` format that provides faster installation compared to " +":term:`Source Distributions (sdist) `, especially when a project contains compiled extensions." +msgstr "" +":term:`轮子 ` 是一种预先建立的 :term:`distribution <分发包>` 格式,与 " +":term:`源分发(sdist) <源分发(或 \"sdist\")>` 相比,它提供更快的安装,特别是当一个项目包含编译的扩展。" + +#: ../../source/tutorials/installing-packages.rst:391 +msgid "" +"If :ref:`pip` does not find a wheel to install, it will locally build a " +"wheel and cache it for future installs, instead of rebuilding the source " +"distribution in the future." +msgstr "如果 :ref:`pip` 没有找到要安装的轮子,它将在本地建立一个轮子,并为将来的安装进行缓存,而不是在将来重建源码分布。" + +#: ../../source/tutorials/installing-packages.rst:399 +msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." +msgstr "将已经安装的 ``SomeProject`` 升级到 PyPI 的最新版本。" + +#: ../../source/tutorials/installing-packages.rst:416 +msgid "Installing to the User Site" +msgstr "安装到用户站点" + +#: ../../source/tutorials/installing-packages.rst:418 +msgid "" +"To install :term:`packages ` that are isolated to " +"the current user, use the ``--user`` flag:" +msgstr "要安装 :term:`包 <分发包>` 隔离于当前用户,请使用 ``--user`` 标志:" + +#: ../../source/tutorials/installing-packages.rst:433 +msgid "" +"For more information see the `User Installs " +"`_ section from " +"the pip docs." +msgstr "" +"更多信息请参见 pip docs 中的 `用户安装 `_ 部分。" + +#: ../../source/tutorials/installing-packages.rst:437 +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:440 +msgid "" +"If ``SomeProject`` defines any command-line scripts or console entry " +"points, ``--user`` will cause them to be installed inside the `user " +"base`_'s binary directory, which may or may not already be present in " +"your shell's :envvar:`PATH`. (Starting in version 10, pip displays a " +"warning when installing any scripts to a directory outside " +":envvar:`PATH`.) If the scripts are not available in your shell after " +"installation, you'll need to add the directory to your :envvar:`PATH`:" +msgstr "" +"如果 ``SomeProject`` 定义了任何命令行脚本或控制台入口点,``--user`` 将导致它们被安装在 `user base`_ " +"的二进制目录中,该目录可能已经存在于你的 shell 的 :envvar:`PATH` 中,也可能不存在。(从版本 10 开始,当安装任何脚本到 " +":envvar:`PATH` 以外的目录时,pip 会显示一个警告。)如果安装后脚本在你的 shell 中不可用,你需要将该目录添加到你的 " +":envvar:`PATH` 中:" + +#: ../../source/tutorials/installing-packages.rst:448 +msgid "" +"On Linux and macOS you can find the user base binary directory by running" +" ``python -m site --user-base`` and adding ``bin`` to the end. For " +"example, this will typically print ``~/.local`` (with ``~`` expanded to " +"the absolute path to your home directory) so you'll need to add " +"``~/.local/bin`` to your ``PATH``. You can set your ``PATH`` permanently" +" by `modifying ~/.profile`_." +msgstr "" +"在 Linux 和 macOS 上,你可以通过运行 ``python -m site --user-base`` 并在后面添加 ``bin`` " +"来找到用户基础二进制目录。例如,这通常会打印出 ``~/.local`` ( ``~`` 扩展为你的主目录的绝对路径),所以你需要将 " +"``~/.local/bin`` 加入你的 ``PATH``。你可以通过 `修改 ~/.profile`_ 来永久设置你的 ``PATH``。" + +#: ../../source/tutorials/installing-packages.rst:454 +msgid "" +"On Windows you can find the user base binary directory by running ``py -m" +" site --user-site`` and replacing ``site-packages`` with ``Scripts``. For" +" example, this could return " +"``C:\\Users\\Username\\AppData\\Roaming\\Python36\\site-packages`` so you" +" would need to set your ``PATH`` to include " +"``C:\\Users\\Username\\AppData\\Roaming\\Python36\\Scripts``. You can set" +" your user ``PATH`` permanently in the `Control Panel`_. You may need to " +"log out for the ``PATH`` changes to take effect." +msgstr "" +"在 Windows 上,你可以通过运行 ``py -m site --user-site`` 并将 ``site-packages`` 替换为 " +"``Scripts`` 来找到用户基础二进制目录。例如,这可能会返回 " +"``C:\\Users\\Username\\AppData\\Roaming\\Python36/site-" +"packages``,所以你需要设置你的 ``PATH`` 以包括 " +"``C:\\Users\\Username\\AppData\\Roaming\\Python36/Scripts``。你可以在 `控制面板`_ " +"中永久设置你的用户 ``PATH``。你可能需要注销才能使 ``PATH`` 的改变生效。" + +#: ../../source/tutorials/installing-packages.rst:470 +msgid "" +"Install a list of requirements specified in a :ref:`Requirements File " +"`." +msgstr "安装一个在 :ref:`需求文件 ` 中指定的需求列表。" + +#: ../../source/tutorials/installing-packages.rst:486 +msgid "Installing from VCS" +msgstr "从 VCS 安装" + +#: ../../source/tutorials/installing-packages.rst:488 +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 "" +"以 \"editable\" 模式从 VCS 安装一个项目。关于语法的详细介绍,请参见 pip 的 :ref:`VCS 支持 ` 部分。" + +#: ../../source/tutorials/installing-packages.rst:510 +msgid "Installing from other Indexes" +msgstr "从其他索引中安装" + +#: ../../source/tutorials/installing-packages.rst:512 +msgid "Install from an alternate index" +msgstr "从另一个索引安装" + +#: ../../source/tutorials/installing-packages.rst:526 +msgid "" +"Search an additional index during install, in addition to :term:`PyPI " +"`" +msgstr "在安装过程中,除了 :term:`PyPI ` 之外,还要搜索一个额外的索引" + +#: ../../source/tutorials/installing-packages.rst:542 +msgid "Installing from a local src tree" +msgstr "从本地 src 树上安装" + +#: ../../source/tutorials/installing-packages.rst:545 +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 "" +"在 :doc:`Development Mode ` 中从本地 " +"src 安装,即以这样一种方式,项目看似已经安装,但仍可从 src 树上编辑。" + +#: ../../source/tutorials/installing-packages.rst:562 +msgid "You can also install normally from src" +msgstr "你也可以从 src 中正常安装" + +#: ../../source/tutorials/installing-packages.rst:579 +msgid "Install a particular source archive file." +msgstr "安装一个特定的源存档文件。" + +#: ../../source/tutorials/installing-packages.rst:593 +msgid "" +"Install from a local directory containing archives (and don't check " +":term:`PyPI `)" +msgstr "从包含档案的本地目录中安装(并且不要检查 :term:`PyPI ` )" + +#: ../../source/tutorials/installing-packages.rst:613 +msgid "Installing from other sources" +msgstr "从其他来源安装" + +#: ../../source/tutorials/installing-packages.rst:615 +msgid "" +"To install from other data sources (for example Amazon S3 storage) you " +"can create a helper application that presents the data in a :pep:`503` " +"compliant index format, and use the ``--extra-index-url`` flag to direct " +"pip to use that index." +msgstr "" +"要从其他数据源(例如 Amazon S3 存储)安装,你可以创建一个辅助应用程序,以 :pep:`503` 兼容的索引格式展示数据,并使用 " +"``--extra-index-url`` 标志来指导 pip 使用该索引。" + +#: ../../source/tutorials/installing-packages.rst:627 +msgid "Installing Prereleases" +msgstr "安装预发行版" + +#: ../../source/tutorials/installing-packages.rst:629 +msgid "" +"Find pre-release and development versions, in addition to stable " +"versions. By default, pip only finds stable versions." +msgstr "除了稳定版本之外,还可以找到预发布版本和开发版本。默认情况下,pip 只查找稳定版本。" + +#: ../../source/tutorials/installing-packages.rst:645 +#, fuzzy +msgid "Installing \"Extras\"" +msgstr "安装附加功能" + +#: ../../source/tutorials/installing-packages.rst:647 +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:670 +msgid "" +"\"Secure\" in this context means using a modern browser or a tool like " +":command:`curl` that verifies SSL certificates when downloading from " +"https URLs." +msgstr "\"Secure\" 在这里意味着使用现代浏览器或像 :command:`curl` 这样的工具,在从 https 网址下载时验证 SSL 证书。" + +#: ../../source/tutorials/installing-packages.rst:679 +msgid "" +"Beginning with Python 3.4, ``venv`` (a stdlib alternative to " +":ref:`virtualenv`) will create virtualenv environments with ``pip`` pre-" +"installed, thereby making it an equal alternative to :ref:`virtualenv`." +msgstr "" +"从 Python 3.4 开始,``venv`` ( :ref:`virtualenv` 的 stdlib 替代品)将创建预装了 ``pip`` " +"的 virtualenv 环境,从而使其成为 :ref:`virtualenv` 的同等替代品。" + +#: ../../source/tutorials/installing-packages.rst:684 +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 "管理应用程序的依赖性" + +#: ../../source/tutorials/managing-dependencies.rst:6 +msgid "" +"The :ref:`package installation tutorial ` covered " +"the basics of getting set up to install and update Python packages." +msgstr ":ref:`软件包安装教程 ` 涵盖了安装和更新 Python 软件包的基本设置。" + +#: ../../source/tutorials/managing-dependencies.rst:9 +msgid "" +"However, running these commands interactively can get tedious even for " +"your own personal projects, and things get even more difficult when " +"trying to set up development environments automatically for projects with" +" multiple contributors." +msgstr "然而,即使对你自己的个人项目来说,交互式地运行这些命令也会变得很乏味,而当试图为有多个贡献者的项目自动设置开发环境时,事情就变得更加困难了。" + +#: ../../source/tutorials/managing-dependencies.rst:13 +msgid "" +"This tutorial walks you through the use of :ref:`Pipenv` to manage " +"dependencies for an application. It will show you how to install and use " +"the necessary tools and make strong recommendations on best practices." +msgstr "本教程指导你使用 :ref:`Pipenv` 来管理应用程序的依赖性。它将向你展示如何安装和使用必要的工具,并对最佳实践提出有力的建议。" + +#: ../../source/tutorials/managing-dependencies.rst:17 +msgid "" +"Keep in mind that Python is used for a great many different purposes, and" +" precisely how you want to manage your dependencies may change based on " +"how you decide to publish your software. The guidance presented here is " +"most directly applicable to the development and deployment of network " +"services (including web applications), but is also very well suited to " +"managing development and testing environments for any kind of project." +msgstr "" +"请记住,Python " +"被用于许多不同的目的,而且准确地说,你想如何管理你的依赖关系可能会根据你决定如何发布你的软件而改变。这里提出的指导意见最直接地适用于网络服务的开发和部署(包括网络应用),但也非常适用于管理任何种类项目的开发和测试环境。" + +#: ../../source/tutorials/managing-dependencies.rst:24 +#, fuzzy +msgid "" +"For alternatives, see `Other Tools for Application Dependency " +"Management`_." +msgstr "用于应用程序依赖性管理的其他工具" + +#: ../../source/tutorials/managing-dependencies.rst:27 +msgid "Installing Pipenv" +msgstr "安装 Pipenv" + +#: ../../source/tutorials/managing-dependencies.rst:29 +msgid "" +":ref:`Pipenv` is a dependency manager for Python projects. If you're " +"familiar with Node.js' `npm`_ or Ruby's `bundler`_, it is similar in " +"spirit to those tools. While :ref:`pip` alone is often sufficient for " +"personal use, Pipenv is recommended for collaborative projects as it's a " +"higher-level tool that simplifies dependency management for common use " +"cases." +msgstr "" +":ref:`Pipenv` 是一个 Python 项目的依赖管理器。如果你熟悉 Node.js 的 `npm`_ 或 Ruby 的 " +"`bundler`_,它与这些工具的精神相似。虽然 :ref:`pip` 单独使用通常就足够了,但 Pipenv " +"被推荐用于合作项目,因为它是一个更高级别的工具,为常见的使用情况简化了依赖管理。" + +#: ../../source/tutorials/managing-dependencies.rst:35 +msgid "Use ``pip`` to install Pipenv:" +msgstr "使用 ``pip`` 来安装Pipenv:" + +#: ../../source/tutorials/managing-dependencies.rst:51 +msgid "" +"This does a `user installation`_ to prevent breaking any system-wide " +"packages. If ``pipenv`` isn't available in your shell after installation," +" you'll need to add the :py:data:`user base `'s " +"binary directory to your ``PATH``. See :ref:`Installing to the User Site`" +" for more information." +msgstr "" +"这将做一个 `user installation`_,以防止破坏任何系统范围的软件包。如果 ``pipenv`` 在安装后在你的 shell " +"中不可用,你需要将 :py:data:`user base ` 的二进制目录加入你的 " +"``PATH``。参见 :ref:`Installing to the User Site` 获取更多信息。" + +#: ../../source/tutorials/managing-dependencies.rst:62 +msgid "Installing packages for your project" +msgstr "为你的项目安装软件包" + +#: ../../source/tutorials/managing-dependencies.rst:64 +msgid "" +"Pipenv manages dependencies on a per-project basis. To install packages, " +"change into your project's directory (or just an empty directory for this" +" tutorial) and run:" +msgstr "Pipenv 在每个项目的基础上管理依赖性。要安装软件包,请进入你的项目目录(或者在本教程中只是一个空目录)并运行:" + +#: ../../source/tutorials/managing-dependencies.rst:73 +msgid "" +"Pipenv will install the `Requests`_ library and create a ``Pipfile`` for " +"you in your project's directory. The :ref:`Pipfile` is used to track " +"which dependencies your project needs in case you need to re-install " +"them, such as when you share your project with others. You should get " +"output similar to this (although the exact paths shown will vary):" +msgstr "" +"Pipenv 将安装 `Requests`_ 库并在你的项目目录中为你创建一个 ``Pipfile``。:ref:`Pipfile` " +"用于跟踪你的项目需要哪些依赖,以备你需要重新安装它们,例如当你与他人分享你的项目时。你应该得到类似这样的输出(尽管显示的确切路径会有所不同):" + +#: ../../source/tutorials/managing-dependencies.rst:109 +msgid "Using installed packages" +msgstr "使用已安装的软件包" + +#: ../../source/tutorials/managing-dependencies.rst:111 +msgid "" +"Now that Requests is installed you can create a simple :file:`main.py` " +"file to use it:" +msgstr "现在 Requests 已经安装完毕,你可以创建一个简单的 :file:`main.py` 文件来使用它:" + +#: ../../source/tutorials/managing-dependencies.rst:122 +msgid "Then you can run this script using ``pipenv run``:" +msgstr "然后你可以使用 ``pipenv run`` 来运行这个脚本。" + +#: ../../source/tutorials/managing-dependencies.rst:128 +msgid "You should get output similar to this:" +msgstr "你应该得到与此类似的输出:" + +#: ../../source/tutorials/managing-dependencies.rst:134 +msgid "" +"Using ``pipenv run`` ensures that your installed packages are available " +"to your script. It's also possible to spawn a new shell that ensures all " +"commands have access to your installed packages with ``pipenv shell``." +msgstr "" +"使用 ``pipenv run`` 可以确保你安装的软件包对你的脚本可用。也可以用 ``pipenv shell`` 催生一个新的 " +"shell,确保所有命令都能访问你安装的软件包。" + +#: ../../source/tutorials/managing-dependencies.rst:140 +#: ../../source/tutorials/packaging-projects.rst:484 +msgid "Next steps" +msgstr "下一步" + +#: ../../source/tutorials/managing-dependencies.rst:142 +msgid "" +"Congratulations, you now know how to effectively manage dependencies and " +"development environments on a collaborative Python project! ✨ 🍰 ✨" +msgstr "恭喜你,你现在知道如何在一个合作的 Python 项目中有效地管理依赖性和开发环境了!。✨ 🍰 ✨" + +#: ../../source/tutorials/managing-dependencies.rst:145 +msgid "" +"If you're interested in creating and distributing your own Python " +"packages, see the :ref:`tutorial on packaging and distributing packages " +"`." +msgstr "" +"如果你对创建和发布你自己的 Python 软件包感兴趣,请参阅 :ref:`关于打包和发布软件包的教程 `。" + +#: ../../source/tutorials/managing-dependencies.rst:148 +msgid "" +"Note that when your application includes definitions of Python source " +"packages, they (and their dependencies) can be added to your ``pipenv`` " +"environment with ``pipenv install -e `` (e.g. ``pipenv install -e .`` or ``pipenv install -e src``)." +msgstr "" +"注意,当你的应用程序包括 Python 源代码包的定义时,它们(和它们的依赖关系)可以通过 ``pipenv install -e " +"`` 添加到你的 ``pipenv`` 环境中(例如 ``pipenv " +"install -e .`` 或 ``pipenv install -e src``)。" + +#: ../../source/tutorials/managing-dependencies.rst:157 +msgid "Other Tools for Application Dependency Management" +msgstr "用于应用程序依赖性管理的其他工具" + +#: ../../source/tutorials/managing-dependencies.rst:159 +#, fuzzy +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 +#, fuzzy +msgid "" +"`hatch `_ for opinionated coverage of even" +" more steps in the project management workflow, such as incrementing " +"versions and creating new skeleton projects from project templates." +msgstr "" +"`hatch `_ " +"对项目管理工作流程中更多的步骤(如递增版本、标记发布和从项目模板中创建新的骨架项目)进行了有观点的报道" + +#: ../../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 tool supporting :pep:`582` (replacing virtual environments " +"with ``__pypackages__`` directory for package installation) and relying " +"on standards such as :pep:`517` and :pep:`621`." +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:174 +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:177 +#, fuzzy +msgid "" +"`Poetry `__ for a tool " +"comparable in scope to Pipenv that focuses more directly on use cases " +"where the project being managed is structured as a distributable Python " +"package with a valid ``pyproject.toml`` file. By contrast, Pipenv " +"explicitly avoids making the assumption that the application being worked" +" on will support distribution as a ``pip``-installable Python package." +msgstr "" +"`poetry `__ 为一个与 ``pipenv`` " +"范围相当的工具,它更直接地关注被管理的资源库的结构是一个具有有效的 ``pyproject.toml`` 文件的 Python " +"项目(相比之下,``pipenv`` 明确避免假设正在工作的应用程序依赖于 PyPI 的组件,它本身支持作为一个 ``pip`` 可安装的 " +"Python 包发布)。" + +#: ../../source/tutorials/packaging-projects.rst:2 +msgid "Packaging Python Projects" +msgstr "包装 Python 项目" + +#: ../../source/tutorials/packaging-projects.rst:4 +#, fuzzy +msgid "" +"This tutorial walks you through how to package a simple Python project. " +"It will show you how to add the necessary files and structure to create " +"the package, how to build the package, and how to upload it to the Python" +" Package Index (PyPI)." +msgstr "" +"本教程将指导你如何打包一个简单的 Python 项目。它将告诉你如何添加必要的文件和结构来创建包,如何构建包,以及如何将其上传到 Python " +"包索引。" + +#: ../../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 "" +"如果你在运行本教程中的命令时遇到困难,请复制命令及其输出,然后在 GitHub 上的 `packaging-problems`_ 仓库中 " +"`open an issue`_。我们会尽力帮助你!" + +#: ../../source/tutorials/packaging-projects.rst:18 +msgid "" +"Some of the commands require a newer version of :ref:`pip`, so start by " +"making sure you have the latest version installed:" +msgstr "一些命令需要较新版本的 :ref:`pip`,所以首先要确保你安装了最新的版本:" + +#: ../../source/tutorials/packaging-projects.rst:35 +msgid "A simple project" +msgstr "一个简单的项目" + +#: ../../source/tutorials/packaging-projects.rst:37 +msgid "" +"This tutorial uses a simple project named " +"``example_package_YOUR_USERNAME_HERE``. If your username is ``me``, then " +"the package would be ``example_package_me``; this ensures that you have a" +" unique package name that doesn't conflict with packages uploaded by " +"other people following this tutorial. We recommend following this " +"tutorial as-is using this project, before packaging your own project." +msgstr "" + +#: ../../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 "" +":file:`__init__.py` is required to import the directory as a package, and" +" should be empty." +msgstr ":file:`__init__.py` 是导入目录作为一个包所需要的,应该是空的。" + +#: ../../source/tutorials/packaging-projects.rst:60 +msgid "" +":file:`example.py` is an example of a module within the package that " +"could contain the logic (functions, classes, constants, etc.) of your " +"package. Open that file and enter the following content:" +msgstr ":file:`example.py` 是包内模块的一个例子,可以包含你的包的逻辑(函数、类、常量等等)。打开该文件并输入以下内容:" + +#: ../../source/tutorials/packaging-projects.rst:69 +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 "" +"如果你不熟悉 Python 的 :term:`modules ` 和 :term:`import packages `,请花几分钟时间阅读一下 `Python 软件包和模块的文档`_。" + +#: ../../source/tutorials/packaging-projects.rst:73 +msgid "" +"Once you create this structure, you'll want to run all of the commands in" +" this tutorial within the ``packaging_tutorial`` directory." +msgstr "一旦你创建了这个结构,你就想在 ``packaging_tutorial`` 目录下运行本教程中的所有命令。" + +#: ../../source/tutorials/packaging-projects.rst:81 +msgid "Creating the package files" +msgstr "创建包文件" + +#: ../../source/tutorials/packaging-projects.rst:83 +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:101 +msgid "Creating a test directory" +msgstr "创建测试目录" + +#: ../../source/tutorials/packaging-projects.rst:103 +msgid ":file:`tests/` is a placeholder for test files. Leave it empty for now." +msgstr ":file:`tests/` 是一个测试文件的占位符。现在让它为空。" + +#: ../../source/tutorials/packaging-projects.rst:107 +msgid "Creating pyproject.toml" +msgstr "创建 pyproject.toml" + +#: ../../source/tutorials/packaging-projects.rst:112 +msgid "" +":file:`pyproject.toml` tells \"frontend\" build tools like :ref:`pip` and" +" :ref:`build` what \"backend\" tool to use to create :term:`distribution " +"packages ` for your project. 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:122 +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:127 +msgid "" +"Open :file:`pyproject.toml` and enter one of these ``[build-system]`` " +"tables:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:162 +msgid "" +"``requires`` is a list of packages that are needed to build your package." +" You don't need to install them; build frontends like :ref:`pip` will " +"install them automatically in a temporary, isolated virtual environment " +"for use during the build process." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:166 +msgid "" +"``build-backend`` is the name of the Python object that frontends will " +"use to perform the build." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:174 +msgid "Configuring metadata" +msgstr "配置元数据" + +#: ../../source/tutorials/packaging-projects.rst:176 +#, fuzzy +msgid "" +"Open :file:`pyproject.toml` and enter the following content. Change the " +"``name`` to include your username; this ensures that you have a unique " +"package name that doesn't conflict with packages uploaded by other people" +" following this tutorial." +msgstr "" +"打开 :file:`setup.cfg` 并输入以下内容。把 ``name`` " +"改成包括你的用户名;这可以确保你有一个独特的软件包名称,而且你的软件包不会与其他按照本教程上传的软件包冲突。" + +#: ../../source/tutorials/packaging-projects.rst:202 +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:207 +msgid "" +"``version`` is the package version. See the :ref:`version specifier " +"specification ` for more details on versions. Some " +"build backends allow it to be specified another way, such as from a file " +"or a git tag." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:210 +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:213 +msgid "``description`` is a short, one-sentence summary of the package." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:214 +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:`project metadata specification `." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:219 +msgid "" +"``requires-python`` gives the versions of Python supported by your " +"project. Installers 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:222 +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/." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:229 +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:232 +msgid "" +"See the :ref:`project metadata specification ` 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:238 +msgid "Creating README.md" +msgstr "创建 README.md" + +#: ../../source/tutorials/packaging-projects.rst:240 +msgid "" +"Open :file:`README.md` and enter the following content. You can customize" +" this if you'd like." +msgstr "打开 :file:`README.md` 并输入以下内容。如果你愿意,你可以定制这个。" + +#: ../../source/tutorials/packaging-projects.rst:253 +msgid "Creating a LICENSE" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:255 +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:284 +msgid "" +"Most build backends automatically include license files in packages. See " +"your backend's documentation for more details." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:289 +msgid "Including other files" +msgstr "包括其他文件" + +#: ../../source/tutorials/packaging-projects.rst:291 +#, fuzzy +msgid "" +"The files listed above will be included automatically in your " +":term:`source distribution `. If you " +"want to include additional files, see the documentation for your build " +"backend." +msgstr "" +"上面列出的文件将被自动包含在你的 :term:`source distribution ` 中。如果你想明确地控制其中的内容,请参阅 :ref:`Using MANIFEST.in`。" + +#: ../../source/tutorials/packaging-projects.rst:298 +msgid "Generating distribution archives" +msgstr "生成分发档案" + +#: ../../source/tutorials/packaging-projects.rst:300 +msgid "" +"The next step is to generate :term:`distribution packages ` for the package. These are archives that are uploaded to the " +"Python Package Index and can be installed by :ref:`pip`." +msgstr "" +"下一步是为该软件包生成 :term:`distribution packages `。这些是上传到 " +"Python 包索引的档案,可以通过 :ref:`pip` 来安装。" + +#: ../../source/tutorials/packaging-projects.rst:304 +msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" +msgstr "确保您安装了最新版本的 PyPA 的 :ref:`build`:" + +#: ../../source/tutorials/packaging-projects.rst:318 +msgid "" +"If you have trouble installing these, see the :doc:`installing-packages` " +"tutorial." +msgstr "如果您在安装这些东西时遇到困难,请查看 :doc:`installing-packages` 教程。" + +#: ../../source/tutorials/packaging-projects.rst:321 +msgid "" +"Now run this command from the same directory where :file:`pyproject.toml`" +" is located:" +msgstr "现在从 :file:`pyproject.toml` 所在的同一目录运行此命令:" + +#: ../../source/tutorials/packaging-projects.rst:335 +msgid "" +"This command should output a lot of text and once completed should " +"generate two files in the :file:`dist` directory:" +msgstr "这个命令应该输出大量的文本,一旦完成应该在 :file:`dist` 目录下产生两个文件:" + +#: ../../source/tutorials/packaging-projects.rst:345 +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:354 +msgid "Uploading the distribution archives" +msgstr "上传分发档案" + +#: ../../source/tutorials/packaging-projects.rst:356 +msgid "Finally, it's time to upload your package to the Python Package Index!" +msgstr "最后,是时候把您的软件包上传到 Python Package Index 了!" + +#: ../../source/tutorials/packaging-projects.rst:358 +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:366 +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:373 +msgid "" +"Now that you are registered, you can use :ref:`twine` to upload the " +"distribution packages. You'll need to install Twine:" +msgstr "现在您已经注册了,您可以使用 :ref:`twine` 来上传发行包。您需要安装 Twine:" + +#: ../../source/tutorials/packaging-projects.rst:388 +msgid "" +"Once installed, run Twine to upload all of the archives under " +":file:`dist`:" +msgstr "安装完毕后,运行 Twine 以上传 :file:`dist` 下的所有档案:" + +#: ../../source/tutorials/packaging-projects.rst:402 +msgid "" +"You will be prompted for a username and password. For the username, use " +"``__token__``. For the password, use the token value, including the " +"``pypi-`` prefix." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:406 +msgid "After the command completes, you should see output similar to this:" +msgstr "命令完成后,您应该会看到类似这样的输出:" + +#: ../../source/tutorials/packaging-projects.rst:417 +#, fuzzy +msgid "" +"Once uploaded, your package should be viewable on TestPyPI; for example: " +"``https://test.pypi.org/project/example_package_YOUR_USERNAME_HERE``." +msgstr "" +"一旦上传,您的软件包应该可以在 TestPyPI 上查看,例如,https://test.pypi.org/project/example-" +"pkg-YOUR-USERNAME-HERE" + +#: ../../source/tutorials/packaging-projects.rst:422 +msgid "Installing your newly uploaded package" +msgstr "安装您新上传的软件包" + +#: ../../source/tutorials/packaging-projects.rst:424 +msgid "" +"You can use :ref:`pip` to install your package and verify that it works. " +"Create a :ref:`virtual environment ` and install your package from TestPyPI:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:440 +msgid "Make sure to specify your username in the package name!" +msgstr "请确保在软件包名称中指定您的用户名!" + +#: ../../source/tutorials/packaging-projects.rst:442 +msgid "" +"pip should install the package from TestPyPI and the output should look " +"something like this:" +msgstr "pip应该会安装 TestPyPI 的软件包,输出结果应该是这样的:" + +#: ../../source/tutorials/packaging-projects.rst:452 +msgid "" +"This example uses ``--index-url`` flag to specify TestPyPI instead of " +"live PyPI. Additionally, it specifies ``--no-deps``. Since TestPyPI " +"doesn't have the same packages as the live PyPI, it's possible that " +"attempting to install dependencies may fail or install something " +"unexpected. While our example package doesn't have any dependencies, it's" +" a good practice to avoid installing dependencies when using TestPyPI." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:459 +msgid "" +"You can test that it was installed correctly by importing the package. " +"Make sure you're still in your virtual environment, then run Python:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:474 +msgid "and import the package:" +msgstr "并导入该软件包:" + +#: ../../source/tutorials/packaging-projects.rst:486 +msgid "" +"**Congratulations, you've packaged and distributed a Python project!** ✨ " +"🍰 ✨" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:489 +msgid "" +"Keep in mind that this tutorial showed you how to upload your package to " +"Test PyPI, which isn't a permanent storage. The Test system occasionally " +"deletes packages and accounts. It is best to use TestPyPI for testing and" +" experiments like this tutorial." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:494 +msgid "" +"When you are ready to upload a real package to the Python Package Index " +"you can do much the same as you did in this tutorial, but with these " +"important differences:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:498 +msgid "" +"Choose a memorable and unique name for your package. You don't have to " +"append your username as you did in the tutorial, but you can't use an " +"existing name." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:500 +msgid "" +"Register an account on https://pypi.org - note that these are two " +"separate servers and the login details from the test server are not " +"shared with the main server." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:503 +msgid "" +"Use ``twine upload dist/*`` to upload your package and enter your " +"credentials for the account you registered on the real PyPI. Now that " +"you're uploading the package in production, you don't need to specify " +"``--repository``; the package will upload to https://pypi.org/ by " +"default." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:507 +msgid "" +"Install your package from the real PyPI using ``python3 -m pip install " +"[your-package]``." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:509 +msgid "" +"At this point if you want to read more on packaging Python libraries here" +" are some things you can do:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:515 +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:518 +#, fuzzy +msgid "" +"Read :pep:`517` and :pep:`518` for background and details on build tool " +"configuration." +msgstr "请参阅 :pep:`517` 和 :pep:`518` 了解背景和细节。" + +#: ../../source/tutorials/packaging-projects.rst:519 +msgid "Read about :doc:`/guides/packaging-binary-extensions`." +msgstr "" diff --git a/locales/zh_CN/LC_MESSAGES/messages.pot b/locales/zh_CN/LC_MESSAGES/messages.pot new file mode 100644 index 000000000..9464d692c --- /dev/null +++ b/locales/zh_CN/LC_MESSAGES/messages.pot @@ -0,0 +1,14001 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2013–2020, PyPA +# This file is distributed under the same license as the Python Packaging +# User Guide package. +# FIRST AUTHOR , 2021. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python Packaging User Guide \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-17 20:14+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.1\n" + +#: ../../source/contribute.rst:5 +msgid "Contribute to this guide" +msgstr "为本指南做贡献" + +#: ../../source/contribute.rst:7 +msgid "" +"The |PyPUG| welcomes contributors! There are lots of ways to help out, " +"including:" +msgstr "" +"|PyPUG| 欢迎贡献者! 有很多方法可以帮助我们,包括:" + +#: ../../source/contribute.rst:10 +msgid "Reading the guide and giving feedback" +msgstr "阅读指南并提供反馈" + +#: ../../source/contribute.rst:11 +msgid "Reviewing new contributions" +msgstr "审查新贡献" + +#: ../../source/contribute.rst:12 +msgid "Revising existing content" +msgstr "" + +#: ../../source/contribute.rst:13 +msgid "Writing new content" +msgstr "" + +#: ../../source/contribute.rst:14 +msgid "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. When proposing new additions to the project please pick the " +"appropriate documentation type." +msgstr "" + +#: ../../source/contribute.rst:39 ../../source/tutorials/index.rst:2 +msgid "Tutorials" +msgstr "" + +#: ../../source/contribute.rst:41 +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:48 ../../source/guides/index.rst:2 +msgid "Guides" +msgstr "" + +#: ../../source/contribute.rst:50 +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:57 ../../source/discussions/index.rst:2 +msgid "Discussions" +msgstr "" + +#: ../../source/contribute.rst:59 +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:64 +msgid "Specifications" +msgstr "" + +#: ../../source/contribute.rst:66 +msgid "" +"Specifications are reference documention focused on comprehensively " +"documenting an agreed-upon interface for interoperability between " +"packaging tools. :doc:`example specification-style document " +"`." +msgstr "" + +#: ../../source/contribute.rst:72 +msgid "Translations" +msgstr "" + +#: ../../source/contribute.rst:74 +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:77 +msgid "" +"If you are experiencing issues while you are working on translations, " +"please open an issue on `Github`_." +msgstr "" + +#: ../../source/contribute.rst:82 +msgid "Any translations of this project should follow `reStructuredText syntax`_." +msgstr "" + +#: ../../source/contribute.rst:90 +msgid "Adding a language" +msgstr "" + +#: ../../source/contribute.rst:92 +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:97 +msgid "Following reStructuredText syntax" +msgstr "" + +#: ../../source/contribute.rst:99 +msgid "" +"If you are not familiar with reStructuredText (RST) syntax, please read " +"`this guide`_ before translating on Weblate." +msgstr "" + +#: ../../source/contribute.rst:102 +msgid "**Do not translate the text in reference directly**" +msgstr "" + +#: ../../source/contribute.rst:104 +msgid "" +"When translating the text in reference, please do not translate them " +"directly." +msgstr "" + +#: ../../source/contribute.rst +msgid "Wrong: Translate the following text directly:" +msgstr "" + +#: ../../source/contribute.rst +msgid "" +"Right: Translate the following text with your own language and add the " +"original reference:" +msgstr "" + +#: ../../source/contribute.rst:121 +msgid "Building the guide locally" +msgstr "" + +#: ../../source/contribute.rst:123 +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:127 +msgid ":doc:`Nox `. You can install or upgrade nox using ``pip``:" +msgstr "" + +#: ../../source/contribute.rst:134 +msgid "" +"Python 3.6. Our build scripts are designed to work with Python 3.6 only. " +"See the :doc:`Hitchhiker's Guide to Python installation instructions " +"` to install Python 3.6 on your " +"operating system." +msgstr "" + +#: ../../source/contribute.rst:138 +msgid "To build the guide, run the following bash command in the source folder:" +msgstr "" + +#: ../../source/contribute.rst:144 +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:149 +msgid "" +"You can build the guide and serve it via an HTTP server using the " +"following command:" +msgstr "" + +#: ../../source/contribute.rst:156 +msgid "The guide will be browsable via http://localhost:8000." +msgstr "" + +#: ../../source/contribute.rst:160 +msgid "Where the guide is deployed" +msgstr "" + +#: ../../source/contribute.rst:162 +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:168 +msgid "Style guide" +msgstr "" + +#: ../../source/contribute.rst:170 +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:177 +msgid "Purpose" +msgstr "" + +#: ../../source/contribute.rst:179 +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:184 +msgid "Scope" +msgstr "" + +#: ../../source/contribute.rst:186 +msgid "" +"The guide is meant to answer questions and solve problems with accurate " +"and focused recommendations." +msgstr "" + +#: ../../source/contribute.rst:189 +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:197 +msgid "Audience" +msgstr "" + +#: ../../source/contribute.rst:199 +msgid "The audience of this guide is anyone who uses Python with packages." +msgstr "" + +#: ../../source/contribute.rst:201 +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:205 +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:211 +msgid "Voice and tone" +msgstr "" + +#: ../../source/contribute.rst:213 +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:216 +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:221 +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:228 +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:235 +msgid "Conventions and mechanics" +msgstr "" + +#: ../../source/contribute.rst:243 +msgid "**Write to the reader**" +msgstr "" + +#: ../../source/contribute.rst:238 +msgid "" +"When giving recommendations or steps to take, address the reader as *you*" +" or use the imperative mood." +msgstr "" + +#: ../../source/contribute.rst +msgid "Wrong: To install it, the user runs…" +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: You can install it by running…" +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: To install it, run…" +msgstr "" + +#: ../../source/contribute.rst:249 +msgid "**State assumptions**" +msgstr "" + +#: ../../source/contribute.rst:246 +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:254 +msgid "**Cross-reference generously**" +msgstr "" + +#: ../../source/contribute.rst:252 +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:264 +msgid "**Respect naming practices**" +msgstr "" + +#: ../../source/contribute.rst:257 +msgid "" +"When naming tools, sites, people, and other proper nouns, use their " +"preferred capitalization." +msgstr "" + +#: ../../source/contribute.rst +msgid "Wrong: Pip uses…" +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: pip uses…" +msgstr "" + +#: ../../source/contribute.rst +msgid "Wrong: …hosted on github." +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: …hosted on GitHub." +msgstr "" + +#: ../../source/contribute.rst:273 +msgid "**Use a gender-neutral style**" +msgstr "" + +#: ../../source/contribute.rst:267 +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 +msgid "Wrong: A maintainer uploads the file. Then he…" +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: A maintainer uploads the file. Then they…" +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: A maintainer uploads the file. Then the maintainer…" +msgstr "" + +#: ../../source/contribute.rst:285 +msgid "**Headings**" +msgstr "" + +#: ../../source/contribute.rst:276 +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:281 +msgid "" +"In section headings, use sentence case. In other words, write headings as" +" you would write a typical sentence." +msgstr "" + +#: ../../source/contribute.rst +msgid "Wrong: Things You Should Know About Python" +msgstr "" + +#: ../../source/contribute.rst +msgid "Right: Things you should know about Python" +msgstr "" + +#: ../../source/contribute.rst:288 +msgid "**Numbers**" +msgstr "" + +#: ../../source/contribute.rst:288 +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 +#: ../../source/guides/index-mirrors-and-caches.rst +#: ../../source/guides/installing-using-linux-tools.rst +#: ../../source/guides/packaging-binary-extensions.rst +#: ../../source/guides/supporting-multiple-python-versions.rst +#: ../../source/guides/supporting-windows-using-appveyor.rst +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 +#: ../../source/guides/supporting-multiple-python-versions.rst:7 +#: ../../source/guides/supporting-windows-using-appveyor.rst:5 +msgid "Incomplete" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst +#: ../../source/guides/index-mirrors-and-caches.rst +#: ../../source/guides/installing-using-linux-tools.rst +#: ../../source/guides/packaging-binary-extensions.rst +#: ../../source/guides/supporting-multiple-python-versions.rst +#: ../../source/guides/supporting-windows-using-appveyor.rst +msgid "Last Reviewed" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:7 +msgid "2021-8-24" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:11 +#: ../../source/discussions/install-requires-vs-requirements.rst:9 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:12 +#: ../../source/guides/distributing-packages-using-setuptools.rst:22 +#: ../../source/guides/index-mirrors-and-caches.rst:12 +#: ../../source/guides/installing-scientific-packages.rst:9 +#: ../../source/guides/installing-using-linux-tools.rst:11 +#: ../../source/guides/packaging-binary-extensions.rst:17 +#: ../../source/guides/supporting-multiple-python-versions.rst:12 +#: ../../source/guides/supporting-windows-using-appveyor.rst:15 +#: ../../source/overview.rst:23 +#: ../../source/specifications/core-metadata.rst:38 +#: ../../source/specifications/direct-url.rst:14 +#: ../../source/tutorials/installing-packages.rst:23 +msgid "Contents" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:14 +msgid "Overview" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:18 +msgid "Supporting multiple hardware platforms" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:40 +msgid "OS packaging & installers" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:52 +#: ../../source/discussions/deploying-python-applications.rst:89 +msgid "Windows" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:61 +msgid "Pynsist" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:63 +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:70 +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:74 +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 `documentation `. The tool is " +"released under the MIT-licence." +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:80 +msgid "Application bundles" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:92 +msgid "py2exe" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:94 +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:106 +msgid "macOS" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:109 +msgid "py2app" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:111 +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:118 +msgid "Unix (including Linux and macOS)" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:121 +#: ../../source/key_projects.rst:484 +msgid "pex" +msgstr "" + +#: ../../source/discussions/deploying-python-applications.rst:123 +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:132 +msgid "Configuration management" +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:12 +msgid "install_requires" +msgstr "" + +#: ../../source/discussions/install-requires-vs-requirements.rst:14 +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:19 +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:29 +msgid "" +"Additionally, it's best practice to indicate any known lower or upper " +"bounds." +msgstr "" + +#: ../../source/discussions/install-requires-vs-requirements.rst:31 +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:41 +msgid "" +"It may also be known that project A follows semantic versioning, and that" +" v2 of 'A' will indicate a break in compatibility, so it makes sense to " +"not allow v2:" +msgstr "" + +#: ../../source/discussions/install-requires-vs-requirements.rst:51 +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:56 +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:64 +#: ../../source/tutorials/installing-packages.rst:468 +msgid "Requirements files" +msgstr "" + +#: ../../source/discussions/install-requires-vs-requirements.rst:66 +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:69 +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:73 +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:78 +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:84 +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:90 +msgid "" +"For more on \"Abstract\" vs \"Concrete\" requirements, see " +"https://caremad.io/posts/2013/07/setup-vs-requirement/." +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/wheel-vs-egg.rst:5 +msgid "Wheel vs Egg" +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:7 +msgid "" +":term:`Wheel` and :term:`Egg` are both packaging formats that aim to " +"support the use case of needing an install artifact that doesn't require " +"building or compilation, which can be costly in testing and production " +"workflows." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:11 +msgid "" +"The :term:`Egg` format was introduced by :ref:`setuptools` in 2004, " +"whereas the :term:`Wheel` format was introduced by :pep:`427` in 2012." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:14 +msgid "" +":term:`Wheel` is currently considered the standard for :term:`built " +"` and :term:`binary ` packaging " +"for Python." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:17 +msgid "" +"Here's a breakdown of the important differences between :term:`Wheel` and" +" :term:`Egg`." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:20 +msgid ":term:`Wheel` has an :pep:`official PEP <427>`. :term:`Egg` did not." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:22 +msgid "" +":term:`Wheel` is a :term:`distribution ` format, " +"i.e a packaging format. [1]_ :term:`Egg` was both a distribution format " +"and a runtime installation format (if left zipped), and was designed to " +"be importable." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:26 +msgid "" +":term:`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/wheel-vs-egg.rst:31 +msgid "" +":term:`Wheel` uses :pep:`PEP376-compliant <376>` ``.dist-info`` " +"directories. Egg used ``.egg-info``." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:34 +msgid "" +":term:`Wheel` has a :pep:`richer file naming convention <425>`. A single " +"wheel archive can indicate its compatibility with a number of Python " +"language versions and implementations, ABIs, and system architectures." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:38 +msgid "" +":term:`Wheel` is versioned. Every wheel file contains the version of the " +"wheel specification and the implementation that packaged it." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:41 +msgid "" +":term:`Wheel` is internally organized by `sysconfig path type " +"`_, " +"therefore making it easier to convert to other formats." +msgstr "" + +#: ../../source/discussions/wheel-vs-egg.rst:47 +msgid "" +"Circumstantially, in some cases, wheels can be used as an importable " +"runtime format, although :pep:`this is not officially supported at this " +"time <427#is-it-possible-to-import-python-code-directly-from-a-wheel-" +"file>`." +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 "Built Distribution" +msgstr "" + +#: ../../source/glossary.rst:17 +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 " +"distutil's :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)." +msgstr "" + +#: ../../source/glossary.rst:26 +msgid "Distribution Package" +msgstr "" + +#: ../../source/glossary.rst:29 +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:34 +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\"." +msgstr "" + +#: ../../source/glossary.rst:41 +msgid "Egg" +msgstr "" + +#: ../../source/glossary.rst:44 +msgid "" +"A :term:`Built Distribution` format introduced by :ref:`setuptools`, " +"which is being replaced by :term:`Wheel`. For details, see ` :doc:`The " +"Internal Structure of Python Eggs ` " +"and `Python Eggs `_" +msgstr "" + +#: ../../source/glossary.rst:48 +msgid "Extension Module" +msgstr "" + +#: ../../source/glossary.rst:51 +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:58 +msgid "Known Good Set (KGS)" +msgstr "" + +#: ../../source/glossary.rst:61 +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:67 +msgid "Import Package" +msgstr "" + +#: ../../source/glossary.rst:70 +msgid "" +"A Python module which can contain other modules or recursively, other " +"packages." +msgstr "" + +#: ../../source/glossary.rst:73 +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\"." +msgstr "" + +#: ../../source/glossary.rst:77 +msgid "Module" +msgstr "" + +#: ../../source/glossary.rst:80 +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:83 +msgid "Package Index" +msgstr "" + +#: ../../source/glossary.rst:86 +msgid "" +"A repository of distributions with a web interface to automate " +":term:`package ` discovery and consumption." +msgstr "" + +#: ../../source/glossary.rst:89 +msgid "Per Project Index" +msgstr "" + +#: ../../source/glossary.rst:92 +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:96 +msgid "Project" +msgstr "" + +#: ../../source/glossary.rst:99 +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:103 +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:109 +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:114 +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:120 +msgid "Pure Module" +msgstr "" + +#: ../../source/glossary.rst:123 +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:126 +msgid "Python Packaging Authority (PyPA)" +msgstr "" + +#: ../../source/glossary.rst:129 +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:138 +msgid "Python Package Index (PyPI)" +msgstr "" + +#: ../../source/glossary.rst:141 +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:144 +msgid "pypi.org" +msgstr "" + +#: ../../source/glossary.rst:147 +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:151 +msgid "pyproject.toml" +msgstr "" + +#: ../../source/glossary.rst:154 +msgid "" +"The tool-agnostic :term:`Project` specification file. Defined in " +":pep:`518`." +msgstr "" + +#: ../../source/glossary.rst:156 +msgid "Release" +msgstr "" + +#: ../../source/glossary.rst:159 +msgid "" +"A snapshot of a :term:`Project` at a particular point in time, denoted by" +" a version identifier." +msgstr "" + +#: ../../source/glossary.rst:162 +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:167 +msgid "Requirement" +msgstr "" + +#: ../../source/glossary.rst:170 +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:176 +msgid "Requirement Specifier" +msgstr "" + +#: ../../source/glossary.rst:179 +msgid "" +"A format used by :ref:`pip` to install packages from a :term:`Package " +"Index`. For an EBNF diagram of the format, see the " +"`pkg_resources.Requirement " +"`_ entry in the :ref:`setuptools` docs. 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:186 +msgid "Requirements File" +msgstr "" + +#: ../../source/glossary.rst:189 +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:193 +#: ../../source/guides/distributing-packages-using-setuptools.rst:56 +msgid "setup.py" +msgstr "" + +#: ../../source/glossary.rst:194 +#: ../../source/guides/distributing-packages-using-setuptools.rst:77 +msgid "setup.cfg" +msgstr "" + +#: ../../source/glossary.rst:197 +msgid "" +"The project specification files for :ref:`distutils` and " +":ref:`setuptools`. See also :term:`pyproject.toml`." +msgstr "" + +#: ../../source/glossary.rst:200 +msgid "Source Archive" +msgstr "" + +#: ../../source/glossary.rst:203 +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:207 +msgid "Source Distribution (or \"sdist\")" +msgstr "" + +#: ../../source/glossary.rst:210 +msgid "" +"A :term:`distribution ` format (usually generated " +"using ``python setup.py 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`." +msgstr "" + +#: ../../source/glossary.rst:215 +msgid "System Package" +msgstr "" + +#: ../../source/glossary.rst:218 +msgid "" +"A package provided in a format native to the operating system, e.g. an " +"rpm or dpkg file." +msgstr "" + +#: ../../source/glossary.rst:221 +msgid "Version Specifier" +msgstr "" + +#: ../../source/glossary.rst:224 +msgid "" +"The version component of a :term:`Requirement Specifier`. For example, " +"the \">=1.3\" portion of \"foo>=1.3\". :pep:`440` contains a :pep:`full " +"specification <440#version-specifiers>` of the specifiers that Python " +"packaging currently supports. Support for PEP440 was implemented in " +":ref:`setuptools` v8.0 and :ref:`pip` v6.0." +msgstr "" + +#: ../../source/glossary.rst:230 +msgid "Virtual Environment" +msgstr "" + +#: ../../source/glossary.rst:233 +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:237 +msgid "Wheel" +msgstr "" + +#: ../../source/glossary.rst:240 +msgid "" +"A :term:`Built Distribution` format introduced by :pep:`427`, which is " +"intended to replace the :term:`Egg` format. Wheel is currently supported" +" by :ref:`pip`." +msgstr "" + +#: ../../source/glossary.rst:243 +msgid "Working Set" +msgstr "" + +#: ../../source/glossary.rst:246 +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:3 +msgid "Analyzing PyPI package downloads" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:5 +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:15 +#: ../../source/guides/supporting-windows-using-appveyor.rst:18 +msgid "Background" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:17 +msgid "PyPI does not display download statistics for a number of reasons: [#]_" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:19 +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:24 +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:27 +msgid "``pip``'s download cache (lowers download counts)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:28 +msgid "Internal or unofficial mirrors (can both raise or lower download counts)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:29 +msgid "Packages not hosted on PyPI (for comparisons sake)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:30 +msgid "" +"Unofficial scripts or attempts at download count inflation (raises " +"download counts)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:32 +msgid "Known historical data quality issues (lowers download counts)" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:34 +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:38 +msgid "" +"In short, because it's 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:43 +msgid "Public dataset" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:45 +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:50 +msgid "Getting set up" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:52 +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 the up to " +"1TB of queries per month `using the BigQuery free tier without a credit " +"card `__" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:58 +msgid "Navigate to the `BigQuery web UI`_." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:59 +msgid "Create a new project." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:60 +msgid "" +"Enable the `BigQuery API " +"`__." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:63 +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:69 +msgid "Data schema" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:71 +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:78 +msgid "Column" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:78 +#: ../../source/guides/using-manifest-in.rst:67 +#: ../../source/specifications/core-metadata.rst:185 +msgid "Description" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:78 +#: ../../source/specifications/direct-url.rst:225 +msgid "Examples" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:80 +msgid "timestamp" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:80 +msgid "Date and time" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:80 +msgid "``2020-03-09 00:33:03 UTC``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:82 +msgid "file.project" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:82 +msgid "Project name" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:82 +msgid "``pipenv``, ``nose``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:84 +msgid "file.version" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:84 +msgid "Package version" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:84 +msgid "``0.1.6``, ``1.4.2``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:86 +msgid "details.installer.name" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:86 +msgid "Installer" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:86 +msgid "pip, :ref:`bandersnatch`" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:88 +msgid "details.python" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:88 +msgid "Python version" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:88 +msgid "``2.7.12``, ``3.6.4``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:93 +msgid "Useful queries" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:95 +msgid "" +"Run queries in the `BigQuery web UI`_ by clicking the \"Compose query\" " +"button." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:97 +msgid "" +"Note that the rows are stored in a partitioned, 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:102 +msgid "Counting package downloads" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:104 +msgid "" +"The following query counts the total number of downloads for the project " +"\"pytest\"." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:119 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:140 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:168 +#: ../../source/guides/analyzing-pypi-package-downloads.rst:205 +msgid "num_downloads" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:121 +msgid "26190085" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:124 +msgid "" +"To only count downloads from pip, filter on the " +"``details.installer.name`` column." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:142 +msgid "24334215" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:146 +msgid "Package downloads over time" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:148 +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:168 +msgid "month" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:170 +msgid "1956741" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:170 +msgid "2018-01-01" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:172 +msgid "2344692" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:172 +msgid "2017-12-01" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:174 +msgid "1730398" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:174 +msgid "2017-11-01" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:176 +msgid "2047310" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:176 +msgid "2017-10-01" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:178 +msgid "1744443" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:178 +msgid "2017-09-01" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:180 +msgid "1916952" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:180 +msgid "2017-08-01" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:184 +msgid "Python versions over time" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:186 +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:205 +msgid "python" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:207 +msgid "3.7" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:207 +msgid "18051328726" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:209 +msgid "3.6" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:209 +msgid "9635067203" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:211 +msgid "3.8" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:211 +msgid "7781904681" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:213 +msgid "2.7" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:213 +msgid "6381252241" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:215 +msgid "null" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:215 +msgid "2026630299" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:217 +msgid "3.5" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:217 +msgid "1894153540" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:221 +msgid "Caveats" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:223 +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:231 +msgid "Additional tools" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:233 +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:237 +msgid "``google-cloud-bigquery``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:239 +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:267 +msgid "``pypinfo``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:269 +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:273 +msgid "Install `pypinfo`_ using pip." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:279 +msgid "Usage:" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:295 +msgid "``pandas-gbq``" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:297 +msgid "" +"The `pandas-gbq`_ project allows for accessing query results via " +"`Pandas`_." +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:301 +#: ../../source/specifications/binary-distribution-format.rst:459 +msgid "References" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:303 +msgid "" +"`PyPI Download Counts deprecation email " +"`__" +msgstr "" + +#: ../../source/guides/analyzing-pypi-package-downloads.rst:304 +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 `simple API`_ for all packages that conform to your " +"naming convention." +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:59 +msgid "Using namespace packages" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:61 +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:89 +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:101 +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:115 +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:121 +msgid "Using package metadata" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:123 +msgid "" +":doc:`Setuptools ` provides :doc:`special support " +"` for plugins. By providing the " +"``entry_points`` argument to :func:`setup` in :file:`setup.py` plugins " +"can register themselves for discovery." +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:128 +msgid "" +"For example if you have a package named ``myapp-plugin-a`` and it " +"includes in its :file:`setup.py`:" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:139 +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:154 +msgid "" +"In this example, ``discovered_plugins`` would be a collection of type " +":class:`importlib.metadata.EntryPoint`:" +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:163 +msgid "" +"Now the module of your choice can be imported by executing " +"``discovered_plugins['a'].load()``." +msgstr "" + +#: ../../source/guides/creating-and-discovering-plugins.rst:166 +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:170 +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/distributing-packages-using-setuptools.rst:5 +msgid "Packaging and distributing projects" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:7 +msgid "" +"This section covers the basics of how to configure, package and " +"distribute your own Python projects. It assumes that you are already " +"familiar with the contents of the :doc:`/tutorials/installing-packages` " +"page." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:11 +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:15 +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:25 +msgid "Requirements for packaging and distributing" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:26 +msgid "" +"First, make sure you have already fulfilled the :ref:`requirements for " +"installing packages `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:29 +msgid "Install \"twine\" [1]_:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:43 +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:49 +msgid "Configuring your project" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:53 +msgid "Initial files" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:58 +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:63 +msgid ":file:`setup.py` serves two primary functions:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:65 +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:71 +msgid "" +"It's the command line interface for running various commands that relate " +"to packaging tasks. To get a listing of available commands, run ``python " +"setup.py --help-commands``." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:79 +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:86 +msgid "README.rst / README.md" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:88 +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:95 +msgid "" +"For an example, see `README.md " +"`_ from the " +"`PyPA sample project `_." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:99 +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:108 +msgid "MANIFEST.in" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:110 +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:115 +msgid "" +"For an example, see the `MANIFEST.in " +"`_ from the " +"`PyPA sample project `_." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:119 +msgid ":file:`MANIFEST.in` does not affect binary distributions such as wheels." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:122 +msgid "LICENSE.txt" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:124 +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:130 +msgid "" +"For an example, see the `LICENSE.txt " +"`_ from the " +"`PyPA sample project `_." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:135 +msgid "" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:137 +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:141 +msgid "" +"For an example, see the `sample " +"`_ package " +"that's included in the `PyPA sample project " +"`_." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:149 +msgid "setup() args" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:151 +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:155 +msgid "" +"The most relevant arguments are explained below. 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:164 +#: ../../source/specifications/declaring-project-metadata.rst:29 +#: ../../source/specifications/declaring-project-metadata.rst:41 +msgid "``name``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:170 +msgid "" +"This is the name of your project, determining how your project is listed " +"on :term:`PyPI `. Per :pep:`508`, valid " +"project names must:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:174 +msgid "" +"Consist only of ASCII letters, digits, underscores (``_``), hyphens " +"(``-``), and/or periods (``.``), and" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:176 +msgid "Start & end with an ASCII letter or digit." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:178 +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::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:190 +#: ../../source/specifications/declaring-project-metadata.rst:34 +#: ../../source/specifications/declaring-project-metadata.rst:54 +msgid "``version``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:196 +msgid "" +"This is the current version of your project, allowing your users to " +"determine whether or not they have the latest version, and to indicate " +"which specific versions they've tested their own software against." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:200 +msgid "" +"Versions are displayed on :term:`PyPI ` for " +"each release if you publish your project." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:203 +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:206 +msgid "" +"If the project code itself needs run-time access to the version, the " +"simplest way is to keep the version in both :file:`setup.py` and your " +"code. If you'd rather not duplicate the value, there are a few ways to " +"manage this. See the \":ref:`Single sourcing the version`\" Advanced " +"Topics section." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:214 +#: ../../source/specifications/declaring-project-metadata.rst:66 +msgid "``description``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:222 +msgid "Give a short and long description for your project." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:224 +msgid "" +"These values will be displayed on :term:`PyPI ` if you publish your project. On ``pypi.org``, the user interface" +" displays ``description`` in the grey banner and ``long_description`` in " +"the section named \"Project Description\"." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:229 +msgid "" +"``description`` is also displayed in lists of projects. For example, it's" +" visible in the search results pages such as " +"https://pypi.org/search/?q=jupyter, the front-page lists of trending " +"projects and new releases, and the list of projects you maintain within " +"your account profile (such as https://pypi.org/user/jaraco/)." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:235 +msgid "" +"A `content type `_ can be specified with the " +"``long_description_content_type`` argument, which can be one of " +"``text/plain``, ``text/x-rst``, or ``text/markdown``, corresponding to no" +" formatting, `reStructuredText (reST) " +"`_, and the Github-flavored Markdown dialect of " +"`Markdown `_ respectively." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:245 +msgid "``url``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:252 +msgid "Give a homepage URL for your project." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:256 +msgid "``author``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:263 +msgid "Provide details about the author." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:267 +#: ../../source/specifications/declaring-project-metadata.rst:125 +msgid "``license``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:273 +msgid "" +"The ``license`` argument doesn't have to indicate the license under which" +" your package is being released, although you may optionally do so if you" +" want. If you're using a standard, well-known license, then your main " +"indication can and should be via the ``classifiers`` argument. " +"Classifiers exist for all major open-source licenses." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:279 +msgid "" +"The ``license`` argument is more typically used to indicate differences " +"from well-known licenses, or to include your own, unique license. As a " +"general rule, it's 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/distributing-packages-using-setuptools.rst:287 +#: ../../source/specifications/declaring-project-metadata.rst:191 +msgid "``classifiers``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:316 +msgid "" +"Provide a list of classifiers that categorize your project. For a full " +"listing, see https://pypi.org/classifiers/." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:319 +msgid "" +"Although the list of classifiers is often used to declare what Python " +"versions a project supports, this information is only used for searching " +"& browsing projects on PyPI, not for installing projects. To actually " +"restrict what Python versions a project can be installed on, use the " +":ref:`python_requires` argument." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:327 +#: ../../source/specifications/declaring-project-metadata.rst:181 +msgid "``keywords``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:333 +msgid "List keywords that describe your project." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:337 +msgid "``project_urls``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:349 +msgid "" +"List additional relevant URLs about your project. This is the place to " +"link to bug trackers, source repositories, or where to support package " +"development. The string of the key is the exact text that will be " +"displayed on PyPI." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:355 +msgid "``packages``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:361 +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:370 +msgid "``py_modules``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:376 +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:382 +msgid "``install_requires``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:388 +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:392 +msgid "" +"For more on using \"install_requires\" see :ref:`install_requires vs " +"Requirements files`." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:398 +msgid "``python_requires``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:400 +msgid "" +"If your project only runs on certain Python versions, setting the " +"``python_requires`` argument to the appropriate :pep:`440` version " +"specifier string will prevent :ref:`pip` from installing the project on " +"other Python versions. For example, if your package is for Python 3+ " +"only, write::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:407 +msgid "" +"If your package is for Python 2.6, 2.7, and all versions of Python 3 " +"starting with 3.3, write::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:412 +msgid "And so on." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:416 +msgid "" +"Support for this feature is relatively recent. Your project's source " +"distributions and wheels (see :ref:`Packaging Your Project`) must be " +"built using at least version 24.2.0 of :ref:`setuptools` in order for the" +" ``python_requires`` argument to be recognized and the appropriate " +"metadata generated." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:422 +msgid "" +"In addition, only versions 9.0.0 and higher of :ref:`pip` recognize the " +"``python_requires`` metadata. Users with earlier versions of pip will be" +" able to download & install projects on any Python version regardless of " +"the projects' ``python_requires`` values." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:431 +msgid "``package_data``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:440 +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:445 +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:449 +msgid "" +"For more information, see :std:doc:`Including Data Files " +"` from the :std:doc:`setuptools docs " +"`." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:457 +msgid "``data_files``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:463 +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:469 +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:479 +msgid "" +"For more information see the distutils section on :ref:`Installing " +"Additional Files `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:484 +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:491 +msgid "``scripts``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:493 +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:500 +msgid "``entry_points``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:509 +msgid "" +"Use this keyword to specify any plugins that your project provides for " +"any named entry points that may be defined by your project or others that" +" you depend on." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:512 +msgid "" +"For more information, see the section on :ref:`Advertising Behavior " +"` from the " +":ref:`setuptools` docs." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:516 +msgid "The most commonly used entry point is \"console_scripts\" (see below)." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:521 +msgid "``console_scripts``" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:531 +msgid "" +"Use ``console_script`` :ref:`entry points ` to register your script interfaces. You can " +"then let the toolchain handle the work of turning these interfaces into " +"actual scripts [2]_. The scripts will be generated during the install of" +" your :term:`distribution `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:538 +msgid "" +"For more information, see `Automatic Script Creation " +"`_ from the :doc:`setuptools " +"docs `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:545 +msgid "Choosing a versioning scheme" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:548 +msgid "Standards compliance for interoperability" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:550 +msgid "" +"Different Python projects may use different versioning schemes based on " +"the needs of that particular project, but all of them are required to " +"comply with the flexible :pep:`public version scheme <440#public-version-" +"identifiers>` specified in :pep:`440` in order to be supported in tools " +"and libraries like ``pip`` and ``setuptools``." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:556 +msgid "Here are some examples of compliant version numbers::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:567 +msgid "" +"To further accommodate historical variations in approaches to version " +"numbering, :pep:`440` also defines a comprehensive technique for " +":pep:`version normalisation <440#normalization>` that maps variant " +"spellings of different version numbers to a standardised canonical form." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:573 +msgid "Scheme choices" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:576 +msgid "Semantic versioning (preferred)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:578 +msgid "" +"For new projects, the recommended versioning scheme is based on `Semantic" +" Versioning `_, but adopts a different approach to " +"handling pre-releases and build metadata." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:582 +msgid "" +"The essence of semantic versioning is a 3-part MAJOR.MINOR.MAINTENANCE " +"numbering scheme, where the project author increments:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:585 +msgid "MAJOR version when they make incompatible API changes," +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:586 +msgid "" +"MINOR version when they add functionality in a backwards-compatible " +"manner, and" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:587 +msgid "MAINTENANCE version when they make backwards-compatible bug fixes." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:589 +msgid "" +"Adopting this approach as a project author allows users to make use of " +":pep:`\"compatible release\" <440#compatible-release>` specifiers, where " +"``name ~= X.Y`` requires at least release X.Y, but also allows any later " +"release with a matching MAJOR version." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:594 +msgid "" +"Python projects adopting semantic versioning should abide by clauses 1-8 " +"of the `Semantic Versioning 2.0.0 specification `_." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:598 +msgid "Date based versioning" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:600 +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/guides/distributing-packages-using-setuptools.rst:604 +msgid "" +"A key advantage of date based versioning 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/guides/distributing-packages-using-setuptools.rst:607 +msgid "" +"Version numbers for date based projects typically take the form of " +"YEAR.MONTH (for example, ``12.04``, ``15.10``)." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:611 +msgid "Serial versioning" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:613 +msgid "" +"This is the simplest possible versioning scheme, and consists of a single" +" number which is incremented every release." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:616 +msgid "" +"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/guides/distributing-packages-using-setuptools.rst:621 +msgid "Hybrid schemes" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:623 +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/guides/distributing-packages-using-setuptools.rst:629 +msgid "Pre-release versioning" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:631 +msgid "" +"Regardless of the base versioning scheme, pre-releases for a given final " +"release may be published as:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:634 +msgid "zero or more dev releases (denoted with a \".devN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:635 +msgid "zero or more alpha releases (denoted with a \".aN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:636 +msgid "zero or more beta releases (denoted with a \".bN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:637 +msgid "zero or more release candidates (denoted with a \".rcN\" suffix)" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:639 +msgid "" +"``pip`` and other modern Python package installers ignore pre-releases by" +" default when deciding which versions of dependencies to install." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:644 +msgid "Local version identifiers" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:646 +msgid "" +"Public version identifiers are designed to support distribution via " +":term:`PyPI `. Python's software " +"distribution tools also support the notion of a :pep:`local version " +"identifier <440#local-version-identifiers>`, 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/guides/distributing-packages-using-setuptools.rst:653 +msgid "" +"A local version identifier takes the form ``+``. For example::" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:661 +msgid "Working in \"development mode\"" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:663 +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:669 +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:677 +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:684 +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:692 +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:696 +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:701 +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:705 +msgid "Lastly, if you don't want to install any dependencies at all, you can run:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:712 +msgid "" +"For more information, see the :doc:`Development Mode " +"` section of the :doc:`setuptools " +"docs `." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:719 +msgid "Packaging your project" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:721 +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:726 +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:743 +msgid "Source distributions" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:745 +msgid "" +"Minimally, you should create a :term:`Source Distribution `:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:761 +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:769 +msgid "Wheels" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:771 +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:776 +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:779 +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:782 +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:791 +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:798 +msgid "Pure Python Wheels" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:800 +msgid "" +"*Pure Python Wheels* contain no compiled extensions, and therefore only " +"require a single Python wheel." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:803 +#: ../../source/guides/distributing-packages-using-setuptools.rst:832 +msgid "To build the wheel:" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:817 +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:821 +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:827 +msgid "Platform Wheels" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:829 +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:847 +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:853 +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:861 +msgid "Uploading your Project to PyPI" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:863 +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:867 +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:872 +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:877 +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:883 +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:896 +msgid "Create an account" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:898 +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:902 +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:905 +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:909 +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:912 +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:921 +msgid "**Be aware that this stores your token in plaintext.**" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:923 +#: ../../source/guides/migrating-to-pypi-org.rst:70 +#: ../../source/guides/migrating-to-pypi-org.rst:109 +#: ../../source/guides/using-testpypi.rst:83 +msgid "" +"For more details, see the :ref:`specification ` for " +":file:`.pypirc`." +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:929 +msgid "Upload your distributions" +msgstr "" + +#: ../../source/guides/distributing-packages-using-setuptools.rst:931 +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:934 +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:938 +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:945 +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:952 +#: ../../source/tutorials/installing-packages.rst:671 +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/distributing-packages-using-setuptools.rst:958 +msgid "" +"Specifically, the \"console_script\" approach generates ``.exe`` files on" +" Windows, which are necessary because the OS special-cases ``.exe`` " +"files. Script-execution features like ``PATHEXT`` and the :pep:`Python " +"Launcher for Windows <397>` allow scripts to be used in many cases, but " +"not all." +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 "" +"Dropping support for older Python versions is supported by the standard " +":ref:`core-metadata` 1.2 specification via a \"Requires-Python\" " +"attribute." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:9 +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." +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:14 +msgid "" +"This guide is specifically for users of :ref:`setuptools`, other " +"packaging tools such as ``flit`` may offer similar functionality but " +"users will need to consult relevant documentation." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:17 +msgid "Requirements" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:19 +msgid "This workflow requires that:" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:21 +msgid "The publisher is using the latest version of :ref:`setuptools`," +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:22 +msgid "The latest version of :ref:`twine` is used to upload the package," +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:23 +msgid "" +"The user installing the package has at least Pip 9.0, or a client that " +"supports the Metadata 1.2 specification." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:26 +msgid "Dealing with the universal wheels" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:28 +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." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:36 +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:48 +msgid "" +"Since it is possible to override the :file:`setup.cfg` settings via CLI " +"flags, make sure that your scripts don't have ``--universal`` in your " +"package creation scripts." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:53 +msgid "Defining the Python version required" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:56 +msgid "1. Download the newest version of Setuptools" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:58 +msgid "" +"Ensure that before you generate source distributions or binary " +"distributions, you update Setuptools and install twine." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:60 +msgid "Steps:" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:74 +msgid "`setuptools` version should be above 24.0.0." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:77 +msgid "2. Specify the version ranges for supported Python distributions" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:79 +msgid "" +"You can specify version ranges and exclusion rules, such as at least " +"Python 3. Or, Python 2.7, 3.4 and beyond." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:81 +#: ../../source/specifications/core-metadata.rst:139 +#: ../../source/specifications/core-metadata.rst:460 +#: ../../source/specifications/core-metadata.rst:484 +#: ../../source/specifications/core-metadata.rst:524 +#: ../../source/specifications/core-metadata.rst:547 +#: ../../source/specifications/core-metadata.rst:580 +#: ../../source/specifications/core-metadata.rst:690 +#: ../../source/specifications/core-metadata.rst:719 +msgid "Examples::" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:86 +msgid "" +"The way to set those values is within the call to ``setup`` within your " +":file:`setup.py` script. This will insert the ``Requires-Python`` " +"metadata values based on the argument you provide in ``python_requires``." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:101 +msgid "3. Validating the Metadata before publishing" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:103 +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:105 +msgid "" +"This file is generated by 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." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:108 +msgid "You can see the contents of the generated file like this:" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:114 +msgid "Validate that the following is in place, before publishing the package:" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:116 +msgid "" +"If you have upgraded correctly, the Metadata-Version value should be 1.2 " +"or higher." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:117 +msgid "" +"The Requires-Python field is set and matches your specification in " +"setup.py." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:120 +msgid "4. Using Twine to publish" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:122 +msgid "" +"Twine has a number of advantages, apart from being faster it is now the " +"supported method for publishing packages." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:124 +msgid "Make sure you are using the newest version of Twine, at least 1.9." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:127 +msgid "Dropping a Python release" +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:129 +msgid "" +"Once you have published a package with the Requires-Python metadata, you " +"can then make a further update removing that Python runtime from support." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:131 +msgid "It must be done in this order for the automated fallback to work." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:133 +msgid "" +"For example, you published the Requires-Python: \">=2.7\" as version " +"1.0.0 of your package." +msgstr "" + +#: ../../source/guides/dropping-older-python-versions.rst:135 +msgid "" +"If you were then to update the version string to \">=3.5\", and publish a" +" new version 2.0.0 of your package, any users running Pip 9.0+ from " +"version 2.7 will have version 1.0.0 of the package installed, and any " +">=3.5 users will receive version 2.0.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 use 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 " +"normalized name (as defined by :pep:`503`) 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:51 +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:58 +msgid "" +"For complete documentation of the simple repository protocol, see " +":pep:`503`." +msgstr "" + +#: ../../source/guides/index.rst:8 +msgid "Installing Packages:" +msgstr "" + +#: ../../source/guides/index.rst:20 +msgid "Building and Publishing Projects:" +msgstr "" + +#: ../../source/guides/index.rst:38 +msgid "Miscellaneous:" +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 +#: ../../source/guides/supporting-multiple-python-versions.rst:8 +msgid "2014-12-24" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:14 +msgid "" +"Mirroring or caching of PyPI 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:17 +msgid "Three options are available in this area:" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:19 +msgid "pip provides local caching options," +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:20 +msgid "" +"devpi provides higher-level caching option, potentially shared amongst " +"many users or machines, and" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:22 +msgid "" +"bandersnatch provides a local complete mirror of all PyPI :term:`packages" +" `." +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:27 +msgid "Caching with pip" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:29 +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:32 +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:35 +msgid "" +"A variation on the above which pre-builds the installation files for the " +"requirements using :ref:`python -m pip wheel `:" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:45 +msgid "Caching with devpi" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:47 +msgid "" +"devpi is a caching proxy server which you run on your laptop, or some " +"other machine you know will always be available to you. See the `devpi " +"documentation for getting started`__." +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:55 +msgid "Complete mirror with bandersnatch" +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:57 +msgid "" +"bandersnatch will set up a complete local mirror of all PyPI " +":term:`packages ` (externally-hosted packages are " +"not mirrored). See the `bandersnatch documentation for getting that " +"going`__." +msgstr "" + +#: ../../source/guides/index-mirrors-and-caches.rst:63 +msgid "" +"A benefit of devpi is that it will create a mirror which includes " +":term:`packages ` that are external to PyPI, unlike" +" bandersnatch which will only cache :term:`packages ` hosted on PyPI." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:5 +msgid "Installing scientific packages" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:11 +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:16 +msgid "" +"In particular, `NumPy `__, which provides the basis " +"for most of the software in the :doc:`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." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:22 +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:29 +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:35 +msgid "Building from source" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:37 +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:45 +msgid "Linux distribution packages" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:47 +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:51 +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:57 +msgid "Windows installers" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:59 +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:64 +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:67 +msgid "" +"For projects which don't provide their own Windows installers (and even " +"some which do), Christoph Gohlke at the University of California provides" +" a `collection of Windows installers " +"`__. Many Python users on " +"Windows have reported a positive experience with these prebuilt versions." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:73 +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:79 +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:86 +msgid "macOS installers and package managers" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:88 +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:92 +msgid "" +"macOS users also have access to Linux distribution style package managers" +" such as ``MacPorts``. The SciPy site has more details on using MacPorts " +"to install the :ref:`scientific Python stack `" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:99 +msgid "SciPy distributions" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:101 +msgid "" +"The SciPy site lists :doc:`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:105 +msgid "" +"Some of these distributions may not be compatible with the standard " +"``pip`` and ``virtualenv`` based toolchain." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:109 +#: ../../source/key_projects.rst:613 +msgid "Spack" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:110 +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:119 +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:128 +msgid "The conda cross-platform package manager" +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:130 +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." +msgstr "" + +#: ../../source/guides/installing-scientific-packages.rst:136 +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)." +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:2 +msgid "Installing stand alone command line tools" +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:4 +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:10 +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:15 +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:21 +msgid "pipx only works with Python 3.6+." +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:23 +msgid "pipx is installed with pip:" +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:41 +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:44 +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:52 +msgid "For example:" +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:72 +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:93 +msgid "To upgrade or uninstall a package:" +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:100 +msgid "pipx can be upgraded or uninstalled with pip:" +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:116 +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:123 +msgid "To see the full list of commands pipx offers, run:" +msgstr "" + +#: ../../source/guides/installing-stand-alone-command-line-tools.rst:129 +msgid "You can learn more about pipx at https://pypa.github.io/pipx/." +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:13 +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:16 +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:20 +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:27 +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:34 +msgid "Fedora" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:40 +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:48 +msgid "CentOS/RHEL" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:50 +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:53 +msgid "To install pip and wheel for the system Python, there are two options:" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:55 +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:64 +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:68 +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:77 +msgid "To additionally upgrade setuptools, run:" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:84 +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:88 +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:91 +msgid "" +"For Redhat, see here: " +"https://developers.redhat.com/products/softwarecollections/overview" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:93 +msgid "For CentOS, see here: https://www.softwarecollections.org/en/" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:95 +msgid "Be aware that collections may not contain the most recent versions." +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:97 +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:103 +msgid "For example, for Python 3.4 on CentOS7/RHEL7:" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:111 +msgid "openSUSE" +msgstr "" + +#: ../../source/guides/installing-using-linux-tools.rst:118 +msgid "Debian/Ubuntu" +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 "Installing packages using pip and virtual environments" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:4 +msgid "" +"This guide discusses how to install packages using :ref:`pip` and a " +"virtual environment manager: either :ref:`venv` for Python 3 or " +":ref:`virtualenv` for Python 2. These are the lowest-level tools for " +"managing Python packages and are recommended if higher-level tools do not" +" suit your needs." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:9 +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/installing-using-pip-and-virtual-environments.rst:15 +msgid "Installing pip" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:17 +msgid "" +":ref:`pip` is the reference Python package manager. It's used to install " +"and update packages. You'll need to make sure you have the latest version" +" of pip installed." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:24 +msgid "" +"Debian and most other distributions include a `python-pip`_ package; if " +"you want to use the Linux distribution-provided versions of pip, see " +":doc:`/guides/installing-using-linux-tools`." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:28 +msgid "" +"You can also install pip yourself to ensure you have the latest version. " +"It's recommended to use the system pip to bootstrap a user installation " +"of pip:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:37 +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:48 +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:57 +msgid "Afterwards, you should have the latest version of pip:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:66 +msgid "Installing virtualenv" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:68 +msgid "" +"If you are using Python 3.3 or newer, the :mod:`venv` module is the " +"preferred way to create and manage virtual environments. venv is included" +" in the Python standard library and requires no additional installation. " +"If you are using venv, you may skip this section." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:74 +msgid "" +":ref:`virtualenv` is used to manage Python packages for different " +"projects. Using virtualenv allows you to avoid installing Python packages" +" globally which could break system tools or other projects. You can " +"install virtualenv using pip." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:95 +msgid "Creating a virtual environment" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:97 +msgid "" +":ref:`venv` (for Python 3) and :ref:`virtualenv` (for Python 2) allow you" +" to manage separate package installations for different projects. They " +"essentially allow you to create a \"virtual\" isolated Python " +"installation and install packages into that virtual installation. When " +"you switch projects, you can simply create a new virtual environment and " +"not have to worry about breaking the packages installed in the other " +"environments. It is always recommended to use a virtual environment while" +" developing Python applications." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:106 +msgid "" +"To create a virtual environment, go to your project's directory and run " +"venv. If you are using Python 2, replace ``venv`` with ``virtualenv`` in " +"the below commands." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:122 +msgid "" +"The second argument is the location to create the virtual environment. " +"Generally, you can just create this in your project and call it ``env``." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:125 +msgid "venv will create a virtual Python installation in the ``env`` folder." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:127 +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:132 +msgid "Activating a virtual environment" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:134 +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:151 +msgid "" +"You can confirm you're in the virtual environment by checking the " +"location of your Python interpreter:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:166 +msgid "It should be in the ``env`` directory:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:181 +msgid "" +"As long as your virtual environment is activated pip will install " +"packages into that specific environment and you'll be able to import and " +"use packages in your Python application." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:187 +msgid "Leaving the virtual environment" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:189 +msgid "" +"If you want to switch projects or otherwise leave your virtual " +"environment, simply run:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:195 +msgid "" +"If you want to re-enter the virtual environment just follow the same " +"instructions above about activating a virtual environment. There's no " +"need to re-create the virtual environment." +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:200 +msgid "Installing packages" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:202 +msgid "" +"Now that you're in your virtual environment you can install packages. " +"Let's install the `Requests`_ library from the :term:`Python Package " +"Index (PyPI)`:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:217 +msgid "pip should download requests and all of its dependencies and install them:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:238 +msgid "Installing specific versions" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:240 +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:256 +msgid "To install the latest ``2.x`` release of requests:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:270 +msgid "To install pre-release versions of packages, use the ``--pre`` flag:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:286 +msgid "Installing extras" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:288 +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:308 +msgid "Installing from source" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:310 +msgid "pip can install a package directly from source, for example:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:326 +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:345 +msgid "Installing from version control systems" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:347 +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:354 +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:359 +#: ../../source/tutorials/installing-packages.rst:577 +msgid "Installing from local archives" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:361 +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:376 +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:392 +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:398 +msgid "Using other package indexes" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:400 +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:415 +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:432 +#: ../../source/tutorials/installing-packages.rst:397 +msgid "Upgrading packages" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:434 +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:450 +msgid "Using requirements files" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:452 +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:461 +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:476 +msgid "Freezing dependencies" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:478 +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:493 +msgid "Which will output a list of package specifiers such as:" +msgstr "" + +#: ../../source/guides/installing-using-pip-and-virtual-environments.rst:509 +msgid "" +"This 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/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 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:4 +msgid "Migrating to PyPI.org" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:6 +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:12 +msgid "Publishing releases" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:14 +msgid "``pypi.org`` is the default upload platform as of September 2016." +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:16 +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:19 +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:22 +msgid "" +"The default upload settings switched to ``pypi.org`` in the following " +"versions:" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:24 +msgid "``twine`` 1.8.0" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:25 +msgid "``setuptools`` 27.0.0" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:26 +msgid "Python 2.7.13 (``distutils`` update)" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:27 +msgid "Python 3.4.6 (``distutils`` update)" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:28 +msgid "Python 3.5.3 (``distutils`` update)" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:29 +msgid "Python 3.6.0 (``distutils`` update)" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:31 +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:48 +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:51 +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:67 +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:73 +msgid "Registering package names & metadata" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:75 +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:79 +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:84 +msgid "" +"The solution is to skip the registration step, and proceed directly to " +"uploading artifacts." +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:89 +#: ../../source/guides/using-testpypi.rst:5 +msgid "Using TestPyPI" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:91 +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:113 +msgid "Registering new user accounts" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:115 +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:121 +msgid "Browsing packages" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:123 +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:130 +msgid "Downloading packages" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:132 +msgid "``pypi.org`` is the default host for downloading packages." +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:135 +msgid "Managing published packages and releases" +msgstr "" + +#: ../../source/guides/migrating-to-pypi-org.rst:137 +msgid "" +"``pypi.org`` provides a fully functional interface for logged in users to" +" manage their published packages and releases." +msgstr "" + +#: ../../source/guides/multi-version-installs.rst:5 +msgid "Multi-version installs" +msgstr "" + +#: ../../source/guides/multi-version-installs.rst:8 +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:13 +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:19 +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:31 +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 ``python -c ''`` to invoke the " +"application's main entry point directly." +msgstr "" + +#: ../../source/guides/multi-version-installs.rst:38 +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:20 +msgid "An overview of binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:23 +msgid "Use cases" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:25 +msgid "" +"The typical use cases for binary extensions break down into just three " +"conventional categories:" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:28 +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:39 +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:47 +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:56 +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:61 +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:71 +msgid "Disadvantages" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:73 +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:80 +msgid "This means that binary extensions:" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:82 +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:85 +msgid "" +"may not be compatible with different builds of the CPython reference " +"interpreter" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:88 +msgid "" +"often will not work correctly with alternative interpreters such as PyPy," +" IronPython or Jython" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:91 +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:96 +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:101 +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:108 +msgid "Alternatives to handcoded accelerator modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:110 +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:115 +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:122 +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:132 +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 has the " +"disadvantage of increasing the complexity of distributing the resulting " +"application, 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:141 +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:150 +msgid "Alternatives to handcoded wrapper modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:152 +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:158 +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:162 +msgid "" +"In addition to being useful for the creation of accelerator modules, " +"`Cython `__ is also useful for creating wrapper " +"modules for C or C++. It still involves wrapping the interfaces by hand, " +"however, and is very repetitive, so may not be a good choice for wrapping" +" large APIs." +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:168 +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:175 +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:181 +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:185 +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:189 +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:203 +msgid "Alternatives for low level system access" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:205 +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:213 +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:222 +msgid "Implementing binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:224 +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:241 +msgid "Building binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:244 +msgid "Building extensions for multiple platforms" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:246 +msgid "" +"If you plan to distribute your extension, you should provide " +":term:`wheels ` for all the platforms you intend to support. For " +"most extensions, this is at least one package per Python version times " +"the number of OS and architectures you 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:256 +msgid "Binary extensions for Windows" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:258 +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:265 +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:273 +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:284 +msgid "Binary extensions for Linux" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:286 +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:292 +msgid "Binary extensions for macOS" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:294 +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:304 +msgid "Publishing binary extensions" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:306 +msgid "" +"For interim guidance on this topic, see the discussion in :issue:`this " +"issue <284>`." +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:322 +msgid "Additional resources" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:324 +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:331 +msgid "Cross-platform wheel generation with scikit-build" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:333 +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:341 +msgid "Introduction to C/C++ extension modules" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:343 +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:346 +msgid "" +"`What are (c)python extension modules? " +"`_" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:347 +msgid "`Releasing the gil `_" +msgstr "" + +#: ../../source/guides/packaging-binary-extensions.rst:348 +msgid "" +"`Writing cpython extension modules using C++ " +"`_" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:3 +msgid "Packaging namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:5 +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:24 +msgid "And you use this package in your code like so::" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:29 +msgid "Then you can break these sub-packages into two separate distributions:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:46 +msgid "Each sub-package can now be separately installed, used, and versioned." +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:48 +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:58 +msgid "Creating a namespace package" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:60 +msgid "" +"There are currently three different approaches to creating namespace " +"packages:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:62 +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:66 +msgid "" +"Use `pkgutil-style namespace packages`_. This is recommended for new " +"packages that need to support Python 2 and 3 and installation via both " +"``pip`` and ``python setup.py install``." +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:69 +msgid "" +"Use `pkg_resources-style namespace packages`_. This method is recommended" +" if you need compatibility with packages already using this method or if " +"your package needs to be zip-safe." +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:73 +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:80 +msgid "Native namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:82 +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:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:97 +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:102 +msgid "" +"Because ``mynamespace`` doesn't contain an :file:`__init__.py`, " +":func:`setuptools.find_packages` won't find the sub-package. You must use" +" :func:`setuptools.find_namespace_packages` instead or explicitly list " +"all packages in your :file:`setup.py`. For example:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:117 +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:123 +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:129 +msgid "pkgutil-style namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:131 +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:136 +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:148 +#: ../../source/guides/packaging-namespace-packages.rst:193 +msgid "" +"The :file:`__init__.py` file for the namespace package needs to contain " +"**only** the following:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:155 +#: ../../source/guides/packaging-namespace-packages.rst:200 +msgid "" +"**Every** distribution that uses the namespace package must include an " +"identical :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:160 +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:170 +msgid "pkg_resources-style namespace packages" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:172 +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:181 +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:205 +msgid "" +"Some older recommendations advise the following in the namespace package " +":file:`__init__.py`:" +msgstr "" + +#: ../../source/guides/packaging-namespace-packages.rst:215 +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:222 +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:236 +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:3 +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:5 +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`_." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:15 +msgid "" +"This guide *assumes* that you already have a project that you know how to" +" build distributions for and *it lives on GitHub*." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:19 +msgid "Saving credentials on GitHub" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:21 +msgid "" +"In this guide, we'll demonstrate uploading to both PyPI and TestPyPI, " +"meaning that we'll have two separate sets of credentials. And we'll need " +"to save them in the GitHub repository settings." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:26 +msgid "Let's begin! 🚀" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:28 +msgid "" +"Go to https://pypi.org/manage/account/#api-tokens and create a new `API " +"token`_. If you have the project on PyPI already, limit the token scope " +"to just that project. You can call it something like ``GitHub Actions " +"CI/CD — project-org/project-repo`` in order for it to be easily " +"distinguishable in the token list. **Don't close the page just yet — you " +"won't see that token again.**" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:37 +msgid "" +"In a separate browser tab or window, go to the ``Settings`` tab of your " +"target repository and then click on `Secrets`_ in the left sidebar." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:40 +msgid "" +"Create a new secret called ``PYPI_API_TOKEN`` and copy-paste the token " +"from the first step." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:42 +msgid "" +"Now, go to https://test.pypi.org/manage/account/#api-tokens and repeat " +"the steps. Save that TestPyPI token on GitHub as ``TEST_PYPI_API_TOKEN``." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:48 +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:53 +msgid "Creating a workflow definition" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:55 +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:58 +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:61 +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:70 +msgid "Defining a workflow job environment" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:72 +msgid "" +"Now, let's add initial setup for our job. It's a process that will " +"execute commands that we'll define later. In this guide, we'll use Ubuntu" +" 18.04:" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:83 +msgid "Checking out the project and building distributions" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:85 +msgid "Then, add the following under the ``build-n-publish`` section:" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:92 +msgid "" +"This will download your repository into the CI runner and then install " +"and activate Python 3.9." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:95 +msgid "" +"And now we can build dists from source. In this example, we'll use " +"``build`` package, assuming that your project has a ``pyproject.toml`` " +"properly set up (see :pep:`517`/:pep:`518`)." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:102 +msgid "" +"You can use any other method for building distributions as long as it " +"produces ready-to-upload artifacts saved into the ``dist/`` folder." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:106 +msgid "So add this to the steps list:" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:115 +msgid "Publishing the distribution to PyPI and TestPyPI" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:117 +msgid "Finally, add the following steps at the end:" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:123 +msgid "" +"These two steps use the `pypa/gh-action-pypi-publish`_ GitHub Action: the" +" first one uploads contents of the ``dist/`` folder into TestPyPI " +"unconditionally and the second does that to PyPI, but only if the current" +" commit is tagged." +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:130 +msgid "That's all, folks!" +msgstr "" + +#: ../../source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst:132 +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/single-sourcing-package-version.rst:5 +msgid "Single-sourcing the package version" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:8 +msgid "" +"There are many techniques to maintain a single source of truth for the " +"version number of your project:" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:11 +msgid "" +"Read the file in :file:`setup.py` and get the version. Example (from `pip" +" setup.py `_)::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:38 +msgid "" +"As of the release of setuptools 46.4.0, one can accomplish the same thing" +" by instead placing the following in the project's ``setup.cfg`` file " +"(replacing \"package\" with the import name of the package):" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:47 +msgid "" +"Earlier versions of setuptools implemented the ``attr:`` directive by " +"importing the module, but setuptools 46.4.0 added rudimentary AST " +"analysis so that ``attr:`` can function without having to import any of " +"the package's dependencies." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:52 +msgid "" +"Also, please be aware that declarative config indicators, including the " +"``attr:`` directive, are not supported in parameters to ``setup.py``." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:55 +msgid "" +"Use an external build tool that either manages updating both locations, " +"or offers an API that both locations can use." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:58 +msgid "" +"Few tools you could use, in no particular order, and not necessarily " +"complete: `bump2version `_, " +"`changes `_, `commitizen " +"`_, `zest.releaser " +"`_." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:65 +msgid "" +"Set the value to a ``__version__`` global variable in a dedicated module " +"in your project (e.g. :file:`version.py`), then have :file:`setup.py` " +"read and ``exec`` the value into a variable." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:76 +msgid "" +"Example using this technique: `warehouse " +"`_." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:78 +msgid "" +"Place the value in a simple ``VERSION`` text file and have both " +":file:`setup.py` and the project code read it." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:86 +msgid "" +"An advantage with this technique is that it's not specific to Python. " +"Any tool can read the version." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:91 +msgid "" +"With this approach you must make sure that the ``VERSION`` file is " +"included in all your source and binary distributions (e.g. add ``include " +"VERSION`` to your :file:`MANIFEST.in`)." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:95 +msgid "" +"Set the value in :file:`setup.py`, and have the project code use the " +"``importlib.metadata`` API to fetch the value at runtime. " +"(``importlib.metadata`` was introduced in Python 3.8 and is available to " +"older versions as the ``importlib-metadata`` project.) An installed " +"project's version can be fetched with the API as follows::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:110 +msgid "" +"Be aware that the ``importlib.metadata`` API only knows about what's in " +"the installation metadata, which is not necessarily the code that's " +"currently imported." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:114 +msgid "" +"If a project uses this method to fetch its version at runtime, then its " +"``install_requires`` value needs to be edited to install ``importlib-" +"metadata`` on pre-3.8 versions of Python like so::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:128 +msgid "" +"An older (and less efficient) alternative to ``importlib.metadata`` is " +"the ``pkg_resources`` API provided by ``setuptools``::" +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:134 +msgid "" +"If a project uses ``pkg_resources`` to fetch its own version at runtime, " +"then ``setuptools`` must be added to the project's ``install_requires`` " +"list." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:138 +msgid "" +"Example using this technique: `setuptools " +"`_." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:141 +msgid "" +"Set the value to ``__version__`` in ``sample/__init__.py`` and import " +"``sample`` in :file:`setup.py`." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:155 +msgid "" +"Although this technique is common, beware that it will fail if " +"``sample/__init__.py`` imports packages from ``install_requires`` " +"dependencies, which will very likely not be installed yet when " +":file:`setup.py` is run." +msgstr "" + +#: ../../source/guides/single-sourcing-package-version.rst:161 +msgid "" +"Keep the version number in the tags of a version control system (Git, " +"Mercurial, etc) instead of in the code, and automatically extract it from" +" there using `setuptools_scm `_." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:5 +msgid "Supporting multiple Python versions" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:37 +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:43 +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:49 +msgid "Automated testing and continuous integration" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:51 +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:56 +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:60 +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:66 +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:69 +msgid "" +"`Appveyor `_ provides a Windows environment " +"(Windows Server 2012)." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:80 +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:85 +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:89 +msgid "Tools for single-source Python packages" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:91 +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:100 +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:107 +msgid "a Python 2 (by syntax) module in a Python 3 project." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:108 +msgid "a Python 3 (by syntax) module in a *Python 2* project." +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:110 +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:117 +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:124 +msgid "What's in which Python?" +msgstr "" + +#: ../../source/guides/supporting-multiple-python-versions.rst:126 +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:3 +msgid "Supporting Windows using Appveyor" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:6 +msgid "2015-12-03" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:8 +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:20 +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:24 +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:30 +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:38 +msgid "Setting up" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:40 +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:45 +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:49 +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:54 +msgid "Adding Appveyor support to your project" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:56 +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:61 +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:69 +msgid "appveyor.yml" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:75 +msgid "" +"This file can be downloaded from `here " +"`__." +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:77 +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:80 +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:88 +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:94 +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:97 +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:100 +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:109 +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:114 +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:119 +msgid "Support script" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:121 +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:126 +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:133 +msgid "" +"You can simply download the batch file and include it in your project " +"unchanged." +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:137 +msgid "Access to the built wheels" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:139 +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:147 +msgid "Additional notes" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:150 +msgid "Testing with tox" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:152 +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:156 +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:160 +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:165 +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:170 +msgid "``DISTUTILS_USE_SDK``" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:171 +msgid "``MSSdk``" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:172 +msgid "``INCLUDE``" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:173 +msgid "``LIB``" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:175 +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:181 +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:188 +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:192 +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:197 +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:203 +msgid "Automatically uploading wheels" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:205 +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:210 +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:216 +msgid "External dependencies" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:218 +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:221 +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:230 +msgid "Support scripts" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:232 +msgid "For reference, the SDK setup support script is listed here:" +msgstr "" + +#: ../../source/guides/supporting-windows-using-appveyor.rst:234 +msgid "``appveyor-sample/build.cmd``" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:5 +msgid "Tool recommendations" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:7 +msgid "" +"If you're familiar with Python packaging and installation, and just want " +"to know what tools are currently recommended, then here it is." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:12 +msgid "Application dependency management" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:14 +msgid "" +"Use :ref:`pipenv` to manage library dependencies when developing Python " +"applications. See :doc:`../tutorials/managing-dependencies` for more " +"details on using ``pipenv``." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:18 +msgid "When ``pipenv`` does not meet your use case, consider other tools like:" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:20 +msgid ":ref:`pip`" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:22 +msgid "`pip-tools `_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:24 +msgid "`Poetry `_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:27 +msgid "Installation tool recommendations" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:29 +msgid "" +"Use :ref:`pip` to install Python :term:`packages ` " +"from :term:`PyPI `. [1]_ [2]_ Depending on " +"how :ref:`pip` is installed, you may need to also install :ref:`wheel` to" +" get the benefit of wheel caching. [3]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:34 +msgid "" +"Use :ref:`virtualenv`, or :doc:`venv ` to isolate " +"application specific dependencies from a shared Python installation. [4]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:37 +msgid "" +"If you're looking for management of fully integrated cross-platform " +"software stacks, consider:" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:40 +msgid ":ref:`buildout`: primarily focused on the web development community" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:42 +msgid "" +":ref:`spack`, :ref:`hashdist`, or :ref:`conda`: primarily focused on the " +"scientific community." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:47 +msgid "Packaging tool recommendations" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:49 +msgid "Use :ref:`setuptools` to define projects. [5]_ [6]_" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:51 +msgid "" +"Use :ref:`build` to create :term:`Source Distributions ` and :term:`wheels `." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:54 +msgid "" +"If you have binary extensions 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:58 +msgid "" +"Use `twine `_ for uploading distributions" +" to :term:`PyPI `." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:63 +msgid "Publishing platform migration" +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:65 +msgid "" +"The original Python Package Index implementation (previously hosted at " +"`pypi.python.org `_) has been phased out in " +"favour of an updated implementation hosted at `pypi.org " +"`_." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:69 +msgid "" +"See :ref:`Migrating to PyPI.org` for more information on the status of " +"the migration, and what settings to change in your clients." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:74 +msgid "" +"There are some cases where you might choose to use ``easy_install`` (from" +" :ref:`setuptools`), e.g. if you need to install from :term:`Eggs ` " +"(which pip doesn't support). For a detailed breakdown, see :ref:`pip vs " +"easy_install`." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:79 +msgid "" +"The acceptance of :pep:`453` means that :ref:`pip` will be available by " +"default in most installations of Python 3.4 or later. See the " +":pep:`rationale section <453#rationale>` from :pep:`453` as for why pip " +"was chosen." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:84 +msgid "" +"`get-pip.py `_ and " +":ref:`virtualenv` install :ref:`wheel`, whereas :ref:`ensurepip` and " +":ref:`venv ` do not currently. Also, the common \"python-pip\" " +"package that's found in various linux distros, does not depend on " +"\"python-wheel\" currently." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:90 +msgid "" +"Beginning with Python 3.4, ``venv`` will create virtualenv environments " +"with ``pip`` installed, thereby making it an equal alternative to " +":ref:`virtualenv`. However, using :ref:`virtualenv` will still be " +"recommended for users that need cross-version consistency." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:95 +msgid "" +"Although you can use pure ``distutils`` for many projects, it does not " +"support defining dependencies on other projects and is missing several " +"convenience utilities for automatically populating distribution metadata " +"correctly that are provided by ``setuptools``. Being outside the standard" +" library, ``setuptools`` also offers a more consistent feature set across" +" different versions of Python, and (unlike ``distutils``), recent " +"versions of ``setuptools`` support all of the modern metadata fields " +"described in :ref:`core-metadata`." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:104 +msgid "" +"Even for projects that do choose to use ``distutils``, when :ref:`pip` " +"installs such projects directly from source (rather than installing from " +"a prebuilt :term:`wheel ` file), it will actually build your " +"project using :ref:`setuptools` instead." +msgstr "" + +#: ../../source/guides/tool-recommendations.rst:109 +msgid "" +"`distribute`_ (a fork of setuptools) was merged back into " +":ref:`setuptools` in June 2013, thereby making setuptools the default " +"choice for packaging." +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 "" +"When building a :term:`source distribution ` for your package, by default only a minimal set of files are" +" included. You may find yourself wanting to include extra files in the " +"source distribution, such as an authors/contributors file, a " +":file:`docs/` directory, or a directory of data files used for testing " +"purposes. There may even be extra files that you *need* to include; for " +"example, if your :file:`setup.py` computes your project's " +"``long_description`` by reading from both a README and a changelog file, " +"you'll need to include both those files in the sdist so that people that " +"build or install from the sdist get the correct results." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:17 +msgid "" +"Adding & removing files to & from the source distribution is done by " +"writing a :file:`MANIFEST.in` file at the project root." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:22 +msgid "How files are included in an sdist" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:24 +msgid "The following files are included in a source distribution by default:" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:26 +msgid "" +"all Python source files implied by the ``py_modules`` and ``packages`` " +"``setup()`` arguments" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:28 +msgid "" +"all C source files mentioned in the ``ext_modules`` or ``libraries`` " +"``setup()`` arguments" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:30 +msgid "scripts specified by the ``scripts`` ``setup()`` argument" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:31 +msgid "" +"all files specified by the ``package_data`` and ``data_files`` " +"``setup()`` arguments" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:33 +msgid "" +"the file specified by the ``license_file`` option in :file:`setup.cfg` " +"(setuptools 40.8.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:35 +msgid "" +"all files specified by the ``license_files`` option in :file:`setup.cfg` " +"(setuptools 42.0.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:37 +msgid "all files matching the pattern :file:`test/test*.py`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:38 +msgid ":file:`setup.py` (or whatever you called your setup script)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:39 +msgid ":file:`setup.cfg`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:40 +msgid ":file:`README`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:41 +msgid ":file:`README.txt`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:42 +msgid ":file:`README.rst` (Python 3.7+ or setuptools 0.6.27+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:43 +msgid ":file:`README.md` (setuptools 36.4.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:44 +msgid ":file:`pyproject.toml` (setuptools 43.0.0+)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:45 +msgid ":file:`MANIFEST.in`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:47 +msgid "" +"After adding the above files to the sdist, the commands in " +":file:`MANIFEST.in` (if such a file exists) are executed in order to add " +"and remove further files to & from the sdist. Default files can even be " +"removed from the sdist with the appropriate :file:`MANIFEST.in` command." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:52 +msgid "" +"After processing the :file:`MANIFEST.in` file, setuptools removes the " +":file:`build/` directory as well as any directories named :file:`RCS`, " +":file:`CVS`, or :file:`.svn` from the sdist, and it adds a :file:`PKG-" +"INFO` file and an :file:`*.egg-info` directory. This behavior cannot be " +"changed with :file:`MANIFEST.in`." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:60 +msgid ":file:`MANIFEST.in` commands" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:62 +msgid "" +"A :file:`MANIFEST.in` file consists of commands, one per line, " +"instructing setuptools to add or remove some set of files from the sdist." +" The commands are:" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:67 +msgid "Command" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:69 +msgid ":samp:`include {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:69 +msgid "" +"Add all files matching any of the listed patterns (Files must be given as" +" paths relative to the root of the project)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:71 +msgid ":samp:`exclude {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:71 +msgid "" +"Remove all files matching any of the listed patterns (Files must be given" +" as paths relative to the root of the project)" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:73 +msgid ":samp:`recursive-include {dir-pattern} {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:73 +msgid "" +"Add all files under directories matching ``dir-pattern`` that match any " +"of the listed patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:74 +msgid ":samp:`recursive-exclude {dir-pattern} {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:74 +msgid "" +"Remove all files under directories matching ``dir-pattern`` that match " +"any of the listed patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:75 +msgid ":samp:`global-include {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:75 +msgid "" +"Add all files anywhere in the source tree matching any of the listed " +"patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:76 +msgid ":samp:`global-exclude {pat1} {pat2} ...`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:76 +msgid "" +"Remove all files anywhere in the source tree matching any of the listed " +"patterns" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:77 +msgid ":samp:`graft {dir-pattern}`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:77 +msgid "Add all files under directories matching ``dir-pattern``" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:78 +msgid ":samp:`prune {dir-pattern}`" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:78 +msgid "Remove all files under directories matching ``dir-pattern``" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:81 +msgid "" +"The patterns here are glob-style patterns: ``*`` matches zero or more " +"regular filename characters (on Unix, everything except forward slash; on" +" Windows, everything except backslash and colon); ``?`` matches a single " +"regular filename character, and ``[chars]`` matches any one of the " +"characters between the square brackets (which may contain character " +"ranges, e.g., ``[a-z]`` or ``[a-fA-F0-9]``). Setuptools also has " +"undocumented support for ``**`` matching zero or more characters " +"including forward slash, backslash, and colon." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:89 +msgid "" +"Directory patterns are relative to the root of the project directory; " +"e.g., ``graft example*`` will include a directory named :file:`examples` " +"in the project root but will not include :file:`docs/examples/`." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:93 +msgid "" +"File & directory names in :file:`MANIFEST.in` should be ``/``-separated; " +"setuptools will automatically convert the slashes to the local platform's" +" appropriate directory separator." +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:97 +msgid "" +"Commands are processed in the order they appear in the " +":file:`MANIFEST.in` file. For example, given the commands:" +msgstr "" + +#: ../../source/guides/using-manifest-in.rst:105 +msgid "" +"the contents of the directory tree :file:`tests` will first be added to " +"the sdist, and then after that all files in the sdist with a ``.pyc``, " +"``.pyo``, or ``.pyd`` extension will be removed from the sdist. If the " +"commands were in the opposite order, then ``*.pyc`` files etc. would be " +"only be removed from what was already in the sdist before adding " +":file:`tests`, and if :file:`tests` happened to contain any ``*.pyc`` " +"files, they would end up included in the sdist because the exclusion " +"happened before they were included." +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 entering your username, you can configure TestPyPI " +"in your :file:`$HOME/.pypirc`:" +msgstr "" + +#: ../../source/index.rst:3 ../../source/key_projects.rst:181 +msgid "Python Packaging User Guide" +msgstr "Python 打包用户指南" + +#: ../../source/index.rst:5 +msgid "" +"The Python Packaging User Guide (PyPUG) is a collection of tutorials and " +"guides for packaging Python software." +msgstr "" +"Python 打包用户指南(PyPUG)是一个打包 Python 软件的教程和指南的集合。" + +#: ../../source/index.rst:5 +msgid "python, packaging, guide, tutorial" +msgstr "" + +#: ../../source/index.rst:24 +msgid "" +"Welcome to the *Python Packaging User Guide*, a collection of tutorials " +"and references to help you distribute and install Python packages with " +"modern tools." +msgstr "" +"欢迎来到 *Python 打包用户指南*,这是一个教程和参考资料的集合,帮助你用现代工具分发和安装 Python 包。" + +#: ../../source/index.rst:28 +msgid "" +"This guide is maintained on `GitHub`_ by the :doc:`Python Packaging " +"Authority `. We happily accept any :doc:`contributions and " +"feedback `. 😊" +msgstr "" +"本指南由 :doc:`Python Packaging Authority ` 在 `GitHub`_ 上维护。" +"我们很乐意接受任何 :doc:`贡献和反馈 `。😊" + +#: ../../source/index.rst:35 +msgid "Get started" +msgstr "开始行动" + +#: ../../source/index.rst:37 +msgid "" +"Essential tools and concepts for working within the Python development " +"ecosystem are covered in our :doc:`tutorials/index` section:" +msgstr "" +"在 Python 开发生态系统中工作的基本工具和概念在我们的 :doc:`tutorials/index` 部分有所涉及:" + +#: ../../source/index.rst:40 +msgid "" +"To learn how to install packages, see the :doc:`tutorial on installing " +"packages `" +msgstr "" +"要学习如何安装软件包,请看 :doc:`安装软件包的教程 `" + +#: ../../source/index.rst:42 +msgid "" +"To learn how to manage dependencies in a version controlled project, see " +"the :doc:`tutorial on managing application dependencies `" +msgstr "" +"要学习如何在版本控制项目中管理依赖关系,请参见 :doc:`管理应用程序依赖关系的教程 " +"`" + +#: ../../source/index.rst:44 +msgid "" +"To learn how to package and distribute your projects, see the " +":doc:`tutorial on packaging and distributing `" +msgstr "" +"要学习如何打包和发布你的项目,请看 :doc:`关于打包和发布的教程 `" + +#: ../../source/index.rst:46 +msgid "" +"To get an overview of packaging options for Python libraries and " +"applications, see the :doc:`Overview of Python Packaging `" +msgstr "" +"要获得 Python 库和应用程序的打包选项的概述,请参见 :doc:`Overview of Python Packaging `" + +#: ../../source/index.rst:51 +msgid "Learn more" +msgstr "了解更多" + +#: ../../source/index.rst:53 +msgid "Beyond our :doc:`tutorials/index`, this guide has several other resources:" +msgstr "除了我们的 :doc:`tutorials/index`,本指南还有其他一些资源:" + +#: ../../source/index.rst:55 +msgid "" +"The :doc:`guides/index` section for walk throughs, such as :doc:`guides" +"/installing-using-linux-tools` or :doc:`guides/packaging-binary-" +"extensions`." +msgstr "" +":doc:`guides/index` 部分,用于浏览,例如 :doc:`guides/installing-using-linux-tools` " +"或 :doc:`guides/packaging-binary-extensions`。" + +#: ../../source/index.rst:57 +msgid "" +"The :doc:`discussions/index` section for in-depth references on topics " +"such as :doc:`discussions/deploying-python-applications` or " +":doc:`discussions/pip-vs-easy-install`." +msgstr "" +":doc:`discussions/index` 部分,用于深入参考诸如 " +":doc:`discussions/deploying-python-applications` " +"或 :doc:`discussions/pip-vs-easy-install` 等主题。" + +#: ../../source/index.rst:59 +msgid "" +"The :doc:`specifications/index` section for packaging interoperability " +"specifications." +msgstr "" +":doc:`specifications/index` 部分,用于包装互操作性规范。" + +#: ../../source/index.rst:61 +msgid "" +"Additionally, there is a list of :doc:`other projects ` " +"maintained by members of the Python Packaging Authority." +msgstr "" +"此外,还有一个 :doc:`其他项目 ` 的列表,由 Python Packaging Authority 的成员维护。" + +#: ../../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 "" +"`Issues `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:25 +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)." +msgstr "" + +#: ../../source/key_projects.rst:35 +msgid "build" +msgstr "" + +#: ../../source/key_projects.rst:37 +msgid "" +"`Docs ` | `Issues `__ " +"| `GitHub `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:42 +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:49 +msgid "cibuildwheel" +msgstr "" + +#: ../../source/key_projects.rst:51 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__ | `Discussions " +"`__ | `Discord " +"#cibuildwheel `__" +msgstr "" + +#: ../../source/key_projects.rst:58 +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:64 +msgid "distlib" +msgstr "" + +#: ../../source/key_projects.rst:66 +msgid "" +":doc:`Docs ` | `Issues " +"`__ | " +"`Bitbucket `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:71 +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:80 +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:90 +msgid "packaging" +msgstr "" + +#: ../../source/key_projects.rst:92 +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:97 +msgid "" +"Core utilities for Python packaging used by :ref:`pip` and " +":ref:`setuptools`." +msgstr "" + +#: ../../source/key_projects.rst:99 +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:107 +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:119 +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "pip" +msgstr "" + +#: ../../source/key_projects.rst:121 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:126 +msgid "" +"The most popular tool for installing Python packages, and the one " +"included with modern versions of Python." +msgstr "" + +#: ../../source/key_projects.rst:129 +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:137 +msgid "Pipenv" +msgstr "" + +#: ../../source/key_projects.rst:139 +msgid "" +"`Docs `__ " +"| `Source `__ | `Issues " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:144 +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 features very pretty " +"terminal colors." +msgstr "" + +#: ../../source/key_projects.rst:148 +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 checkes file hashes, to ensure " +"compliance with hash-locked dependency specifiers, and eases " +"uninstallation of packages and dependencies. It is used by Python users " +"and system administrators, but has been less maintained since late 2018." +msgstr "" + +#: ../../source/key_projects.rst:159 +msgid "Pipfile" +msgstr "" + +#: ../../source/key_projects.rst:161 +msgid "`Source `__" +msgstr "" + +#: ../../source/key_projects.rst:163 +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:170 +msgid "pipx" +msgstr "" + +#: ../../source/key_projects.rst:172 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:176 +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:183 +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:187 +msgid "This guide!" +msgstr "" + +#: ../../source/key_projects.rst:192 +msgid "readme_renderer" +msgstr "" + +#: ../../source/key_projects.rst:194 +msgid "" +"`GitHub and docs `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:197 +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:208 +msgid "setuptools" +msgstr "" + +#: ../../source/key_projects.rst:210 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:215 +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:220 +msgid "" +"`distribute`_ was a fork of setuptools that was merged back into " +"setuptools (in v0.7), thereby making setuptools the primary choice for " +"Python packaging." +msgstr "" + +#: ../../source/key_projects.rst:227 +msgid "trove-classifiers" +msgstr "" + +#: ../../source/key_projects.rst:229 +msgid "" +"`Issues `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:233 +msgid "" +"trove-classifiers is the canonical source for `classifiers on PyPI " +"`_, which project maintainers use to " +"`systematically describe their projects " +"`_ so that users can better find projects that match their " +"needs on the PyPI." +msgstr "" + +#: ../../source/key_projects.rst:239 +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:253 +msgid "twine" +msgstr "" + +#: ../../source/key_projects.rst:255 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:260 +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:270 ../../source/overview.rst:412 +msgid "virtualenv" +msgstr "" + +#: ../../source/key_projects.rst:272 +msgid "" +":doc:`Docs ` | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:277 +msgid "" +"virtualenv is a tool which uses the command-line path environment " +"variable to create isolated Python :term:`Virtual Environments `, much as :ref:`venv` does. virtualenv provides additional " +"functionality, compared to :ref:`venv`, by supporting Python 2.7 and by " +"providing convenient features for configuring, maintaining, duplicating, " +"and troubleshooting the virtual environments. For more information, see " +"the section on :ref:`Creating and using Virtual Environments`." +msgstr "" + +#: ../../source/key_projects.rst:290 +msgid "Warehouse" +msgstr "" + +#: ../../source/key_projects.rst:292 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:296 +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:304 +msgid "wheel" +msgstr "" + +#: ../../source/key_projects.rst:306 +msgid "" +"`Docs `__ | `Issues " +"`__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:311 +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:315 +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:324 +msgid "Non-PyPA Projects" +msgstr "" + +#: ../../source/key_projects.rst:329 +msgid "buildout" +msgstr "" + +#: ../../source/key_projects.rst:331 +msgid "" +"`Docs `__ | `Issues " +"`__ | `PyPI " +"`__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:336 +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:343 +msgid "conda" +msgstr "" + +#: ../../source/key_projects.rst:345 +msgid ":doc:`Docs `" +msgstr "" + +#: ../../source/key_projects.rst:347 +msgid "" +"conda is the package management tool for `Anaconda " +"`__ Python installations. Anaconda " +"Python is a distribution from `Anaconda, Inc " +"`__ specifically aimed at " +"the scientific community, and in particular on Windows where the " +"installation of binary extensions is often difficult." +msgstr "" + +#: ../../source/key_projects.rst:354 +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." +msgstr "" + +#: ../../source/key_projects.rst:358 +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." +msgstr "" + +#: ../../source/key_projects.rst:371 +msgid "devpi" +msgstr "" + +#: ../../source/key_projects.rst:373 +msgid "" +"`Docs `__ | :gh:`Issues " +"` | `PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:377 +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." +msgstr "" + +#: ../../source/key_projects.rst:386 +msgid "flit" +msgstr "" + +#: ../../source/key_projects.rst:388 +msgid "" +"`Docs `__ | `Issues " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:392 +msgid "" +"Flit provides a simple way to 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:397 +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:407 +msgid "enscons" +msgstr "" + +#: ../../source/key_projects.rst:409 +msgid "" +":gh:`Source ` | :gh:`Issues ` | " +"`PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:413 +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:428 +msgid "Hashdist" +msgstr "" + +#: ../../source/key_projects.rst:430 +msgid "" +"`Docs `__ | `GitHub " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:433 +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:445 +msgid "hatch" +msgstr "" + +#: ../../source/key_projects.rst:447 +msgid "" +"`GitHub and Docs `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:450 +msgid "" +"Hatch is a unified command-line tool meant to conveniently manage " +"dependencies and environment isolation for Python developers. Python " +"package developers use Hatch to configure, version, specify dependencies " +"for, and publish packages to PyPI. Under the hood, it uses :ref:`twine` " +"to upload packages to PyPI, and :ref:`pip` to download and install " +"packages." +msgstr "" + +#: ../../source/key_projects.rst:460 +msgid "multibuild" +msgstr "" + +#: ../../source/key_projects.rst:462 +msgid "`GitHub `__" +msgstr "" + +#: ../../source/key_projects.rst:464 +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:470 +msgid "pdm" +msgstr "" + +#: ../../source/key_projects.rst:472 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:476 +msgid "" +"PDM is a modern Python package manager with :pep:`582` support. It " +"installs and manages packages in a similar way to ``npm`` that doesn't " +"need to create a :term:`virtual environment` at all. It also uses " +":term:`pyproject.toml` to store project metadata as defined in " +":pep:`621`." +msgstr "" + +#: ../../source/key_projects.rst:486 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:490 +msgid "" +"pex is both a library and tool for generating :file:`.pex` (Python " +"EXecutable) files, standalone Python environments in the spirit of " +":ref:`virtualenv`. :file:`.pex` files are just carefully constructed zip " +"files with a ``#!/usr/bin/env python`` and special :file:`__main__.py`, " +"and are designed to make deployment of Python applications as simple as " +"``cp``." +msgstr "" + +#: ../../source/key_projects.rst:499 +msgid "pip-tools" +msgstr "" + +#: ../../source/key_projects.rst:501 +msgid "" +"`GitHub and Docs `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:504 +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:516 +msgid "piwheels" +msgstr "" + +#: ../../source/key_projects.rst:518 +msgid "" +"`Website `__ | :doc:`Docs ` | " +"`GitHub `__" +msgstr "" + +#: ../../source/key_projects.rst:522 +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:531 +msgid "poetry" +msgstr "" + +#: ../../source/key_projects.rst:533 +msgid "" +"`Docs `__ | `GitHub `__ | `PyPI `__" +msgstr "" + +#: ../../source/key_projects.rst:537 +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:547 +msgid "pypiserver" +msgstr "" + +#: ../../source/key_projects.rst:549 +msgid "" +"`Docs " +"`__ | " +"`GitHub `__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:553 +msgid "" +"pypiserver is a minimalist application that serves as a private Python " +"package index 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:563 +msgid "PyScaffold" +msgstr "" + +#: ../../source/key_projects.rst:565 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:569 +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:581 +msgid "scikit-build" +msgstr "" + +#: ../../source/key_projects.rst:583 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:587 +msgid "" +"Scikit-build is an improved build system generator for CPython " +"C/C++/Fortran/Cython extensions that integrates with :ref:`setuptools`, " +":ref:`wheel` and :ref:`pip`. It internally 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:599 +msgid "shiv" +msgstr "" + +#: ../../source/key_projects.rst:601 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:605 +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:615 +msgid "" +":doc:`Docs ` | `GitHub `__ |" +" `Paper `__ | `Slides " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:620 +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:628 +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:634 +msgid "zest.releaser" +msgstr "" + +#: ../../source/key_projects.rst:636 +msgid "" +"`Docs `__ | `GitHub " +"`__ | `PyPI " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:640 +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:647 +msgid "Standard Library Projects" +msgstr "" + +#: ../../source/key_projects.rst:652 +msgid "ensurepip" +msgstr "" + +#: ../../source/key_projects.rst:654 +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:657 +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:666 +msgid "distutils" +msgstr "" + +#: ../../source/key_projects.rst:668 +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:671 +msgid "" +"The original Python packaging system, added to the standard library in " +"Python 2.0." +msgstr "" + +#: ../../source/key_projects.rst:674 +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` is now 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:687 +msgid "venv" +msgstr "" + +#: ../../source/key_projects.rst:689 +msgid "" +"`Docs `__ | `Issues " +"`__" +msgstr "" + +#: ../../source/key_projects.rst:692 +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:5 +msgid "September 2019" +msgstr "" + +#: ../../source/news.rst:6 +msgid "Added a guide about publishing dists via GitHub Actions. (:pr:`647`)" +msgstr "" + +#: ../../source/news.rst:9 +msgid "August 2019" +msgstr "" + +#: ../../source/news.rst:10 +msgid "Updated to use :file:`python3 -m` when installing pipx. (:pr:`631`)" +msgstr "" + +#: ../../source/news.rst:13 +msgid "July 2019" +msgstr "" + +#: ../../source/news.rst:14 +msgid "Marked all PEP numbers with the :pep: role. (:pr:`629`)" +msgstr "" + +#: ../../source/news.rst:15 +msgid "Upgraded Sphinx version and removed pypa.io intersphinx. (:pr:`625`)" +msgstr "" + +#: ../../source/news.rst:16 +msgid "Mentioned :file:`find_namespace_packages`. (:pr:`622`)" +msgstr "" + +#: ../../source/news.rst:17 +msgid "Updated directory layout examples for consistency. (:pr:`611`)" +msgstr "" + +#: ../../source/news.rst:18 +msgid "Updated Bandersnatch link to GitHub. (:pr:`623`)" +msgstr "" + +#: ../../source/news.rst:21 +msgid "June 2019" +msgstr "" + +#: ../../source/news.rst:22 +msgid "Fixed some typos. (:pr:`620`)" +msgstr "" + +#: ../../source/news.rst:25 +msgid "May 2019" +msgstr "" + +#: ../../source/news.rst:26 +msgid "Added :file:`python_requires` usage to packaging tutorial. (:pr:`613`)" +msgstr "" + +#: ../../source/news.rst:27 +msgid "Added a MANIFEST.in guide page. (:pr:`609`)" +msgstr "" + +#: ../../source/news.rst:30 +msgid "April 2019" +msgstr "" + +#: ../../source/news.rst:31 +msgid "Added a mention for :file:`shiv` in the key projects section. (:pr:`608`)" +msgstr "" + +#: ../../source/news.rst:32 +msgid "Reduced emphasis on virtualenv. (:pr:`606`)" +msgstr "" + +#: ../../source/news.rst:35 +msgid "March 2019" +msgstr "" + +#: ../../source/news.rst:36 +msgid "Moved single-sourcing guide version option to Python 3. (:pr:`605`)" +msgstr "" + +#: ../../source/news.rst:37 +msgid "Covered RTD details for contributing. (:pr:`600`)" +msgstr "" + +#: ../../source/news.rst:40 +msgid "February 2019" +msgstr "" + +#: ../../source/news.rst:41 +msgid "" +"Elaborate upon the differences between the tutorial and the real " +"packaging process. (:pr:`602`)" +msgstr "" + +#: ../../source/news.rst:42 +msgid "Added instructions to install Python CLI applications. (:pr:`594`)" +msgstr "" + +#: ../../source/news.rst:45 +msgid "January 2019" +msgstr "" + +#: ../../source/news.rst:46 +msgid "Added :file:`--no-deps` to the packaging tutorial. (:pr:`593`)" +msgstr "" + +#: ../../source/news.rst:47 +msgid "Updated Sphinx and Nox. (:pr:`591`)" +msgstr "" + +#: ../../source/news.rst:48 +msgid "Referenced Twine from Python3. (:pr:`581`)" +msgstr "" + +#: ../../source/news.rst:51 +msgid "December 2018" +msgstr "" + +#: ../../source/news.rst:52 +msgid "No programmers in the office!" +msgstr "" + +#: ../../source/news.rst:55 +msgid "November 2018" +msgstr "" + +#: ../../source/news.rst:56 +msgid "Removed landing page link to PyPI migration guide. (:pr:`575`)" +msgstr "" + +#: ../../source/news.rst:57 +msgid "Changed bumpversion to bump2version. (:pr:`572`)" +msgstr "" + +#: ../../source/news.rst:58 +msgid "Added single-sourcing package version example. (:pr:`573`)" +msgstr "" + +#: ../../source/news.rst:59 +msgid "Added a guide for creating documentation. (:pr:`568`)" +msgstr "" + +#: ../../source/news.rst:62 +msgid "October 2018" +msgstr "" + +#: ../../source/news.rst:63 +msgid "Updated Nox package name. (:pr:`566`)" +msgstr "" + +#: ../../source/news.rst:64 +msgid "Mentioned Sphinx extensions in guides. (:pr:`562`)" +msgstr "" + +#: ../../source/news.rst:67 +msgid "September 2018" +msgstr "" + +#: ../../source/news.rst:68 +msgid "Added a section on checking RST markup. (:pr:`554`)" +msgstr "" + +#: ../../source/news.rst:69 +msgid "Updated user installs page. (:pr:`558`)" +msgstr "" + +#: ../../source/news.rst:70 +msgid "Updated Google BigQuery urls. (:pr:`556`)" +msgstr "" + +#: ../../source/news.rst:71 +msgid "Replaced tar command with working command. (:pr:`552`)" +msgstr "" + +#: ../../source/news.rst:72 +msgid "Changed to double quotes in the pip install SomeProject==1.4. (:pr:`550`)" +msgstr "" + +#: ../../source/news.rst:75 +msgid "August 2018" +msgstr "" + +#: ../../source/news.rst:76 +msgid "Removed the recommendation to store passwords in cleartext. (:pr:`546`)" +msgstr "" + +#: ../../source/news.rst:77 +msgid "" +"Moved the Overview to a task based lead in along with the others. " +"(:pr:`540`)" +msgstr "" + +#: ../../source/news.rst:78 +msgid "Updated Python version supported by virtualenv. (:pr:`538`)" +msgstr "" + +#: ../../source/news.rst:79 +msgid "Added outline/rough draft of new Overview page. (:pr:`519`)" +msgstr "" + +#: ../../source/news.rst:82 +msgid "July 2018" +msgstr "" + +#: ../../source/news.rst:84 +msgid "Improved binary extension docs. (:pr:`531`)" +msgstr "" + +#: ../../source/news.rst:85 +msgid "Added scikit-build to key projects. (:pr:`530`)" +msgstr "" + +#: ../../source/news.rst:88 +msgid "June 2018" +msgstr "" + +#: ../../source/news.rst:90 +msgid "Fixed categories of interop PEP for pypa.io. (:pr:`527`)" +msgstr "" + +#: ../../source/news.rst:91 +msgid "Updated Markdown descriptions explanation. (:pr:`522`)" +msgstr "" + +#: ../../source/news.rst:94 +msgid "May 2018" +msgstr "" + +#: ../../source/news.rst:96 +msgid "Noted issues with Provides-Dist and Obsoletes-Dist. (:pr:`513`)" +msgstr "" + +#: ../../source/news.rst:97 +msgid "" +"Removed outdated warning about Python version mixing with Pipenv. " +"(:pr:`501`)" +msgstr "" + +#: ../../source/news.rst:98 +msgid "Simplified packaging tutorial. (:pr:`498`)" +msgstr "" + +#: ../../source/news.rst:99 +msgid "Updated Windows users instructions for clarity. (:pr:`493`)" +msgstr "" + +#: ../../source/news.rst:100 +msgid "Updated the license section description for completeness. (:pr:`492`)" +msgstr "" + +#: ../../source/news.rst:101 +msgid "Added specification-style document to contributing section. (:pr:`489`)" +msgstr "" + +#: ../../source/news.rst:102 +msgid "Added documentation types to contributing guide. (:pr:`485`)" +msgstr "" + +#: ../../source/news.rst:105 +msgid "April 2018" +msgstr "" + +#: ../../source/news.rst:107 +msgid "Added README guide. (:pr:`461`)" +msgstr "" + +#: ../../source/news.rst:108 +msgid "Updated instructions and status for PyPI launch. (:pr:`475`)" +msgstr "" + +#: ../../source/news.rst:109 +msgid "Added instructions for Warehouse. (:pr:`471`)" +msgstr "" + +#: ../../source/news.rst:110 +msgid "Removed GPG references from publishing tutorial. (:pr:`466`)" +msgstr "" + +#: ../../source/news.rst:111 +msgid "Added 'What’s in which Python 3.4–3.6?'. (:pr:`468`)" +msgstr "" + +#: ../../source/news.rst:112 +msgid "Added a guide for phasing out Python versions. (:pr:`459`)" +msgstr "" + +#: ../../source/news.rst:113 +msgid "Made default Description-Content-Type variant GFM. (:pr:`462`)" +msgstr "" + +#: ../../source/news.rst:116 +msgid "March 2018" +msgstr "" + +#: ../../source/news.rst:118 +msgid "Updated \"installing scientific packages\". (:pr:`455`)" +msgstr "" + +#: ../../source/news.rst:119 +msgid "Added :file:`long_description_content_type` to follow PEP 556. (:pr:`457`)" +msgstr "" + +#: ../../source/news.rst:120 +msgid "Clarified a long description classifier on pypi.org. (:pr:`456`)" +msgstr "" + +#: ../../source/news.rst:121 +msgid "Updated Core Metadata spec to follw PEP 556. (:pr:`412`)" +msgstr "" + +#: ../../source/news.rst:124 +msgid "February 2018" +msgstr "" + +#: ../../source/news.rst:126 +msgid "" +"Added python3-venv and python3-pip to Debian installation instructions. " +"(:pr:`445`)" +msgstr "" + +#: ../../source/news.rst:127 +msgid "Updated PyPI migration info. (:pr:`439`)" +msgstr "" + +#: ../../source/news.rst:128 +msgid "Added a warning about managing multiple versions with pipenv. (:pr:`430`)" +msgstr "" + +#: ../../source/news.rst:129 +msgid "Added example of multiple emails to Core Metadata. (:pr:`429`)" +msgstr "" + +#: ../../source/news.rst:130 +msgid "Added explanation of \"legacy\" in test.pypi.org/legacy. (:pr:`426`)" +msgstr "" + +#: ../../source/news.rst:133 +msgid "January 2018" +msgstr "" + +#: ../../source/news.rst:135 +msgid "Added a link to PyPI's list of classifiers. (:pr:`425`)" +msgstr "" + +#: ../../source/news.rst:136 +msgid "Updated README.rst explanation. (:pr:`419`)" +msgstr "" + +#: ../../source/news.rst:139 +msgid "December 2017" +msgstr "" + +#: ../../source/news.rst:141 +msgid "" +"Replaced :file:`~` with :file:`$HOME` in guides and tutorials. " +"(:pr:`418`)" +msgstr "" + +#: ../../source/news.rst:142 +msgid "Noted which fields can be used with environment markers. (:pr:`416`)" +msgstr "" + +#: ../../source/news.rst:143 +msgid "Updated Requires-Python section. (:pr:`414`)" +msgstr "" + +#: ../../source/news.rst:144 +msgid "Added news page. (:pr:`404`)" +msgstr "" + +#: ../../source/news.rst:147 +msgid "November 2017" +msgstr "" + +#: ../../source/news.rst:149 +msgid "" +"Introduced a new dependency management tutorial based on Pipenv. " +"(:pr:`402`)" +msgstr "" + +#: ../../source/news.rst:150 +msgid "" +"Updated the *Single Sourcing Package Version* tutorial to reflect pip's " +"current strategy. (:pr:`400`)" +msgstr "" + +#: ../../source/news.rst:152 +msgid "" +"Added documentation about the ``py_modules`` argument to ``setup``. " +"(:pr:`398`)" +msgstr "" + +#: ../../source/news.rst:153 +msgid "Simplified the wording for the :file:`manifest.in` section. (:pr:`395`)" +msgstr "" + +#: ../../source/news.rst:156 +msgid "October 2017" +msgstr "" + +#: ../../source/news.rst:158 +msgid "Added a specification for the :file:`entry_points.txt` file. (:pr:`398`)" +msgstr "" + +#: ../../source/news.rst:159 +msgid "" +"Created a new guide for managing packages using ``pip`` and " +"``virtualenv``. (:pr:`385`)" +msgstr "" + +#: ../../source/news.rst:160 +msgid "Split the specifications page into multiple pages. (:pr:`386`)" +msgstr "" + +#: ../../source/news.rst:163 +msgid "September 2017" +msgstr "" + +#: ../../source/news.rst:165 +msgid "" +"Encouraged using ``readme_renderer`` to validate :file:`README.rst`. " +"(:pr:`379`)" +msgstr "" + +#: ../../source/news.rst:167 +msgid "Recommended using the ``--user-base`` option. (:pr:`374`)" +msgstr "" + +#: ../../source/news.rst:170 +msgid "August 2017" +msgstr "" + +#: ../../source/news.rst:172 +msgid "" +"Added a new, experimental tutorial on installing packages using " +"``Pipenv``. (:pr:`369`)" +msgstr "" + +#: ../../source/news.rst:173 +msgid "Added a new guide on how to use ``TestPyPI``. (:pr:`366`)" +msgstr "" + +#: ../../source/news.rst:174 +msgid "Added :file:`pypi.org` as a term. (:pr:`365`)" +msgstr "" + +#: ../../source/news.rst:177 +msgid "July 2017" +msgstr "" + +#: ../../source/news.rst:179 +msgid "Added ``flit`` to the key projects list. (:pr:`358`)" +msgstr "" + +#: ../../source/news.rst:180 +msgid "Added ``enscons`` to the list of key projects. (:pr:`357`)" +msgstr "" + +#: ../../source/news.rst:181 +msgid "" +"Updated this guide's ``readme`` with instructions on how to build the " +"guide locally. (:pr:`356`)" +msgstr "" + +#: ../../source/news.rst:182 +msgid "" +"Made the new ``TestPyPI`` URL more visible, adding note to homepage about" +" pypi.org. (:pr:`354`)" +msgstr "" + +#: ../../source/news.rst:183 +msgid "" +"Added a note about the removal of the explicit registration API. " +"(:pr:`347`)" +msgstr "" + +#: ../../source/news.rst:186 +msgid "June 2017" +msgstr "" + +#: ../../source/news.rst:188 +msgid "Added a document on migrating uploads to :file:`PyPI.org`. (:pr:`339`)" +msgstr "" + +#: ../../source/news.rst:189 +msgid "Added documentation for ``python_requires``. (:pr:`338`)" +msgstr "" + +#: ../../source/news.rst:190 +msgid "" +"Added a note about PyPI migration in the *Tool Recommendations* tutorial." +" (:pr:`335`)" +msgstr "" + +#: ../../source/news.rst:191 +msgid "Added a note that :file:`manifest.in` does not affect wheels. (:pr:`332`)" +msgstr "" + +#: ../../source/news.rst:192 +msgid "Added a license section to the distributing guide. (:pr:`331`)" +msgstr "" + +#: ../../source/news.rst:193 +msgid "Expanded the section on the ``name`` argument. (:pr:`329`)" +msgstr "" + +#: ../../source/news.rst:194 +msgid "Adjusted the landing page. (:pr:`327`, :pr:`326`, :pr:`324`)" +msgstr "" + +#: ../../source/news.rst:195 +msgid "Updated to Sphinx 1.6.2. (:pr:`323`)" +msgstr "" + +#: ../../source/news.rst:196 +msgid "Switched to the PyPA theme. (:pr:`305`)" +msgstr "" + +#: ../../source/news.rst:197 +msgid "Re-organized the documentation into the new structure. (:pr:`318`)" +msgstr "" + +#: ../../source/news.rst:200 +msgid "May 2017" +msgstr "" + +#: ../../source/news.rst:202 +msgid "" +"Added documentation for the ``Description-Content-Type`` field. " +"(:pr:`258`)" +msgstr "" + +#: ../../source/news.rst:203 +msgid "Added contributor and style guide. (:pr:`307`)" +msgstr "" + +#: ../../source/news.rst:204 +msgid "" +"Documented ``pip`` and ``easy_install``'s differences for per-project " +"indexes. (:pr:`233`)" +msgstr "" + +#: ../../source/news.rst:207 +msgid "April 2017" +msgstr "" + +#: ../../source/news.rst:209 +msgid "Added travis configuration for testing pull requests. (:pr:`300`)" +msgstr "" + +#: ../../source/news.rst:210 +msgid "" +"Mentioned the requirement of the ``wheel`` package for creating wheels " +"(:pr:`299`)" +msgstr "" + +#: ../../source/news.rst:211 +msgid "" +"Removed the ``twine register`` reference in the *Distributing Packages* " +"tutorial. (:pr:`271`)" +msgstr "" + +#: ../../source/news.rst:212 +msgid "Added a topic on plugin discovery. (:pr:`294`, :pr:`296`)" +msgstr "" + +#: ../../source/news.rst:213 +msgid "Added a topic on namespace packages. (:pr:`290`)" +msgstr "" + +#: ../../source/news.rst:214 +msgid "" +"Added documentation explaining prominently how to install ``pip`` in " +"``/usr/local``. (:pr:`230`)" +msgstr "" + +#: ../../source/news.rst:215 +msgid "" +"Updated development mode documentation to mention that order of local " +"packages matters. (:pr:`208`)" +msgstr "" + +#: ../../source/news.rst:216 +msgid "" +"Convert readthedocs link for their ``.org`` -> ``.io`` migration for " +"hosted projects (:pr:`239`)" +msgstr "" + +#: ../../source/news.rst:217 +msgid "" +"Swaped order of :file:`setup.py` arguments for the upload command, as " +"order is significant. (:pr:`260`)" +msgstr "" + +#: ../../source/news.rst:219 +msgid "" +"Explained how to install from unsupported sources using a helper " +"application. (:pr:`289`)" +msgstr "" + +#: ../../source/news.rst:223 +msgid "March 2017" +msgstr "" + +#: ../../source/news.rst:225 +msgid "Covered ``manylinux1`` in *Platform Wheels*. (:pr:`283`)" +msgstr "" + +#: ../../source/news.rst:228 +msgid "February 2017" +msgstr "" + +#: ../../source/news.rst:230 +msgid "Added :pep:`518`. (:pr:`281`)" +msgstr "" + +#: ../../source/overview.rst:3 +msgid "An Overview of Packaging for Python" +msgstr "Python 的打包概述" + +#: ../../source/overview.rst:7 +msgid "" +"As a general-purpose programming language, Python is designed to be used " +"in many ways. You can build web sites or industrial robots or a game for " +"your friends to play, and much more, all using the same core technology." +msgstr "" +"作为一种通用的编程语言,Python 被设计成可以在许多方面使用。" +"你可以建立网站或工业机器人,或为你的朋友设计一个游戏,以及更多,都使用相同的核心技术。" + +#: ../../source/overview.rst:12 +msgid "" +"Python's flexibility is why the first step in every Python project must " +"be to think about the project's audience and the corresponding " +"environment where the project will run. It might seem strange to think " +"about packaging before writing code, but this process does wonders for " +"avoiding future headaches." +msgstr "" +"Python 的灵活性是为什么每个 Python 项目的第一步都必须考虑项目的受众和项目运行的相应环境。" +"在写代码之前考虑打包问题可能看起来很奇怪,但这个过程对于避免未来的头痛问题有很大的作用。" + +#: ../../source/overview.rst:18 +msgid "" +"This overview provides a general-purpose decision tree for reasoning " +"about Python's plethora of packaging options. Read on to choose the best " +"technology for your next project." +msgstr "" +"这个概述提供了一个通用的决策树,用于推理 Python 的大量封装选项。继续阅读,为你的下一个项目选择最好的技术。" + +#: ../../source/overview.rst:26 +msgid "Thinking about deployment" +msgstr "关于部署的思考" + +#: ../../source/overview.rst:28 +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:32 +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:35 +msgid "" +"Is your software intended to run on servers, desktops, mobile clients " +"(phones, tablets, etc.), or embedded in dedicated devices?" +msgstr "" +"你的软件是要在服务器、桌面、移动客户端(手机、平板电脑等)上运行,还是嵌入到专用设备中?" + +#: ../../source/overview.rst:37 +msgid "Is your software installed individually, or in large deployment batches?" +msgstr "你的软件是单独安装,还是成批部署?" + +#: ../../source/overview.rst:39 +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:46 +msgid "Packaging Python libraries and tools" +msgstr "包装 Python 库和工具" + +#: ../../source/overview.rst:48 +msgid "" +"You may have heard about PyPI, ``setup.py``, and ``wheel`` files. These " +"are just a few of the tools Python's ecosystem provides for distributing " +"Python code to developers, which you can read about in :doc:`guides" +"/distributing-packages-using-setuptools`." +msgstr "" +"你可能听说过 PyPI、``setup.py`` 和 ``wheel`` 文件。" +"这些只是 Python 生态系统提供的向开发者分发 Python 代码的少数工具," +"你可以在 :doc:`guides/distributing-packages-using-setuptools` 中阅读。" + +#: ../../source/overview.rst:53 +msgid "" +"The following approaches to packaging are meant for libraries and tools " +"used by technical audience in a development setting. If you're looking " +"for ways to package Python for a non-technical audience and/or a " +"production setting, skip ahead to :ref:`packaging-applications`." +msgstr "" +"以下的打包方法是针对开发环境中的技术受众所使用的库和工具。" +"如果你正在寻找为非技术用户和/或生产环境打包 Python 的方法," +"请跳到 :ref:`packaging-applications`。" + +#: ../../source/overview.rst:59 +msgid "Python modules" +msgstr "Python 模块" + +#: ../../source/overview.rst:61 +msgid "" +"A Python file, provided it only relies on the standard library, can be " +"redistributed and reused. You will also need to ensure it's written for " +"the right version of Python, and only relies on the standard library." +msgstr "" +"一个 Python 文件,只要它只依赖于标准库,就可以被重新分发和重复使用。" +"你还需要确保它是为正确的 Python 版本编写的,并且只依赖于标准库。" + +#: ../../source/overview.rst:66 +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 `bottle.py `_ " +"and :doc:`boltons `." +msgstr "" +"这非常适合在拥有兼容 Python 版本的人之间分享简单的脚本和片段" +"(比如通过电子邮件、StackOverflow 或 GitHub gists)。" +"甚至有一些完整的 Python 库提供了这个选项," +"如 `bottle.py `_ 和 :doc:`boltons `。" + +#: ../../source/overview.rst:73 +msgid "" +"However, this pattern won't scale for projects that consist of multiple " +"files, need additional libraries, or need a specific version of Python, " +"hence the options below." +msgstr "" +"然而,对于由多个文件组成的项目,需要额外的库,或者需要特定版本的 Python," +"这种模式就无法扩展,因此有了下面的选项。" + +#: ../../source/overview.rst:78 +msgid "Python source distributions" +msgstr "Python 源码分发" + +#: ../../source/overview.rst:80 +msgid "" +"If your code consists of multiple Python files, it's usually organized " +"into a directory structure. Any directory containing Python files can " +"comprise an :term:`Import Package`." +msgstr "" +"如果你的代码由多个 Python 文件组成,它通常被组织成一个目录结构。" +"任何包含 Python 文件的目录都可以构成一个 :term:`Import Package`。 + +#: ../../source/overview.rst:84 +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:90 +msgid "" +"So long as your code contains nothing but pure Python code, and you know " +"your deployment environment supports your version of Python, then you can" +" use Python's native packaging tools to create a *source* " +":term:`Distribution Package`, or *sdist* for short." +msgstr "" +"只要你的代码只包含纯 Python 代码,而且你知道你的部署环境支持你的 Python 版本," +"那么你就可以使用 Python 的本地打包工具来创建一个 " +"*source* :term:`Distribution Package`,或者简称 *sdist*。" + +#: ../../source/overview.rst:95 +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 :doc:`go here to learn more" +" `." +msgstr "" +"Python 的 *sdists* 是包含一个或多个软件包或模块的压缩档案(``.tar.gz`` 文件)。" +"如果你的代码是纯 Python 的,而且你只依赖其他 Python 包," +"你可以 :doc:`到这里了解更多 `。" + +#: ../../source/overview.rst:100 +msgid "" +"If you rely on any non-Python code, or non-Python packages (such as " +"`libxml2 `_ in the case of `lxml " +"`_, or BLAS libraries in the case of " +"`numpy `_), you will need to use the " +"format detailed in the next section, which also has many advantages for " +"pure-Python libraries." +msgstr "" +"如果你依赖任何非 Python 代码,或者非 Python 包" +"(比如 `libxml2 `_ " +"在 `lxml `_ 的情况下,或者 BLAS 库在 " +"`numpy `_ 的情况下)," +"你将需要使用下一节详述的格式,这对纯 Python 库也有很多好处。" + +#: ../../source/overview.rst:107 +msgid "" +"Python and PyPI support multiple distributions providing different " +"implementations of the same package. For instance the unmaintained-but-" +"seminal `PIL distribution `_ provides the " +"PIL package, and so does `Pillow `_, an" +" actively-maintained fork of PIL!" +msgstr "" +"Python 和 PyPI 支持多个发行版提供同一软件包的不同实现。" +"例如,未被维护但具有象征意义的 `PIL 发行版 `_ 提供了 PIL 包," +"而 `Pillow `_ 也是如此,它是 PIL 的一个积极维护的分叉!" + +#: ../../source/overview.rst:114 +msgid "" +"This Python packaging superpower makes it possible for Pillow to be a " +"drop-in replacement for PIL, just by changing your project's " +"``install_requires`` or ``requirements.txt``." +msgstr "" +"这种 Python 打包的超级能力使 Pillow 有可能成为 PIL 的替代品," +"只需改变你项目的 ``install_requires`` 或 ``requirements.txt`` 即可。" + +#: ../../source/overview.rst:119 +msgid "Python binary distributions" +msgstr "Python 的二进制分发" + +#: ../../source/overview.rst:121 +msgid "" +"So much of Python's practical power comes from its ability to integrate " +"with the software ecosystem, in particular libraries written in C, C++, " +"Fortran, Rust, and other languages." +msgstr "" +"Python 的大部分实用能力来自于它与软件生态系统整合的能力," +"特别是用 C、C++、Fortran、Rust 和其他语言编写的库。" + +#: ../../source/overview.rst:125 +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 "" +"并不是所有的开发者都有合适的工具或经验来构建这些用这些编译语言编写的组件," +"所以 Python 创建了 :term:`Wheel`,这是一种包格式,旨在用编译的工件来运送库。" +"事实上,Python 的包安装程序 ``pip`` 总是更喜欢轮子,因为安装总是更快," +"所以即使是纯 Python 包也能用轮子更好地工作。" + +#: ../../source/overview.rst:132 +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 "" +"二进制发行版最好是与源代码发行版相匹配。" +"即使你不为每个操作系统上传你的代码轮子,通过上传 sdist,你也可以让其他平台的用户为自己构建它。" +"除非你为一个非常特殊的使用情况创建工件,而你知道接收者只需要其中一个,否则默认为同时发布 sdist 和轮子档案。" + +#: ../../source/overview.rst:140 +msgid "" +"Python and PyPI make it easy to upload both wheels and sdists together. " +"Just follow the :doc:`tutorials/packaging-projects` tutorial." +msgstr "" +"Python 和 PyPI 让我们很容易同时上传 wheel 和 sdists。" +"只要按照 :doc:`tutorials/packaging-projects` 的教程就可以了。" + +#: ../../source/overview.rst:148 +msgid "A summary of Python's packaging capabilities for tools and libraries." +msgstr "对 Python 的工具和库的打包能力的总结。" + +#: ../../source/overview.rst:148 +msgid "" +"Python's recommended built-in library and tool packaging technologies. " +"Excerpted from `The Packaging Gradient (2017) " +"`_." +msgstr "" +"Python 推荐的内置库和工具打包技术。" +"摘自 `包装梯度(2017) `_。" + +#: ../../source/overview.rst:155 +msgid "Packaging Python applications" +msgstr "包装 Python 应用程序" + +#: ../../source/overview.rst:157 +msgid "" +"So far we've only discussed Python's native distribution tools. Based on " +"our introduction, you would be correct to infer these built-in approaches" +" only target environments which have Python, and an audience who knows " +"how to install Python packages." +msgstr "" +"到目前为止,我们只讨论了 Python 的本地发布工具。" +"根据我们的介绍,你可以正确地推断出这些内置的方法只针对有 Python 的环境," +"以及知道如何安装 Python 包的受众。" + +#: ../../source/overview.rst:162 +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:166 +msgid "" +"Python's native packaging is mostly built for distributing reusable code," +" called libraries, between developers. You can piggyback **tools**, or " +"basic applications for developers, on top of Python's library packaging, " +"using technologies like :doc:`setuptools entry_points " +"`." +msgstr "" +"Python 的原生包装主要是为在开发者之间分发可重用的代码而建立的,称为库。" +"你可以把 **工具**,或开发人员的基本应用,放在 Python 的库包装之上," +"使用像 :doc:`setuptools entry_points ` 这样的技术。" + +#: ../../source/overview.rst:172 +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:176 +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:181 +msgid "Depending on a framework" +msgstr "取决于框架" + +#: ../../source/overview.rst:183 +msgid "" +"Some types of Python applications, like web site backends and other " +"network services, are common enough that they have frameworks to enable " +"their development and packaging. Other types of applications, like " +"dynamic web frontends and mobile clients, are complex enough to target " +"that a framework becomes more than a convenience." +msgstr "" +"某些类型的Python应用程序,如网站后端和其他网络服务,已经足够普遍,以至于它们有框架来实现其开发和打包。" +"其他类型的应用程序,如动态 Web 前端和移动客户端,足够复杂,以至于框架变得不仅仅是一种便利。" + +#: ../../source/overview.rst:189 +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:195 +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:199 +msgid "Service platforms" +msgstr "服务平台" + +#: ../../source/overview.rst:201 +msgid "" +"If you're developing for a \"Platform-as-a-Service\" or \"PaaS\" like " +"Heroku or Google App Engine, you are going to want to follow their " +"respective packaging guides." +msgstr "" +"如果你正在为 Heroku 或 Google App Engine 这样的 \"平台即服务\" 或 \"PaaS\" 进行开发," +"你将会想要遵循它们各自的打包指南。" + +#: ../../source/overview.rst:205 +msgid "" +"`Heroku `_" +msgstr "" + +#: ../../source/overview.rst:206 +msgid "`Google App Engine `_" +msgstr "" + +#: ../../source/overview.rst:207 +msgid "`PythonAnywhere `_" +msgstr "" + +#: ../../source/overview.rst:208 +msgid "`OpenShift `_" +msgstr "" + +#: ../../source/overview.rst:209 +msgid "\"Serverless\" frameworks like :gh:`Zappa `" +msgstr "" + +#: ../../source/overview.rst:211 +msgid "" +"In all these setups, the platform takes 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:216 +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:220 +msgid "Web browsers and mobile applications" +msgstr "网络浏览器和移动应用程序" + +#: ../../source/overview.rst:222 +msgid "" +"Python's steady advances are leading it into new spaces. These days you " +"can write a mobile app or web application frontend in Python. While the " +"language may be familiar, the packaging and deployment practices are " +"brand new." +msgstr "" +"Python 的稳步发展正引领它进入新的空间。" +"如今,你可以用 Python 编写一个移动应用或网络应用前端。" +"虽然语言可能是熟悉的,但打包和部署的做法是全新的"。 + +#: ../../source/overview.rst:227 +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:231 +msgid "`Kivy `_" +msgstr "" + +#: ../../source/overview.rst:232 +msgid "`Beeware `_" +msgstr "" + +#: ../../source/overview.rst:233 +msgid "`Brython `_" +msgstr "" + +#: ../../source/overview.rst:234 +msgid "`Flexx `_" +msgstr "" + +#: ../../source/overview.rst:236 +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:241 +msgid "Depending on a pre-installed Python" +msgstr "取决于预装的 Python" + +#: ../../source/overview.rst:243 +msgid "" +"Pick an arbitrary computer, and depending on the context, there's a very " +"good chance Python is already installed. Included by default in most " +"Linux and Mac operating systems for many years now, you can reasonably " +"depend on Python preexisting in your data centers or on the personal " +"machines of developers and data scientists." +msgstr "" +"挑选一台任意的计算机,根据环境,很有可能已经安装了 Python。" +"多年来,大多数 Linux 和 Mac 操作系统都默认包含了 Python," +"你可以合理地依赖 Python 预先存在于你的数据中心或开发者和数据科学家的个人机器上。" + +#: ../../source/overview.rst:249 +msgid "Technologies which support this model:" +msgstr "支持这种模式的技术:" + +#: ../../source/overview.rst:251 +msgid ":gh:`PEX ` (Python EXecutable)" +msgstr "" + +#: ../../source/overview.rst:252 +msgid "" +":doc:`zipapp ` (does not help manage dependencies," +" requires Python 3.5+)" +msgstr "" + +#: ../../source/overview.rst:253 +msgid ":gh:`shiv ` (requires Python 3)" +msgstr "" + +#: ../../source/overview.rst:255 +msgid "" +"Of all the approaches here, depending on a pre-installed Python relies " +"the most on the target environment. Of course, this also makes for the " +"smallest package, as small as single-digit megabytes, or even kilobytes." +msgstr "" +"在这里的所有方法中,依靠预装的 Python 对目标环境的依赖性最大。" +"当然,这也使得软件包最小,小到个位数的兆字节,甚至是千字节。" + +#: ../../source/overview.rst:260 +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:267 +msgid "Depending on a separate software distribution ecosystem" +msgstr "依赖于独立的软件分发生态系统" + +#: ../../source/overview.rst:269 +msgid "" +"For a long time many operating systems, including Mac and Windows, lacked" +" built-in package management. Only recently did these OSes gain so-called" +" \"app stores\", but even those focus on consumer applications and offer " +"little for developers." +msgstr "" +"很长一段时间以来,许多操作系统,包括 Mac 和 Windows,都缺乏内置的软件包管理。" +"直到最近,这些操作系统才获得了所谓的 \"应用商店\"," +"但即使是那些专注于消费者的应用,也没有为开发者提供什么。" + +#: ../../source/overview.rst:274 +msgid "" +"Developers long sought remedies, and in this struggle, emerged with their" +" own package management solutions, such as `Homebrew " +"`_. The most relevant alternative for Python developers" +" is a package ecosystem called `Anaconda " +"`_. " +"Anaconda is built around Python and is increasingly common in academic, " +"analytical, and other data-oriented environments, even making its way " +"`into server-oriented environments " +"`_." +msgstr "" +"开发者长期以来一直在寻求补救措施,在这场斗争中,出现了自己的软件包管理解决方案," +"如 `Homebrew `_。" +"对于 Python 开发者来说,最相关的替代方案是一个名为 " +"`Anaconda `_ 的软件包生态系统。" +"Anaconda 是围绕 Python 建立的,在学术、分析和其他面向数据的环境中越来越普遍," +"甚至可以 `进入面向服务器的环境 " +"`_。" + +#: ../../source/overview.rst:284 +msgid "Instructions on building and publishing for the Anaconda ecosystem:" +msgstr "关于为 Anaconda 生态系统建立和发布的说明:" + +#: ../../source/overview.rst:286 +msgid "" +"`Building libraries and applications with conda " +"`_" +msgstr "" +"`用 conda 构建库和应用程序 " +"`_" + +#: ../../source/overview.rst:287 +msgid "" +"`Transitioning a native Python package to Anaconda " +"`_" +msgstr "" +"`将一个本地 Python 包过渡到 Anaconda " +"`_" + +#: ../../source/overview.rst:289 +msgid "" +"A similar model involves installing an alternative Python distribution, " +"but does not support arbitrary operating system-level packages:" +msgstr "" +"类似的模式包括安装另一个 Python 发行版,但不支持任意的操作系统级软件包:" + +#: ../../source/overview.rst:293 +msgid "`ActiveState ActivePython `_" +msgstr "" + +#: ../../source/overview.rst:294 +msgid "`WinPython `_" +msgstr "" + +#: ../../source/overview.rst:299 +msgid "Bringing your own Python executable" +msgstr "带来你自己的 Python 可执行文件" + +#: ../../source/overview.rst:301 +msgid "" +"Computing as we know it is defined by the ability to execute programs. " +"Every operating system natively supports one or more formats of program " +"they can natively execute." +msgstr "" +"我们所知道的计算是由执行程序的能力来定义的。" +"每个操作系统都原生支持一种或多种他们可以原生执行的程序格式。" + +#: ../../source/overview.rst:305 +msgid "" +"There are many techniques and technologies which turn your Python program" +" into one of these formats, most of which involve embedding the Python " +"interpreter and any other dependencies into a single executable file." +msgstr "" +"有许多技术和工艺可以把你的 Python 程序变成这些格式之一," +"其中大多数涉及到把 Python 解释器和任何其他依赖性嵌入到一个可执行文件中。" + +#: ../../source/overview.rst:310 +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:314 +msgid "A selection of Python freezers:" +msgstr "Python 冻结的选择:" + +#: ../../source/overview.rst:316 +msgid "`pyInstaller `_ - Cross-platform" +msgstr "" + +#: ../../source/overview.rst:317 +msgid "" +"`cx_Freeze `_ - Cross-" +"platform" +msgstr "" + +#: ../../source/overview.rst:318 +msgid "" +"`constructor `_ - For command-line " +"installers" +msgstr "" + +#: ../../source/overview.rst:319 +msgid "`py2exe `_ - Windows only" +msgstr "" + +#: ../../source/overview.rst:320 +msgid "`py2app `_ - Mac only" +msgstr "" + +#: ../../source/overview.rst:321 +msgid "`osnap `_ - Windows and Mac" +msgstr "" + +#: ../../source/overview.rst:322 +msgid "`pynsist `_ - Windows only" +msgstr "" + +#: ../../source/overview.rst:324 +msgid "" +"Most of the above imply single-user deployments. For multi-component " +"server applications, see :gh:`Chef Omnibus `." +msgstr "" +"上述大部分内容都意味着单用户部署。" +"对于多组件的服务器应用程序,请参阅 " +":gh:`Chef Omnibus `。" + +#: ../../source/overview.rst:330 +msgid "Bringing your own userspace" +msgstr "携带自己的用户空间" + +#: ../../source/overview.rst:332 +msgid "" +"An increasing number of operating systems -- including Linux, Mac OS, and" +" Windows -- can be set up to run applications packaged as lightweight " +"images, using a relatively modern arrangement often referred to as " +"`operating-system-level virtualization `_, or *containerization*." +msgstr "" +"越来越多的操作系统 -- 包括 Linux、Mac OS 和 Windows -- " +"可以被设置为运行打包成轻量级镜像的应用程序,使用一种相对现代的安排," +"通常被称为 `操作系统级虚拟化 " +"`_,或 *容器化*。" + +#: ../../source/overview.rst:339 +msgid "" +"These techniques are mostly Python agnostic, because they package whole " +"OS filesystems, not just Python or Python packages." +msgstr "" +"这些技术大多与 Python 无关,因为它们打包整个操作系统文件系统," +"而不仅仅是 Python 或 Python 包。" + +#: ../../source/overview.rst:342 +msgid "" +"Adoption is most extensive among Linux servers, where the technology " +"originated and where the technologies below work best:" +msgstr "" +"在 Linux 服务器中的采用最为广泛,那里是技术的发源地,也是下面这些技术效果最好的地方:" + +#: ../../source/overview.rst:345 +msgid "`AppImage `_" +msgstr "" + +#: ../../source/overview.rst:346 +msgid "`Docker `_" +msgstr "" + +#: ../../source/overview.rst:347 +msgid "`Flatpak `_" +msgstr "" + +#: ../../source/overview.rst:348 +msgid "`Snapcraft `_" +msgstr "" + +#: ../../source/overview.rst:351 +msgid "Bringing your own kernel" +msgstr "自带内核" + +#: ../../source/overview.rst:353 +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:358 +msgid "" +"These techniques are mostly reserved for larger scale deployments in data" +" centers, though certain complex applications can benefit from this " +"packaging. Technologies are Python agnostic, and include:" +msgstr "" +"这些技术大多保留给数据中心的大规模部署,尽管某些复杂的应用可以从这种包装中受益。" +"技术是与 Python 无关的,包括:" + +#: ../../source/overview.rst:362 +msgid "`Vagrant `_" +msgstr "" + +#: ../../source/overview.rst:363 +msgid "" +"`VHD `_, `AMI " +"`_, and :doc:`other " +"formats `" +msgstr "" + +#: ../../source/overview.rst:364 +msgid "" +"`OpenStack `_ - A cloud " +"management system in Python, with extensive VM support" +msgstr "" + +#: ../../source/overview.rst:367 +msgid "Bringing your own hardware" +msgstr "自带硬件" + +#: ../../source/overview.rst:369 +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:373 +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:377 +msgid "" +"Embed your code on an :gh:`Adafruit `, " +"`MicroPython `_, or more-powerful hardware " +"running Python, then ship it to the datacenter or your users' homes. They" +" plug and play, and you can call it a day." +msgstr "" +"将你的代码嵌入到 :gh:`Adafruit `、" +"`MicroPython `_ 或更强大的运行 Python 的硬件上," +"然后将其运送到数据中心或你的用户家中。他们即插即用,你就可以收工了。" + +#: ../../source/overview.rst:386 +msgid "A summary of technologies used to package Python applications." +msgstr "用于打包 Python 应用程序的技术总结。" + +#: ../../source/overview.rst:386 +msgid "The simplified gamut of technologies used to package Python applications." +msgstr "用于打包 Python 应用程序的简化技术范围。" + +#: ../../source/overview.rst:389 +msgid "What about..." +msgstr "那么 ......" + +#: ../../source/overview.rst:391 +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:395 +msgid "Operating system packages" +msgstr "操作系统包" + +#: ../../source/overview.rst:397 +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 "" +"正如上面的 :ref:`depending-on-a-separate-ecosystem` 中提到的,一些操作系统有自己的软件包管理器。" +"如果你非常确定你的目标操作系统,你可以直接依赖像 " +"`deb `_(用于 Debian,Ubuntu 等)" +"或 `RPM `_(用于 Red Hat,Fedora 等)的格式," +"并使用该内置软件包管理器来处理安装,甚至部署。" +"你甚至可以使用 `FPM `_ " +"从同一来源生成 deb 和 RPM。" + +#: ../../source/overview.rst:408 +msgid "" +"In most deployment pipelines, the OS package manager is just one piece of" +" the puzzle." +msgstr "" +"在大多数部署管道中,操作系统包管理器只是拼图中的一个部分。" + +#: ../../source/overview.rst:414 +msgid "" +":doc:`Virtualenvs ` have been an " +"indispensable tool for multiple generations of Python developer, but are " +"slowly fading from view, as they are being wrapped by higher-level tools." +" With packaging in particular, virtualenvs are used as a primitive in " +":doc:`the dh-virtualenv tool ` and `osnap " +"`_, both of which wrap virtualenvs in" +" a self-contained way." +msgstr "" +":doc:`Virtualenvs ` 一直是多代 Python 开发者不可或缺的工具," +"但正在慢慢淡出人们的视线,因为它们正在被更高级别的工具所包裹。" +" 特别是在打包方面,virtualenvs 在 :doc:`the dh-virtualenv tool ` " +"和 `osnap `_ 中被作为一种基本工具," +"这两个工具都以一种独立的方式打包了 virtualenvs。" + +#: ../../source/overview.rst:423 +msgid "" +"For production deployments, do not rely on running ``python -m pip " +"install`` from the Internet into a virtualenv, as one might do in a " +"development environment. The overview above is full of much better " +"solutions." +msgstr "" +"对于生产部署,不要依赖从互联网上运行 ``python -m pip install``," +"进入一个 virtualenv,就像人们在开发环境中可能做的那样。" +"上面的概述充满了更好的解决方案。" + +#: ../../source/overview.rst:428 +msgid "Security" +msgstr "安全性" + +#: ../../source/overview.rst:430 +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:433 +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:442 +msgid "Wrap up" +msgstr "总结一下吧" + +#: ../../source/overview.rst:444 +msgid "" +"Packaging in Python has a bit of a reputation for being a bumpy ride. " +"This impression is mostly a byproduct of Python's versatility. Once you " +"understand the natural boundaries between each packaging solution, you " +"begin to realize that the varied landscape is a small price Python " +"programmers pay for using one of the most balanced, flexible languages " +"available." +msgstr "" +"Python中的包装有一点名声,那就是一波三折。" +"这种印象主要是 Python 的多功能性的副产品。" +"一旦你理解了每个打包方案之间的自然界限,你就会开始意识到," +"不同的景观是 Python 程序员为使用最平衡、最灵活的语言之一而付出的小代价。" + +#: ../../source/specifications/binary-distribution-format.rst:6 +msgid "Binary distribution format" +msgstr "二进制分发格式" + +#: ../../source/specifications/binary-distribution-format.rst:8 +msgid "" +"The binary distribution format (:term:`wheel `) was originally " +"defined in :pep:`427`. The current version of the specification is here." +msgstr "" +"二进制分发格式(:term:`wheel `)最初在 :pep:`427` 中定义。" +"当前版本的规范在这里。" + +#: ../../source/specifications/binary-distribution-format.rst:13 +msgid "Abstract" +msgstr "摘要" + +#: ../../source/specifications/binary-distribution-format.rst:15 +msgid "This PEP describes a built-package format for Python called \"wheel\"." +msgstr "这个 PEP 描述了一种叫做 \"wheel\" 的 Python 内置包格式。" + +#: ../../source/specifications/binary-distribution-format.rst:17 +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:27 +msgid "PEP Acceptance" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:29 +msgid "" +"This PEP was accepted, and the defined wheel version updated to 1.0, by " +"Nick Coghlan on 16th February, 2013 [1]_" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:34 +msgid "Rationale" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:36 +msgid "" +"Python needs a package format that is easier to install than sdist. " +"Python's sdist packages are defined by and require the distutils and " +"setuptools build systems, running arbitrary code to build-and-install, " +"and re-compile, code just so it can be installed into a new virtualenv. " +"This system of conflating build-install is slow, hard to maintain, and " +"hinders innovation in both build systems and installers." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:43 +msgid "" +"Wheel attempts to remedy these problems by providing a simpler interface " +"between the build system and the installer. The wheel binary package " +"format frees installers from having to know about the build system, saves" +" time by amortizing compile time over many installations, and removes the" +" need to install a build system in the target environment." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:52 +msgid "Details" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:55 +msgid "Installing a wheel 'distribution-1.0-py32-none-any.whl'" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:57 +msgid "Wheel installation notionally consists of two phases:" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:59 +msgid "Unpack." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:61 +msgid "Parse ``distribution-1.0.dist-info/WHEEL``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:62 +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:64 +msgid "If Root-Is-Purelib == 'true', unpack archive into purelib (site-packages)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:66 +msgid "Else unpack archive into platlib (site-packages)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:68 +msgid "Spread." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:70 +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:72 +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)``. The " +"initially supported paths are taken from ``distutils.command.install``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:78 +msgid "" +"If applicable, update scripts starting with ``#!python`` to point to the " +"correct interpreter." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:80 +msgid "Update ``distribution-1.0.dist-info/RECORD`` with the installed paths." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:82 +msgid "Remove empty ``distribution-1.0.data`` directory." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:83 +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:87 +msgid "Recommended installer features" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:97 +msgid "Rewrite ``#!python``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:90 +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:96 +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:102 +msgid "Generate script wrappers." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:100 +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:105 +msgid "Recommended archiver features" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:112 +msgid "Place ``.dist-info`` at the end of the archive." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:108 +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:115 +msgid "File Format" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:118 +msgid "File name convention" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:120 +msgid "" +"The wheel filename is ``{distribution}-{version}(-{build tag})?-{python " +"tag}-{abi tag}-{platform tag}.whl``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:124 +msgid "distribution" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:124 +msgid "Distribution name, e.g. 'django', 'pyramid'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:127 +msgid "version" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:127 +msgid "Distribution version, e.g. 1.0." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:135 +msgid "build tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:130 +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:138 +msgid "language implementation and version tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:138 +msgid "E.g. 'py27', 'py2', 'py3'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:141 +msgid "abi tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:141 +msgid "E.g. 'cp33m', 'abi3', 'none'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:144 +msgid "platform tag" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:144 +msgid "E.g. 'linux_x86_64', 'any'." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:146 +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:151 +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:156 +msgid "Escaping and Unicode" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:158 +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:161 +msgid "" +"In distribution names, any run of ``-_.`` characters (HYPHEN-MINUS, LOW " +"LINE and FULL STOP) should be replaced with ``_`` (LOW LINE). This is " +"equivalent to :pep:`503` normalisation followed by replacing ``-`` with " +"``_``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:164 +msgid "" +"Version numbers should be normalised according to :pep:`440`. Normalised " +"version numbers cannot contain ``-``." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:166 +msgid "" +"The remaining components may not contain ``-`` characters, so no escaping" +" is necessary." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:169 +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:172 +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:176 +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:182 +msgid "File contents" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:184 +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:" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:188 +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:191 +msgid "``{distribution}-{version}.dist-info/`` contains metadata." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:192 +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``, ``include``, ``purelib``, ``platlib``)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:196 +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." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:200 +msgid "" +"``{distribution}-{version}.dist-info/METADATA`` is Metadata version 1.1 " +"or greater format metadata." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:202 +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:212 +msgid "``Wheel-Version`` is the version number of the Wheel specification." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:213 +msgid "" +"``Generator`` is the name and optionally the version of the software that" +" produced the archive." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:215 +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:218 +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:220 +msgid "``Build`` is the build number and is omitted if there is no build number." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:221 +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:224 +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:226 +msgid "Wheel does not contain setup.py or setup.cfg." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:228 +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:235 +#: ../../source/specifications/recording-installed-packages.rst:35 +msgid "The .dist-info directory" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:237 +msgid "" +"Wheel .dist-info directories include at a minimum METADATA, WHEEL, and " +"RECORD." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:239 +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:241 +msgid "WHEEL is the wheel metadata specific to a build of the package." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:242 +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:248 +msgid "PEP 376's INSTALLER and REQUESTED are not included in the archive." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:249 +msgid "RECORD.jws is used for digital signatures. It is not mentioned in RECORD." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:251 +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:254 +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:261 +msgid "The .data directory" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:263 +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:271 +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:277 +msgid "Signed wheel files" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:279 +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:290 +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:295 +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:302 +msgid "(The hash value is the same format used in RECORD.)" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:304 +msgid "" +"If RECORD.p7s is used, it must contain a detached S/MIME format signature" +" of RECORD." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:307 +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:312 +msgid "See" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:314 +msgid "https://self-issued.info/docs/draft-ietf-jose-json-web-signature.html" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:315 +msgid "https://self-issued.info/docs/draft-jones-jose-jws-json-serialization.html" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:316 +msgid "https://self-issued.info/docs/draft-ietf-jose-json-web-key.html" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:317 +msgid "https://self-issued.info/docs/draft-jones-jose-json-private-key.html" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:321 +msgid "Comparison to .egg" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:323 +msgid "" +"Wheel is an installation format; egg is importable. Wheel archives do " +"not need to include .pyc and are less tied to a specific Python version " +"or implementation. Wheel can install (pure Python) packages built with " +"previous versions of Python so you don't always have to wait for the " +"packager to catch up." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:328 +msgid "" +"Wheel uses .dist-info directories; egg uses .egg-info. Wheel is " +"compatible with the new world of Python packaging and the new concepts it" +" brings." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:331 +msgid "" +"Wheel has a richer file naming convention for today's multi-" +"implementation world. A single wheel archive can indicate its " +"compatibility with a number of Python language versions and " +"implementations, ABIs, and system architectures. Historically the ABI " +"has been specific to a CPython release, wheel is ready for the stable " +"ABI." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:337 +msgid "" +"Wheel is lossless. The first wheel implementation bdist_wheel always " +"generates egg-info, and then converts it to a .whl. It is also possible " +"to convert existing eggs and bdist_wininst distributions." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:341 +msgid "" +"Wheel is versioned. Every wheel file contains the version of the wheel " +"specification and the implementation that packaged it. Hopefully the next" +" migration can simply be to Wheel 2.0." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:344 +msgid "Wheel is a reference to the other Python." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:348 +msgid "FAQ" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:352 +msgid "Wheel defines a .data directory. Should I put all my data there?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:354 +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:363 +msgid "Why does wheel include attached signatures?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:365 +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:373 +msgid "Why does wheel allow JWS signatures?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:375 +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:381 +msgid "Why does wheel also allow S/MIME signatures?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:383 +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:386 +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:391 +msgid "What's the deal with \"purelib\" vs. \"platlib\"?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:393 +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:398 +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:403 +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:409 +msgid "Is it possible to import Python code directly from a wheel file?" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:411 +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:417 +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:426 +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:443 +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:450 +msgid "Changes" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:452 +msgid "Since :pep:`427`, this specification has changed as follows:" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:454 +msgid "" +"The rules on escaping in wheel filenames were revised, to bring them into" +" line with what popular tools actually do (February 2021)." +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:461 +msgid "" +"PEP acceptance (https://mail.python.org/pipermail/python-" +"dev/2013-February/124103.html)" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:466 +msgid "Appendix" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:468 +msgid "Example urlsafe-base64-nopad implementation::" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:482 +msgid "Copyright" +msgstr "" + +#: ../../source/specifications/binary-distribution-format.rst:484 +msgid "This document has been placed into the public domain." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:5 +msgid "Core metadata specifications" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:7 +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:10 +msgid "``Metadata-Version``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:11 +msgid "``Name``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:12 +msgid "``Version``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:14 +msgid "All the other fields are optional." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:16 +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:25 +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:30 +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:41 +msgid "Metadata-Version" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:45 +msgid "" +"Version of the file format; legal values are \"1.0\", \"1.1\", \"1.2\", " +"\"2.1\" and \"2.2\"." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:48 +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 :pep:`440`, the major version is the value" +" before the first dot)." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:54 +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:58 +#: ../../source/specifications/core-metadata.rst:80 +#: ../../source/specifications/core-metadata.rst:95 +#: ../../source/specifications/core-metadata.rst:155 +#: ../../source/specifications/core-metadata.rst:170 +#: ../../source/specifications/core-metadata.rst:208 +#: ../../source/specifications/core-metadata.rst:280 +#: ../../source/specifications/core-metadata.rst:284 +#: ../../source/specifications/core-metadata.rst:288 +#: ../../source/specifications/core-metadata.rst:292 +#: ../../source/specifications/core-metadata.rst:324 +#: ../../source/specifications/core-metadata.rst:344 +#: ../../source/specifications/core-metadata.rst:370 +#: ../../source/specifications/core-metadata.rst:388 +#: ../../source/specifications/core-metadata.rst:413 +#: ../../source/specifications/core-metadata.rst:435 +#: ../../source/specifications/core-metadata.rst:597 +#: ../../source/specifications/core-metadata.rst:617 +#: ../../source/specifications/core-metadata.rst:627 +msgid "Example::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:66 +msgid "Name" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:69 +msgid "Added additional restrictions on format from :pep:`508`" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:72 +msgid "" +"The name of the distribution. The name field is the primary identifier " +"for a distribution. A valid name consists only of ASCII letters and " +"numbers, period, underscore and hyphen. It must start and end with a " +"letter or number. Distribution names are limited to those which match the" +" following regex (run with ``re.IGNORECASE``)::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:88 +msgid "Version" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:92 +msgid "" +"A string containing the distribution's version number. This field must " +"be in the format specified in :pep:`440`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:101 +msgid "Dynamic (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:105 +msgid "" +"A string containing the name of another core metadata field. The field " +"names ``Name`` and ``Version`` may not be specified in this field." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:108 +msgid "" +"When found in the metadata of a source distribution, the following rules " +"apply:" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:111 +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:115 +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:118 +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:122 +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:127 +msgid "Full details of the semantics of ``Dynamic`` are described in :pep:`643`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:131 +msgid "Platform (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:135 +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:146 +msgid "Supported-Platform (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:150 +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:164 +msgid "Summary" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:168 +msgid "A one-line summary of what the distribution does." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:188 +msgid "This field may be specified in the message body instead." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:191 +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:196 +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:202 +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:219 +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:223 +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:232 +msgid "Description-Content-Type" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:236 +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:239 +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:252 +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:258 +msgid "Format::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:262 +msgid "The ``type/subtype`` part has only a few legal values:" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:264 +msgid "``text/plain``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:265 +msgid "``text/x-rst``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:266 +msgid "``text/markdown``" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:268 +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:272 +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:277 +msgid "``GFM`` for :rfc:`Github-flavored Markdown <7764#section-3.2>`" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:278 +msgid "``CommonMark`` for :rfc:`CommonMark <7764#section-3.5>`" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:296 +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:300 +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:304 +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:308 +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:317 +msgid "Keywords" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:321 +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:330 +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:338 +msgid "Home-page" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:342 +msgid "A string containing the URL for the distribution's home page." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:350 +msgid "Download-URL" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:354 +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:363 +msgid "Author" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:367 +msgid "" +"A string containing the author's name at a minimum; additional contact " +"information may be provided." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:380 +msgid "Author-email" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:384 +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:392 +#: ../../source/specifications/core-metadata.rst:439 +msgid "" +"Per RFC-822, this field may contain multiple comma-separated e-mail " +"addresses::" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:402 +msgid "Maintainer" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:406 +msgid "" +"A string containing the maintainer's name at a minimum; additional " +"contact information may be provided." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:409 +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:423 +msgid "Maintainer-email" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:427 +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:431 +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:449 +msgid "License" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:453 +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:473 +msgid "Classifier (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:477 +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:482 +#: ../../source/specifications/core-metadata.rst:571 +#: ../../source/specifications/core-metadata.rst:688 +#: ../../source/specifications/core-metadata.rst:712 +msgid "This field may be followed by an environment marker after a semicolon." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:493 +msgid "Requires-Dist (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:496 +#: ../../source/specifications/core-metadata.rst:558 +#: ../../source/specifications/core-metadata.rst:660 +#: ../../source/specifications/core-metadata.rst:701 +msgid "" +"The field format specification was relaxed to accept the syntax used by " +"popular publishing tools." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:500 +msgid "" +"Each entry contains a string naming some other distutils project required" +" by this distribution." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:503 +msgid "The format of a requirement string contains from one to four parts:" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:505 +msgid "" +"A project name, in the same format as the ``Name:`` field. The only " +"mandatory part." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:507 +msgid "" +"A comma-separated list of 'extra' names. These are defined by the " +"required project, referring to specific features which may need extra " +"dependencies." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:510 +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:513 +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:516 +msgid "See :pep:`508` for full details of the allowed format." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:518 +msgid "" +"The project names should correspond to names as found on the `Python " +"Package Index`_." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:521 +msgid "" +"Version specifiers must follow the rules described in :doc:`version-" +"specifiers`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:535 +msgid "Requires-Python" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:539 +msgid "" +"This field specifies the Python version(s) that the distribution is " +"guaranteed to be compatible with. Installation tools may look at this " +"when picking which version of a project to install." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:543 +msgid "The value must be in the format specified in :doc:`version-specifiers`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:545 +msgid "This field cannot be followed by an environment marker." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:555 +msgid "Requires-External (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:562 +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:567 +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:573 +msgid "" +"Because they refer to non-Python software releases, version numbers for " +"this field are **not** required to conform to the format specified in " +":pep:`440`: they should correspond to the version scheme used by the " +"external dependency." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:578 +msgid "Notice that there is no particular rule on the strings to be used." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:590 +msgid "Project-URL (multiple-use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:594 +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:601 +msgid "The label is free text limited to 32 characters." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:609 +msgid "Provides-Extra (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:613 +msgid "" +"A string containing the name of an optional feature. Must be a valid " +"Python identifier. May be used to make a dependency conditional on " +"whether the optional feature has been requested." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:622 +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:632 +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:636 +msgid "" +"It is legal to specify ``Provides-Extra:`` without referencing it in any " +"``Requires-Dist:``." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:641 +msgid "Rarely Used Fields" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:643 +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:648 +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:657 +msgid "Provides-Dist (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:664 +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:669 +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:676 +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:684 +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:698 +msgid "Obsoletes-Dist (multiple use)" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:705 +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:709 +msgid "" +"Version declarations can be supplied. Version numbers must be in the " +"format specified in :doc:`version-specifiers`." +msgstr "" + +#: ../../source/specifications/core-metadata.rst:714 +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:727 +msgid "reStructuredText markup: https://docutils.sourceforge.io/" +msgstr "" + +#: ../../source/specifications/core-metadata.rst:732 +msgid "RFC 822 Long Header Fields: :rfc:`822#section-3.1.1`" +msgstr "" + +#: ../../source/specifications/declaring-build-dependencies.rst:6 +msgid "Declaring build system dependencies" +msgstr "" + +#: ../../source/specifications/declaring-build-dependencies.rst:8 +msgid "" +"`pyproject.toml` is a build system independent file format defined in " +":pep:`518` that projects may provide in order to declare any Python level" +" dependencies that must be installed in order to run the project's build " +"system successfully." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:5 +msgid "Declaring project metadata" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:7 +msgid "" +":pep:`621` specifies how to write a project's :ref:`core metadata ` in a ``pyproject.toml`` file for packaging-related tools to " +"consume. It defines the following specification as the canonical source " +"for the format used." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:12 +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. Dynamic metadata is listed via the " +"``dynamic`` field (defined later in this specification) and represents " +"metadata that a tool will later provide." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:18 +msgid "" +"The fields defined in this specification MUST be in a table named " +"``[project]`` in ``pyproject.toml``. No tools may add fields to this " +"table which are not defined by this specification. For tools wishing to " +"store their own settings in ``pyproject.toml``, they may use the " +"``[tool]`` table as defined in the :ref:`build dependency declaration " +"specification `. The lack of a " +"``[project]`` table implicitly means the build back-end will dynamically " +"provide all fields." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:27 +msgid "The only fields required to be statically defined are:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:31 +msgid "" +"The fields which are required but may be specified *either* statically or" +" listed as dynamic are:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:36 +msgid "" +"All other fields are considered optional and my be specified statically, " +"listed as dynamic, or left unspecified." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:43 +#: ../../source/specifications/declaring-project-metadata.rst:56 +#: ../../source/specifications/declaring-project-metadata.rst:68 +#: ../../source/specifications/declaring-project-metadata.rst:117 +msgid "TOML_ type: string" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:44 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Name " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:47 +msgid "The name of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:49 +msgid "" +"Tools SHOULD normalize this name, as specified by :pep:`503`, as soon as " +"it is read for internal consistency." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:57 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Version " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:60 +msgid "The version of the project as supported by :pep:`440`." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:62 +msgid "Users SHOULD prefer to specify already-normalized versions." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:69 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Summary " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:72 +msgid "The summary description of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:76 +msgid "``readme``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:78 +msgid "TOML_ type: string or table" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:79 +msgid "" +"Corresponding :ref:`core metadata ` field: " +":ref:`Description ` and :ref:`Description-" +"Content-Type `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:83 +msgid "The full description of the project (i.e. the README)." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:85 +msgid "" +"The field 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 field as " +"``dynamic``. For all unrecognized suffixes when a content-type is not " +"provided, tools MUST raise an error." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:96 +msgid "" +"The ``readme`` field 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/declaring-project-metadata.rst:103 +msgid "" +"A table specified in the ``readme`` field also has a ``content-type`` " +"field 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 field 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/declaring-project-metadata.rst:115 +msgid "``requires-python``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:118 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Python `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:121 +msgid "The Python version requirements of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:127 +msgid "TOML_ type: table" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:128 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`License " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:131 +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 "" + +#: ../../source/specifications/declaring-project-metadata.rst:140 +msgid "``authors``/``maintainers``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:142 +msgid "TOML_ type: Array of inline tables with string keys and values" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:143 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Author " +"`, :ref:`Author-email `, :ref:`Maintainer `, and :ref" +":`Maintainer-email `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:149 +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/declaring-project-metadata.rst:154 +msgid "" +"The \"maintainers\" field is similar to \"authors\" in that its exact " +"meaning is open to interpretation." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:157 +msgid "" +"These fields 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." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:163 +msgid "" +"Using the data to fill in :ref:`core metadata ` is as " +"follows:" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:166 +msgid "" +"If only ``name`` is provided, the value goes in :ref:`Author ` or :ref:`Maintainer ` as " +"appropriate." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:169 +msgid "" +"If only ``email`` is provided, the value goes in :ref:`Author-email " +"` or :ref:`Maintainer-email ` as appropriate." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:173 +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/declaring-project-metadata.rst:177 +msgid "Multiple values should be separated by commas." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:183 +#: ../../source/specifications/declaring-project-metadata.rst:193 +msgid "TOML_ type: array of strings" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:184 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Keywords " +"`" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:187 +msgid "The keywords for the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:194 +msgid "" +"Corresponding :ref:`core metadata ` field: " +":ref:`Classifier `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:197 +msgid "Trove classifiers which apply to the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:201 +msgid "``urls``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:203 +msgid "TOML_ type: table with keys and values of strings" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:204 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Project-" +"URL `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:207 +msgid "" +"A table of URLs where the key is the URL label and the value is the URL " +"itself." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:212 +msgid "Entry points" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:214 +msgid "" +"TOML_ type: table (``[project.scripts]``, ``[project.gui-scripts]``, and " +"``[project.entry-points]``)" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:216 +msgid ":ref:`Entry points specification `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:218 +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/declaring-project-metadata.rst:224 +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/declaring-project-metadata.rst:228 +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/declaring-project-metadata.rst:234 +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/declaring-project-metadata.rst:242 +msgid "``dependencies``/``optional-dependencies``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:244 +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/declaring-project-metadata.rst:247 +msgid "" +"Corresponding :ref:`core metadata ` field: :ref:`Requires-" +"Dist ` and :ref:`Provides-Extra `" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:251 +msgid "The (optional) dependencies of the project." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:253 +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/declaring-project-metadata.rst:258 +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/declaring-project-metadata.rst:269 +msgid "``dynamic``" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:271 +msgid "TOML_ type: array of string" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:272 +msgid "A corresponding :ref:`core metadata ` field does not exist" +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:275 +msgid "" +"Specifies which fields 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/declaring-project-metadata.rst:281 +msgid "" +"A build back-end MUST honour statically-specified metadata (which means " +"the metadata did not list the field in ``dynamic``)." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:283 +msgid "" +"A build back-end MUST raise an error if the metadata specifies ``name`` " +"in ``dynamic``." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:285 +msgid "" +"If the :ref:`core metadata ` specification lists a field " +"as \"Required\", then the metadata MUST specify the field statically or " +"list it in ``dynamic`` (build back-ends MUST raise an error otherwise, " +"i.e. it should not be possible for a required field to not be listed " +"somehow in the ``[project]`` table)." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:290 +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 field " +"later." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:294 +msgid "" +"Build back-ends MUST raise an error if the metadata specifies a field " +"statically as well as being listed in ``dynamic``." +msgstr "" + +#: ../../source/specifications/declaring-project-metadata.rst:296 +msgid "" +"If the metadata does not list a field 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/declaring-project-metadata.rst:300 +msgid "" +"Build back-ends MUST raise an error if the metadata specifies a field 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/dependency-specifiers.rst:6 +msgid "Dependency specifiers" +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:8 +msgid "" +"The dependency specifier format used to declare a dependency on another " +"component is defined in :pep:`508`." +msgstr "" + +#: ../../source/specifications/dependency-specifiers.rst:11 +msgid "" +"The environment markers section in this PEP supersedes the environment " +"markers section in :pep:`345`." +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 :file" +":`*.dist-info` directory of an installed distribution, to record the " +"Direct URL Origin of the distribution. The layout of this file was " +"originally specified in :pep:`610` and is formally documented here." +msgstr "" + +#: ../../source/specifications/direct-url.rst:17 +msgid "Specification" +msgstr "" + +#: ../../source/specifications/direct-url.rst:19 +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:23 +#: ../../source/specifications/recording-installed-packages.rst:206 +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:26 +msgid "" +"This JSON file MUST be a dictionary, compliant with :rfc:`8259` and UTF-8" +" encoded." +msgstr "" + +#: ../../source/specifications/direct-url.rst:28 +msgid "" +"If present, it MUST contain at least two fields. The first one is " +"``url``, with type ``string``. 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 archives 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.rst:35 +msgid "" +"``url`` MUST be stripped of any sensitive authentication information, for" +" security reasons." +msgstr "" + +#: ../../source/specifications/direct-url.rst:38 +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.rst:44 +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``." +msgstr "" + +#: ../../source/specifications/direct-url.rst:48 +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.rst:51 +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.rst:57 +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) " +"to install." +msgstr "" + +#: ../../source/specifications/direct-url.rst:60 +msgid "" +"A ``commit_id`` key (type ``string``) MUST be present, containing the " +"exact commit/revision number that was installed. If the VCS supports " +"commit-hash based revision identifiers, such commit-hash MUST be used as " +"``commit_id`` in order to reference the immutable version of the source " +"code that was installed." +msgstr "" + +#: ../../source/specifications/direct-url.rst:67 +msgid "" +"When ``url`` refers to a source archive or a wheel, the ``archive_info`` " +"key MUST be present as a dictionary with the following key:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:70 +msgid "" +"A ``hash`` key (type ``string``) SHOULD be present, with value ``=``. It is RECOMMENDED that only hashes which " +"are unconditionally provided by the latest version of the standard " +"library's ``hashlib`` module be used for source archive hashes. At time " +"of writing, that list consists of 'md5', 'sha1', 'sha224', 'sha256', " +"'sha384', and 'sha512'." +msgstr "" + +#: ../../source/specifications/direct-url.rst:77 +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.rst:80 +msgid "" +"``editable`` (type: ``boolean``): ``true`` if the distribution was " +"installed in editable mode, ``false`` otherwise. If absent, default to " +"``false``." +msgstr "" + +#: ../../source/specifications/direct-url.rst:83 +msgid "" +"When ``url`` refers to a local directory, it MUST have the ``file`` sheme" +" 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.rst:90 +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:95 +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.rst:101 +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:109 +msgid "Registered VCS" +msgstr "" + +#: ../../source/specifications/direct-url.rst:111 +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.rst:121 +msgid "Git" +msgstr "" + +#: ../../source/specifications/direct-url.rst:123 +#: ../../source/specifications/direct-url.rst:155 +#: ../../source/specifications/direct-url.rst:178 +#: ../../source/specifications/direct-url.rst:201 +msgid "Home page" +msgstr "" + +#: ../../source/specifications/direct-url.rst:125 +msgid "https://git-scm.com/" +msgstr "" + +#: ../../source/specifications/direct-url.rst:127 +#: ../../source/specifications/direct-url.rst:159 +#: ../../source/specifications/direct-url.rst:182 +#: ../../source/specifications/direct-url.rst:205 +msgid "vcs command" +msgstr "" + +#: ../../source/specifications/direct-url.rst:129 +#: ../../source/specifications/direct-url.rst:133 +msgid "git" +msgstr "" + +#: ../../source/specifications/direct-url.rst:131 +#: ../../source/specifications/direct-url.rst:163 +#: ../../source/specifications/direct-url.rst:186 +#: ../../source/specifications/direct-url.rst:209 +msgid "``vcs`` field" +msgstr "" + +#: ../../source/specifications/direct-url.rst:135 +#: ../../source/specifications/direct-url.rst:167 +#: ../../source/specifications/direct-url.rst:190 +#: ../../source/specifications/direct-url.rst:213 +msgid "``requested_revision`` field" +msgstr "" + +#: ../../source/specifications/direct-url.rst:137 +msgid "" +"A tag name, branch name, Git ref, commit hash, shortened commit hash, or " +"other commit-ish." +msgstr "" + +#: ../../source/specifications/direct-url.rst:140 +#: ../../source/specifications/direct-url.rst:171 +#: ../../source/specifications/direct-url.rst:194 +#: ../../source/specifications/direct-url.rst:218 +msgid "``commit_id`` field" +msgstr "" + +#: ../../source/specifications/direct-url.rst:142 +msgid "A commit hash (40 hexadecimal characters sha1)." +msgstr "" + +#: ../../source/specifications/direct-url.rst:146 +msgid "" +"Installers 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.rst:153 +msgid "Mercurial" +msgstr "" + +#: ../../source/specifications/direct-url.rst:157 +msgid "https://www.mercurial-scm.org/" +msgstr "" + +#: ../../source/specifications/direct-url.rst:161 +#: ../../source/specifications/direct-url.rst:165 +msgid "hg" +msgstr "" + +#: ../../source/specifications/direct-url.rst:169 +msgid "A tag name, branch name, changeset ID, shortened changeset ID." +msgstr "" + +#: ../../source/specifications/direct-url.rst:173 +msgid "A changeset ID (40 hexadecimal characters)." +msgstr "" + +#: ../../source/specifications/direct-url.rst:176 +msgid "Bazaar" +msgstr "" + +#: ../../source/specifications/direct-url.rst:180 +msgid "https://bazaar.canonical.com" +msgstr "" + +#: ../../source/specifications/direct-url.rst:184 +#: ../../source/specifications/direct-url.rst:188 +msgid "bzr" +msgstr "" + +#: ../../source/specifications/direct-url.rst:192 +msgid "A tag name, branch name, revision id." +msgstr "" + +#: ../../source/specifications/direct-url.rst:196 +msgid "A revision id." +msgstr "" + +#: ../../source/specifications/direct-url.rst:199 +msgid "Subversion" +msgstr "" + +#: ../../source/specifications/direct-url.rst:203 +msgid "https://subversion.apache.org/" +msgstr "" + +#: ../../source/specifications/direct-url.rst:207 +#: ../../source/specifications/direct-url.rst:211 +msgid "svn" +msgstr "" + +#: ../../source/specifications/direct-url.rst:215 +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.rst:220 +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.rst:228 +msgid "Example direct_url.json" +msgstr "" + +#: ../../source/specifications/direct-url.rst:230 +msgid "Source archive:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:241 +msgid "Git URL with tag and commit-hash:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:254 +msgid "Local directory:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:263 +msgid "Local directory installed in editable mode:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:276 +msgid "Example pip commands and their effect on direct_url.json" +msgstr "" + +#: ../../source/specifications/direct-url.rst:278 +msgid "Commands that generate a ``direct_url.json``:" +msgstr "" + +#: ../../source/specifications/direct-url.rst:280 +msgid "``pip install https://example.com/app-1.0.tgz``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:281 +msgid "``pip install https://example.com/app-1.0.whl``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:282 +msgid "" +"``pip install " +"\"git+https://example.com/repo/app.git#egg=app&subdirectory=setup\"``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:283 +msgid "``pip install ./app``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:284 +msgid "``pip install file:///home/user/app``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:285 +msgid "" +"``pip install --editable " +"\"git+https://example.com/repo/app.git#egg=app&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:289 +msgid "``pip install -e ./app``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:291 +msgid "Commands that *do not* generate a ``direct_url.json``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:293 +msgid "``pip install app``" +msgstr "" + +#: ../../source/specifications/direct-url.rst:294 +msgid "``pip install app --no-index --find-links https://example.com/``" +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 ``importlib.metadata``. It is now defined as a PyPA" +" interoperability specification in order to allow build tools other than " +"setuptools to publish ``importlib.metadata`` compatible entry point " +"metadata, and runtime libraries other than ``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 :pep:`376` for installed distributions, and in :pep:`427` " +"for wheels. The file uses the UTF-8 character encoding." +msgstr "" + +#: ../../source/specifications/entry-points.rst:87 +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:97 +msgid "" +"The entry points file must always use ``=`` to delimit names from values " +"(whereas configparser also allows using ``:``)." +msgstr "" + +#: ../../source/specifications/entry-points.rst:100 +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:104 +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``). 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:112 +msgid "For example::" +msgstr "" + +#: ../../source/specifications/entry-points.rst:124 +msgid "Use for scripts" +msgstr "" + +#: ../../source/specifications/entry-points.rst:126 +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:134 +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:141 +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 ``sys.stdin``, " +"``sys.stdout`` and ``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:149 +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:154 +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/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.rst:13 +msgid "Package Distribution Metadata" +msgstr "" + +#: ../../source/specifications/index.rst:30 +msgid "Package Distribution File Formats" +msgstr "" + +#: ../../source/specifications/index.rst:40 +msgid "Package Index Interfaces" +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:12 +msgid "" +"The platform compatibility tagging model used for the ``wheel`` " +"distribution format is defined in :pep:`425`." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:16 +msgid "Platform tags for Windows" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:18 +msgid "" +"The scheme defined in :pep:`425` covers public distribution of wheel " +"files to systems running Windows." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:22 +msgid "Platform tags for macOS (Mac OS X)" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:24 +msgid "" +"The scheme defined in :pep:`425` covers public distribution of wheel " +"files to systems running macOS (previously known as Mac OS X)." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:28 +msgid "Platform tags for common Linux distributions" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:32 +msgid "" +"The scheme defined in :pep:`425` is insufficient for public distribution " +"of wheel files (and \\*nix wheel files in general) to Linux platforms, " +"due to the large ecosystem of Linux platforms and subtle differences " +"between them." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:36 +msgid "" +"Instead, :pep:`600` defines the ``manylinux`` standard, which 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:41 +msgid "" +"There were multiple iterations of the ``manylinux`` specification, each " +"representing the common subset of Linux platforms at a given point in " +"time:" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:44 +msgid "" +"``manylinux1`` (:pep:`513`) supports ``x86_64`` and ``i686`` " +"architectures, and is based on a compatible Linux platform from 2007." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:46 +msgid "" +"``manylinux2010`` (:pep:`571`) supports ``x86_64`` and ``i686`` " +"architectures. and updates the previous specification to be based on a " +"compatible Linux platform from 2010 instead." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:49 +msgid "" +"``manylinux2014`` (:pep:`599`) adds support for a number of additional " +"architectures (``aarch64``, ``armv7l``, ``ppc64``, ``ppc64le``, and " +"``s390x``) and updates the base platform to a compatible Linux platform " +"from 2014." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:54 +msgid "" +"``manylinux_x_y`` (:pep:`600`) supersedes all previous PEPs to define a " +"future-proof standard. It defines ``x`` and ``y`` as glibc major an minor" +" versions supported (e.g. ``manylinux_2_24`` should work on any distro " +"using glibc 2.24+). Previous tags are still supported for backward " +"compatibility." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:59 +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:65 +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:71 +msgid "Manylinux compatibility support" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:74 +msgid "" +"The ``manylinux2014`` specification is relatively new and is not yet " +"widely recognised by install tools." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:76 +msgid "" +"The ``manylinux_x_y`` specification is relatively new and is not yet " +"widely recognised by install tools." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:79 +msgid "" +"The following table shows the minimum versions of relevant projects to " +"support the various ``manylinux`` standards:" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "Tool" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux1``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux2010``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux2014``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:83 +msgid "``manylinux_x_y``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=8.1.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=19.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=19.3``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:85 +msgid "``>=20.3``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "auditwheel" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=1.0.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=2.0.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=3.0.0``" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:86 +msgid "``>=3.3.0`` [#]_" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:90 +msgid "Platform tags for other \\*nix platforms" +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:92 +msgid "" +"The scheme defined in :pep:`425` is not generally sufficient for public " +"distribution of wheel files to other \\*nix platforms. Efforts are " +"currently (albeit intermittently) under way to define improved " +"compatibility tagging schemes for AIX and for Alpine Linux." +msgstr "" + +#: ../../source/specifications/platform-compatibility-tags.rst:98 +msgid "Only support for ``manylinux_2_24`` has been added in auditwheel 3.3.0" +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`, and projects like :ref:`hatch` that" +" use it under the hood. 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:66 +msgid "" +"Twine's default configuration mimics a :file:`.pypirc` with repository " +"sections for PyPI and TestPyPI:" +msgstr "" + +#: ../../source/specifications/pypirc.rst:82 +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:86 +msgid "Using a PyPI token" +msgstr "" + +#: ../../source/specifications/pypirc.rst:88 +msgid "" +"To set your `API token`_ for PyPI, you can create a :file:`$HOME/.pypirc`" +" similar to:" +msgstr "" + +#: ../../source/specifications/pypirc.rst:97 +msgid "" +"For :ref:`TestPyPI `, add a ``[testpypi]`` section, " +"using the API token from your TestPyPI account." +msgstr "" + +#: ../../source/specifications/pypirc.rst:103 +msgid "Using another package index" +msgstr "" + +#: ../../source/specifications/pypirc.rst:105 +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:132 +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/recording-installed-packages.rst:5 +msgid "Recording installed projects" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:7 +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:12 +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:21 +msgid "History and change workflow" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:23 +msgid "" +"The metadata described here was first specified in :pep:`376`, and later " +"amended in :pep:`627`. It was formerly known as *Database of Installed " +"Python Distributions*. Further amendments (except trivial language or " +"typography fixes) must be made through the PEP process (see :pep:`1`)." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:29 +msgid "" +"While this document is the normative specification, these PEPs that " +"introduce changes to it may include additional information such as " +"rationales and backwards compatibility considerations." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:37 +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:41 +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 :pep:`PEP 503 <503#normalized-names>` and " +":pep:`PEP 440 <440#normalization>` for the definition of normalization " +"for each field respectively), and replace dash (``-``) characters with " +"underscore (``_``) chacaters, 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:50 +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:60 +msgid "" +"The ``.dist-info`` directory's name is formatted to unambigiously " +"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 " +"distrubution information." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:69 +msgid "" +"This ``.dist-info`` directory can contain these files, described in " +"detail below:" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:72 +msgid "``METADATA``: contains project metadata" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:73 +msgid "``RECORD``: records the list of installed files." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:74 +msgid "``INSTALLER``: records the name of the tool used to install the project." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:76 +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:82 +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:87 +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:94 +msgid "The METADATA file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:96 +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:99 +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:105 +msgid "The RECORD file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:107 +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:110 +msgid "" +"The CSV dialect must be readable with the default ``reader`` of Python's " +"``csv`` module:" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:113 +msgid "field delimiter: ``,`` (comma)," +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:114 +msgid "quoting char: ``\"`` (straight double quote)," +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:115 +msgid "line terminator: either ``\\r\\n`` or ``\\n``." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:117 +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:120 +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:125 +msgid "" +"The *hash* is either an empty string or the name of a hash algorithm from" +" ``hashlib.algorithms_guaranteed``, followed by the equals character " +"``=`` and the digest of the file's contents, encoded with the urlsafe-" +"base64-nopad encoding (``base64.urlsafe_b64encode(digest)`` with trailing" +" ``=`` removed)." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:130 +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:133 +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:139 +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:146 +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:151 +msgid "Here is an example snippet of a possible ``RECORD`` file::" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:170 +msgid "" +"If the ``RECORD`` file is missing, tools that rely on ``.dist-info`` must" +" not atempt to uninstall or upgrade the package. (This 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:177 +msgid "The INSTALLER file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:179 +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:185 +msgid "The file can be terminated by zero or more ASCII whitespace characters." +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:187 +msgid "Here are examples of two possible ``INSTALLER`` files::" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:195 +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:201 +msgid "The direct_url.json file" +msgstr "" + +#: ../../source/specifications/recording-installed-packages.rst:203 +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:209 +msgid "Its detailed specification is at :ref:`direct-url`." +msgstr "" + +#: ../../source/specifications/simple-repository-api.rst:6 +msgid "Simple repository API" +msgstr "" + +#: ../../source/specifications/simple-repository-api.rst:8 +msgid "" +"The current interface for querying available package versions and " +"retrieving packages from an index server is defined in :pep:`503`, with " +"the addition of \"yank\" support (allowing a kind of file deletion) as " +"defined in :pep:`592` and specifying the interface version provided by an" +" index server in :pep:`629`." +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:24 +msgid "Source trees" +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:26 +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:34 +msgid "Source distribution file name" +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:36 +msgid "" +"The file name of a sdist is not currently standardised, although the *de " +"facto* form is ``{name}-{version}.tar.gz``, where ``{name}`` is the " +"canonicalized form of the project name (see :pep:`503` for the " +"canonicalization rules) with ``-`` characters replaced with ``_``, and " +"``{version}`` is the project version." +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:41 +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 +msgid "Source distribution file format" +msgstr "" + +#: ../../source/specifications/source-distribution-format.rst:47 +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:`declaring-build-" +"dependencies`, and a ``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:55 +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:58 +msgid "" +"The tarball should use the modern POSIX.1-2001 pax tar format, which " +"specifies UTF-8 based file names." +msgstr "" + +#: ../../source/specifications/version-specifiers.rst:6 +msgid "Version specifiers" +msgstr "" + +#: ../../source/specifications/version-specifiers.rst:8 +msgid "" +"Version numbering requirements and the semantics for specifying " +"comparisons between versions are defined in :pep:`440`." +msgstr "" + +#: ../../source/specifications/version-specifiers.rst:11 +msgid "" +"The version specifiers section in this PEP supersedes the version " +"specifiers section in :pep:`345`." +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:5 +msgid "Creating Documentation" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:7 +msgid "" +"This section covers the basics of how to create documentation using " +"`Sphinx`_ and host the documentation for free in `Read The Docs`_." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:14 +msgid "Installing Sphinx" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:15 +msgid "Use ``pip`` to install Sphinx:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:29 +msgid "" +"For other installation methods, see this :doc:`installation guide " +"` by Sphinx." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:33 +msgid "Getting Started With Sphinx" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:35 +msgid "" +"Create a ``docs`` directory inside your project to hold your " +"documentation:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:42 +msgid "Run ``sphinx-quickstart`` inside the ``docs`` directory:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:49 +msgid "" +"This sets up a source directory, walks you through some basic " +"configurations, and creates an ``index.rst`` file as well as a " +"``conf.py`` file." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:51 +msgid "" +"You can add some information about your project in ``index.rst``, then " +"build them:" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:57 +msgid "For more details on the build process, see this `guide`_ by Read The Docs." +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:62 +msgid "Other Sources" +msgstr "" + +#: ../../source/tutorials/creating-documentation.rst:64 +msgid "" +"For a more detailed guide on how to use Sphinx and reStructuredText, " +"please see this `documentation tutorial`_ on Hitchhiker's Guide to " +"Python." +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 to 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:28 +msgid "Requirements for Installing Packages" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:30 +msgid "" +"This section describes the steps to follow before installing other Python" +" packages." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:35 +msgid "Ensure you can run Python from the command line" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:37 +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:53 +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:57 +msgid "If you're a newcomer and you get an error like this:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:66 +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:72 +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:82 +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:87 +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:99 +msgid "Ensure you can run pip from the command line" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:101 +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:116 +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:123 +msgid "" +"If ``pip`` isn't already installed, then first try to bootstrap it from " +"the standard library:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:138 +msgid "If that still doesn't allow you to run ``python -m pip``:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:140 +msgid "" +"Securely Download `get-pip.py `_ " +"[1]_" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:143 +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:149 +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:158 +msgid "Ensure pip, setuptools, and wheel are up to date" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:160 +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:177 +msgid "Optionally, create a virtual environment" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:179 +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:196 +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:203 +msgid "Creating Virtual Environments" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:205 +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:211 +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:217 +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:221 +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:224 +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:228 +msgid "" +"Currently, there are two common tools for creating Python virtual " +"environments:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:230 +msgid "" +":doc:`venv ` is available by default in Python 3.3 " +"and later, and installs :ref:`pip` and :ref:`setuptools` into created " +"virtual environments in Python 3.4 and later." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:233 +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:238 +msgid "The basic usage is like so:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:240 +msgid "Using :doc:`venv `:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:256 +msgid "Using :ref:`virtualenv`:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:272 +msgid "" +"For more information, see the :doc:`venv ` docs or " +"the :doc:`virtualenv ` docs." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:275 +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:280 +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:290 +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:297 +msgid "Use pip for Installing" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:299 +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:305 +msgid "Installing from PyPI" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:307 +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 `. :pep:`440` contains a " +":pep:`full specification <440#version-specifiers>` of the currently " +"supported specifiers. Below are some examples." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:315 +msgid "To install the latest version of \"SomeProject\":" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:329 +msgid "To install a specific version:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:343 +msgid "To install greater than or equal to one version and less than another:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:358 +msgid "" +"To install a version that's :pep:`\"compatible\" <440#compatible-" +"release>` with a certain version: [4]_" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:373 +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:378 +msgid "Source Distributions vs Wheels" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:380 +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:386 +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:391 +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:399 +msgid "Upgrade an already installed ``SomeProject`` to the latest from PyPI." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:416 +msgid "Installing to the User Site" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:418 +msgid "" +"To install :term:`packages ` that are isolated to " +"the current user, use the ``--user`` flag:" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:433 +msgid "" +"For more information see the `User Installs " +"`_ section from " +"the pip docs." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:437 +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:440 +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:448 +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:454 +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:470 +msgid "" +"Install a list of requirements specified in a :ref:`Requirements File " +"`." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:486 +msgid "Installing from VCS" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:488 +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:510 +msgid "Installing from other Indexes" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:512 +msgid "Install from an alternate index" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:526 +msgid "" +"Search an additional index during install, in addition to :term:`PyPI " +"`" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:542 +msgid "Installing from a local src tree" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:545 +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:562 +msgid "You can also install normally from src" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:579 +msgid "Install a particular source archive file." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:593 +msgid "" +"Install from a local directory containing archives (and don't check " +":term:`PyPI `)" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:613 +msgid "Installing from other sources" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:615 +msgid "" +"To install from other data sources (for example Amazon S3 storage) you " +"can create a helper application that presents the data in a :pep:`503` " +"compliant index format, and use the ``--extra-index-url`` flag to direct " +"pip to use that index." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:627 +msgid "Installing Prereleases" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:629 +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:645 +msgid "Installing Setuptools \"Extras\"" +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:647 +msgid "Install `setuptools extras`_." +msgstr "" + +#: ../../source/tutorials/installing-packages.rst:667 +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:676 +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:681 +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 "" +"Developers of Python libraries, or of applications that support " +"distribution as Python libraries, should also consider the `poetry " +"`_ project as an alternative " +"dependency management solution." +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:30 +msgid "Installing Pipenv" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:32 +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:38 +msgid "Use ``pip`` to install Pipenv:" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:54 +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:65 +msgid "Installing packages for your project" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:67 +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:76 +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:112 +msgid "Using installed packages" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:114 +msgid "" +"Now that Requests is installed you can create a simple :file:`main.py` " +"file to use it:" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:125 +msgid "Then you can run this script using ``pipenv run``:" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:131 +msgid "You should get output similar to this:" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:137 +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:143 +#: ../../source/tutorials/packaging-projects.rst:594 +msgid "Next steps" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:145 +msgid "" +"Congratulations, you now know how to effectively manage dependencies and " +"development environments on a collaborative Python project! ✨ 🍰 ✨" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:148 +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:151 +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:160 +msgid "Other Tools for Application Dependency Management" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:162 +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 to see if one of them is a better fit:" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:166 +msgid "" +"`poetry `__ for a tool " +"comparable in scope to ``pipenv`` that focuses more directly on use cases" +" where the repository being managed is structured as a Python project " +"with a valid ``pyproject.toml`` file (by contrast, ``pipenv`` explicitly " +"avoids making the assumption that the application being worked on that's " +"depending on components from PyPI will itself support distribution as a " +"``pip``-installable Python package)." +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:172 +msgid "" +"`hatch `_ for opinionated coverage of even" +" more steps in the project management workflow (such as incrementing " +"versions, tagging releases, and creating new skeleton projects from " +"project templates)" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:175 +msgid "" +"`pip-tools `_ to build your own " +"custom workflow from lower level pieces like ``pip-compile`` and ``pip-" +"sync``" +msgstr "" + +#: ../../source/tutorials/managing-dependencies.rst:177 +msgid "" +"`micropipenv `_ is a " +"lightweight wrapper for pip to support 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/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." +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``. We " +"recommend following this tutorial as-is using this project, before " +"packaging your own project." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:41 +msgid "Create the following file structure locally:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:51 +msgid "" +":file:`__init__.py` is required to import the directory as a package, and" +" should be empty." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:54 +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:63 +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:67 +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:75 +msgid "Creating the package files" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:77 +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:95 +msgid "Creating a test directory" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:97 +msgid ":file:`tests/` is a placeholder for test files. Leave it empty for now." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:101 +msgid "Creating pyproject.toml" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:103 +msgid "" +":file:`pyproject.toml` tells build tools (like :ref:`pip` and " +":ref:`build`) what is required to build your project. This tutorial uses " +":ref:`setuptools`, so open :file:`pyproject.toml` and enter the following" +" content:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:117 +msgid "" +"``build-system.requires`` gives a list of packages that are needed to " +"build your package. Listing something here will *only* make it available " +"during the build, not after it is installed." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:121 +msgid "" +"``build-system.build-backend`` is the name of Python object that will be " +"used to perform the build. If you were to use a different build system, " +"such as :ref:`flit` or :ref:`poetry`, those would go here, and the " +"configuration details would be completely different than the " +":ref:`setuptools` configuration described below." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:127 +msgid "See :pep:`517` and :pep:`518` for background and details." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:131 +msgid "Configuring metadata" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:133 +msgid "There are two types of metadata: static and dynamic." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:135 +msgid "" +"Static metadata (:file:`setup.cfg`): guaranteed to be the same every " +"time. This is simpler, easier to read, and avoids many common errors, " +"like encoding errors." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:137 +msgid "" +"Dynamic metadata (:file:`setup.py`): possibly non-deterministic. Any " +"items that are dynamic or determined at install-time, as well as " +"extension modules or extensions to setuptools, need to go into " +":file:`setup.py`." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:141 +msgid "" +"Static metadata (:file:`setup.cfg`) should be preferred. Dynamic metadata" +" (:file:`setup.py`) should be used only as an escape hatch when " +"absolutely necessary. :file:`setup.py` used to be required, but can be " +"omitted with newer versions of setuptools and pip." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:148 +msgid "" +":file:`setup.cfg` is the configuration file for :ref:`setuptools`. It " +"tells setuptools about your package (such as the name and version) as " +"well as which code files to include. Eventually much of this " +"configuration may be able to move to :file:`pyproject.toml`." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:153 +msgid "" +"Open :file:`setup.cfg` and enter the following content. Change the " +"``name`` to include your username; this ensures that you have a unique " +"package name and that your package doesn't conflict with packages " +"uploaded by other people following this tutorial." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:185 +msgid "" +"There are a `variety of metadata and options " +"`_" +" supported here. This is in :doc:`configparser " +"` format; do not place quotes around values." +" This example package uses a relatively minimal set of ``metadata``:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:191 +#: ../../source/tutorials/packaging-projects.rst:286 +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.org. **Be sure to update this with " +"your username,** 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:196 +msgid "" +"``version`` is the package version. See :pep:`440` for more details on " +"versions. You can use ``file:`` or ``attr:`` directives to read from a " +"file or package attribute." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:199 +#: ../../source/tutorials/packaging-projects.rst:293 +msgid "" +"``author`` and ``author_email`` are used to identify the author of the " +"package." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:201 +#: ../../source/tutorials/packaging-projects.rst:295 +msgid "``description`` is a short, one-sentence summary of the package." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:202 +msgid "" +"``long_description`` is a detailed description of the package. This is " +"shown on the package detail page on the Python Package Index. In this " +"case, the long description is loaded from :file:`README.md` (which is a " +"common pattern) using the ``file:`` directive." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:206 +#: ../../source/tutorials/packaging-projects.rst:300 +msgid "" +"``long_description_content_type`` tells the index what type of markup is " +"used for the long description. In this case, it's Markdown." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:208 +#: ../../source/tutorials/packaging-projects.rst:302 +msgid "" +"``url`` is the URL for the homepage of the project. For many projects, " +"this will just be a link to GitHub, GitLab, Bitbucket, or similar code " +"hosting service." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:211 +#: ../../source/tutorials/packaging-projects.rst:305 +msgid "" +"``project_urls`` lets you list any number of extra links to show on PyPI." +" Generally this could be to documentation, issue trackers, etc." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:213 +#: ../../source/tutorials/packaging-projects.rst:307 +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/." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:221 +msgid "In the ``options`` category, we have controls for setuptools itself:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:223 +msgid "" +"``package_dir`` is a mapping of package names and directories. An empty " +"package name represents the \"root package\" --- the directory in the " +"project that contains all Python source files for the package --- so in " +"this case the ``src`` directory is designated the root package." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:227 +msgid "" +"``packages`` is a list of all Python :term:`import packages ` that should be included in the :term:`distribution package " +"`. Instead of listing each package manually, we can" +" use the ``find:`` directive to automatically discover all packages and " +"subpackages and ``options.packages.find`` to specify the ``package_dir`` " +"to use. In this case, the list of packages will be ``example_package`` as" +" that's the only package present." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:234 +msgid "" +"``python_requires`` gives the versions of Python supported by your " +"project. Installers 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:238 +#: ../../source/tutorials/packaging-projects.rst:329 +msgid "" +"There are many more than the ones mentioned here. See :doc:`/guides" +"/distributing-packages-using-setuptools` for more details." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:244 +msgid "" +":file:`setup.py` is the build script for :ref:`setuptools`. It tells " +"setuptools about your package (such as the name and version) as well as " +"which code files to include." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:248 +msgid "" +"Open :file:`setup.py` and enter the following content. Change the " +"``name`` to include your username; this ensures that you have a unique " +"package name and that your package doesn't conflict with packages " +"uploaded by other people following this tutorial." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:283 +msgid "" +":func:`setup` takes several arguments. This example package uses a " +"relatively minimal set:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:291 +msgid "" +"``version`` is the package version. See :pep:`440` for more details on " +"versions." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:296 +msgid "" +"``long_description`` is a detailed description of the package. This is " +"shown on the package detail page on the Python Package Index. In this " +"case, the long description is loaded from :file:`README.md`, which is a " +"common pattern." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:314 +msgid "" +"``package_dir`` is a dictionary with package names for keys and " +"directories for values. An empty package name represents the \"root " +"package\" --- the directory in the project that contains all Python " +"source files for the package --- so in this case the ``src`` directory is" +" designated the root package." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:319 +msgid "" +"``packages`` is a list of all Python :term:`import packages ` that should be included in the :term:`distribution package " +"`. Instead of listing each package manually, we can" +" use :func:`find_packages` to automatically discover all packages and " +"subpackages under ``package_dir``. In this case, the list of packages " +"will be ``example_package`` as that's the only package present." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:325 +msgid "" +"``python_requires`` gives the versions of Python supported by your " +"project. Installers like :ref:`pip` will look back though older versions " +"of packages until it finds one that has a matching Python version." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:333 +msgid "Creating README.md" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:335 +msgid "" +"Open :file:`README.md` and enter the following content. You can customize" +" this if you'd like." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:347 +msgid "" +"Because our configuration loads :file:`README.md` to provide a " +"``long_description``, :file:`README.md` must be included along with your " +"code when you :ref:`generate a source distribution `. Newer versions of :ref:`setuptools` will do this " +"automatically." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:354 +msgid "Creating a LICENSE" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:356 +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:387 +msgid "Including other files" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:389 +msgid "" +"The files listed above will be included automatically in your " +":term:`source distribution `. If you " +"want to control what goes in this explicitly, see :ref:`Using " +"MANIFEST.in`." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:393 +msgid "" +"The final :term:`built distribution ` will have the " +"Python files in the discovered or listed Python packages. If you want to " +"control what goes here, such as to add data files, see :doc:`Including " +"Data Files ` from the :doc:`setuptools " +"docs `." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:402 +msgid "Generating distribution archives" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:404 +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:408 +msgid "Make sure you have the latest version of PyPA's :ref:`build` installed:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:422 +msgid "" +"If you have trouble installing these, see the :doc:`installing-packages` " +"tutorial." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:425 +msgid "" +"Now run this command from the same directory where :file:`pyproject.toml`" +" is located:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:439 +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:449 +msgid "" +"The ``tar.gz`` file is a :term:`source archive ` whereas " +"the ``.whl`` file is a :term:`built distribution `. " +"Newer :ref:`pip` versions preferentially install built distributions, but" +" will fall back to source archives if needed. You should always upload a " +"source archive and provide built archives 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:458 +msgid "Uploading the distribution archives" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:460 +msgid "Finally, it's time to upload your package to the Python Package Index!" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:462 +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:470 +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:477 +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:492 +msgid "" +"Once installed, run Twine to upload all of the archives under " +":file:`dist`:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:506 +msgid "" +"You will be prompted for a username and password. For the username, use " +"``__token__``. For the password, use the token value, including the " +"``pypi-`` prefix." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:510 +msgid "After the command completes, you should see output similar to this:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:523 +msgid "" +"Once uploaded your package should be viewable on TestPyPI, for example, " +"https://test.pypi.org/project/example-pkg-YOUR-USERNAME-HERE" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:528 +msgid "Installing your newly uploaded package" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:530 +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:546 +msgid "Make sure to specify your username in the package name!" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:548 +msgid "" +"pip should install the package from TestPyPI and the output should look " +"something like this:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:558 +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:565 +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:580 +msgid "and import the package:" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:588 +msgid "" +"Note that the :term:`import package ` is " +"``example_package`` regardless of what ``name`` you gave your " +":term:`distribution package ` in :file:`setup.cfg` " +"or :file:`setup.py` (in this case, ``example-pkg-YOUR-USERNAME-HERE``)." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:596 +msgid "" +"**Congratulations, you've packaged and distributed a Python project!** ✨ " +"🍰 ✨" +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:599 +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:604 +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:608 +msgid "" +"Choose a memorable and unique name for your package. You don't have to " +"append your username as you did in the tutorial." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:610 +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:613 +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:617 +msgid "" +"Install your package from the real PyPI using ``python3 -m pip install " +"[your-package]``." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:619 +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:622 +msgid "" +"Read more about using :ref:`setuptools` to package libraries in " +":doc:`/guides/distributing-packages-using-setuptools`." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:624 +msgid "Read about :doc:`/guides/packaging-binary-extensions`." +msgstr "" + +#: ../../source/tutorials/packaging-projects.rst:625 +msgid "" +"Consider alternatives to :ref:`setuptools` such as :ref:`flit`, " +":ref:`hatch`, and :ref:`poetry`." +msgstr "" + diff --git a/source/conf.py b/source/conf.py index d92aa8d0d..23f910bd8 100644 --- a/source/conf.py +++ b/source/conf.py @@ -93,8 +93,8 @@ gettext_auto_build = True # Build MO files from PO on each build -# making all documents use single text domain -gettext_compact = "messages" +gettext_compact = "messages" # making all documents use single text domain +# gettext_compact = False gettext_location = True # Include location info in the translation files